servlet連接數據庫顯示到android界面

數據庫—servlet—android

android是不能直接訪問數據庫的,所以可以通過servlet來訪問數據庫顯示到android界面。通常如果你的電腦運行內存還行的話,就用兩個eclipse,我就用了兩個eclipse,一個用於servlet連接數據庫,就是有web項目的eclipse,另一個是用於android的,就是得有SDK和ADT的android項目。
先講第一個,也就是數據庫-servlet
卡普空
這是數據庫的設計建表
包括一個輸入校驗表和一個界面主表顯示
何少海
cascade
程度
第一部分代碼,也就是第一個有動態web的eclipse中的代碼(由於代碼較多,其他的都放在了我的網盤裏,網盤放的就是我的整個項目)
鏈接:https://pan.baidu.com/s/1Xw2O2-C5UMIcRjNaNibBCg 提取碼:jzw8
現在我展示的是servlet連接數據庫的代碼
responseJsonData.java

package com.bai;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLEncoder;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
 * Servlet implementation class responseJsonData
 */
 @WebServlet("/responseJsonData")
public class responseJsonData extends HttpServlet {
	private static final long serialVersionUID = 1L;
	/**
     * @see HttpServlet#HttpServlet()
     */
     public responseJsonData() {
        super();
        // TODO Auto-generated constructor stub
    }
    /**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */ 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost( request,  response);
	} 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub 
		Connection con;
		Statement sql;
		ResultSet rs;
		PrintWriter out =response.getWriter();
		try{Class.forName("com.mysql.cj.jdbc.Driver").newInstance();}
		catch(Exception e){out.print(e);}
		try{
		    String uri="jdbc:mysql://localhost:3306/android?useSSL=false&serverTimezone=UTC";
		    con=DriverManager.getConnection(uri,"root","199735");
		    sql=con.createStatement();
		    rs=sql.executeQuery("SELECT * FROM student");
		  
		    ArrayList<student> arrList = new ArrayList<student>();
		    while(rs.next())
		    {
		    	student s = new student();
		    	s.setSno(rs.getString("sno"));
		    	s.setSname(rs.getString("sname"));
		    	s.setSage(rs.getString("sage"));
		    	s.setSbirth(rs.getDate("sbirth").toString());
		    	arrList.add(s);
		    }
		     String  js1 = JSONObject.toJSONString(arrList);
		    System.out.println(js1);
		    response.setContentType("text/html; charset=utf-8");
		    response.setCharacterEncoding("utf-8");
		    out.print(js1);
		    
		    con.close();
		}
		catch(SQLException e1){out.print(e1);}
	}
		
		
	}   

在eclipse裏運行,這裏面有默認的瀏覽器,服務器Tomcat也加進去了,就直接運行了
喜上加喜
這樣,就通過servlet訪問連接到了數據庫
在這裏插入圖片描述
第二部分,servlet-android
我的
android項目代碼,我在這兒展示的是連接訪問servlet的代碼,其他代碼可以去看我網盤:(整個項目在網盤:鏈接:https://pan.baidu.com/s/1qFMYx7NXWQvrtnvnvhfafA 提取碼:kemv)
RegisterAct.java,這個用於連接loginservlet,進行輸入校驗

package com.example.testjson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.HTTP;
import org.json.JSONArray;
import org.json.JSONObject;
import com.example.testjson.MainActivity.DownloadThread;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class RegisterAct extends Activity {
	private Button reset;
	private Button register;
	// 用戶
	private EditText uNameEditText;
	// 密碼
	private EditText pwdEditText1;

	private String userName;
	private String password;

	private String serverIp = "10.0.2.2";
	private String serverPort = "8080";

	private String httpStr;
	private String postStr;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.register);
		reset = (Button) findViewById(R.id.reset);
		register = (Button) findViewById(R.id.register);
		uNameEditText=(EditText)findViewById(R.id.username);
		pwdEditText1=(EditText)findViewById(R.id.password1);
		register.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				if (registerIsSuccsee()) {
					//register();
					LoginThread loginThread = new LoginThread();
					loginThread.start();
				}
				
			}

		});
		reset.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {

				uNameEditText.setText("");
				pwdEditText1.setText("");
				
			}
		});

	}
	/*
	 * 判斷用戶註冊輸入是否規範 錄入信息驗證 驗證是否通過
	 */
	 private boolean registerIsSuccsee(){

    	//獲取用戶輸入
    	userName=uNameEditText.getText().toString();
    	password=pwdEditText1.getText().toString();
    	if("".equals(userName)){
    		//用戶輸入用戶名爲空
    		Toast.makeText(RegisterAct.this, "用戶名不能爲空!", Toast.LENGTH_SHORT).show();
    		return false;
    	}else if("".equals(password)){
    		//密碼不能爲空
    		Toast.makeText(RegisterAct.this, "密碼不能爲空!", Toast.LENGTH_SHORT).show();
    		return false;
    	}
    	return true;
    }
    class LoginThread extends Thread{
        @Override
        public void run() {
        	register();
        }
    }
    /**
	 * 註冊
	 */
	 private void register() {
		
		httpStr = "http://";
		postStr = httpStr + serverIp + ":" + serverPort
				+ "/aaaa/loginServlet";
	    try {
			HttpParams httpParams = new BasicHttpParams();
			// 設置連接超時
			int timeoutConnection = 3000;
			HttpConnectionParams.setConnectionTimeout(httpParams,
					timeoutConnection);
			DefaultHttpClient httpClient = new DefaultHttpClient(httpParams);
			HttpPost httpPost = new HttpPost(postStr);
			List<NameValuePair> nvps = new ArrayList<NameValuePair>();
			nvps.add(new BasicNameValuePair("username", userName));
			nvps.add(new BasicNameValuePair("password", password));
			nvps.add(new BasicNameValuePair("client", "1"));
			httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
			HttpResponse response = httpClient.execute(httpPost);
			HttpEntity entity = response.getEntity();
			InputStream is=entity.getContent();
			String isUser = ConvertStreamToString(is);
			 Message msg = new Message();
             msg.what = 3;
			if(!"failure".equals(isUser)){
				
				 msg.what = 1;
			}else{
				
				 msg.what = 2;
			}
			uiHandler.sendMessage(msg);
			/*if(!"failure".equals(isUser)){
				
				//uNameEditText.setText("");
				//pwdEditText1.setText("");
				Intent i=new Intent(RegisterAct.this,MainActivity.class);
				startActivity(i);
			}else{
				
				AlertDialog.Builder builder1=new Builder(RegisterAct.this);
				builder1.setMessage("用戶名或密碼不正確!!!");
				builder1.setTitle("提示");
				builder1.setPositiveButton("確認", new OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.dismiss();
					}
				}).show();
			}*/
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} catch (ClientProtocolException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		
		}
	}	
	private Handler uiHandler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case 1:
                	uNameEditText.setText("");
    				pwdEditText1.setText("");
    				Intent i=new Intent(RegisterAct.this,MainActivity.class);
					startActivity(i);
                    break;
                case 2: 
                	AlertDialog.Builder builder1=new Builder(RegisterAct.this);
    				builder1.setMessage("用戶名或密碼不正確!!!");
    				builder1.setTitle("提示");
    				builder1.setPositiveButton("確認", new OnClickListener() {
    					
    					@Override
    					public void onClick(DialogInterface dialog, int which) {
    						dialog.dismiss();
    					}
    				}).show();
                	break;
                 default:
                		break;
            }
        }
    };	
    // 讀取字符
	public String ConvertStreamToString(InputStream is) {
		StringBuffer sb = new StringBuffer();
		BufferedReader br = new BufferedReader(new InputStreamReader(is));
		String returnStr = "";
		try {
			while ((returnStr = br.readLine()) != null) {
				sb.append(returnStr);
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
		final String result = sb.toString();

		System.out.println(result);
		return result;
	}
}

MainActivity.java,這個用於連接訪問responseJsonData,進行android界面顯示

package com.example.testjson;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {

	private ListView lv;

	// uiHandler在主線程中創建,所以自動綁定主線程
	// private Handler uiHandler = new Handler();

	//uiHandler在主線程中創建,所以自動綁定主線程
    private Handler uiHandler = new Handler(){
          @Override
        public void handleMessage(Message msg) {
            switch (msg.what){
                case 1:
                    System.out.println("handleMessage thread id " + Thread.currentThread().getId());
                    System.out.println("msg.arg1:" + msg.arg1);
                    int[] i = new int[] { R.id.name, R.id.jing, R.id.wei };
        			SimpleAdapter simplead = new SimpleAdapter(MainActivity.this,
        					(List)msg.obj, R.layout.show, new String[] { "name", "jing",
        							"wei" }, i);
        			MainActivity.this.lv.setAdapter(simplead);
        	
                    break;
                  }
          }
    };
    @Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		lv = (ListView) findViewById(R.id.listView1);

		DownloadThread downloadThread = new DownloadThread();
        downloadThread.start();

	}  
	class DownloadThread extends Thread{
        @Override
        public void run() {
    		List<Map<String, Object>> listall = new ArrayList<Map<String, Object>>();
    		StringBuilder builder = new StringBuilder();
    		HttpClient client = new DefaultHttpClient();
    		HttpGet get = new HttpGet(
    				"http://10.0.2.2:8080/aaaa/responseJsonData");
    		try {
    			HttpResponse response = client.execute(get);
    		
    			BufferedReader reader = new BufferedReader(
    					new InputStreamReader(response.getEntity().getContent(),"GBK"));
    			for (String s = reader.readLine(); s != null; s = reader
    					.readLine()) {
    				builder.append(s);
    			}
    			reader.close();
    			String str = builder.toString();
    			Log.d("json",str);
    			//str.getBytes("utf-8");
    			JSONArray array = new JSONArray(new String(str));
    			Map<String, Object> listem1 = new HashMap<String, Object>();
				listem1.put("name", "學號");
				listem1.put("jing", "姓名");
				listem1.put("wei", "專業");
				listall.add(listem1);
				for (int i = 0; i < array.length(); i++) {
    				JSONObject item = array.getJSONObject(i);
    				String name = item.getString("sno");
    				String u_longitude = item.getString("sname");
    	
    				String u_latitude = item.getString("sage");
    				Map<String, Object> listem = new HashMap<String, Object>();
    				listem.put("name", name);
    				listem.put("jing", u_longitude);
    				listem.put("wei", u_latitude);
    				listall.add(listem);
    			}
    			 Message msg = new Message();
                msg.what = 1;
                msg.obj = listall;

                //將該Message發送給對應的Handler
                uiHandler.sendMessage(msg);
             } catch (Exception e) {
    			e.printStackTrace();
    		}
        }
    }


}
   

運行進入登錄界面,輸入用戶名和密碼
經濟
最後,就顯示出來了
呼呼
關注小何童鞋,一隻不斷努力的小白!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章