數據庫—servlet—android
android是不能直接訪問數據庫的,所以可以通過servlet來訪問數據庫顯示到android界面。通常如果你的電腦運行內存還行的話,就用兩個eclipse,我就用了兩個eclipse,一個用於servlet連接數據庫,就是有web項目的eclipse,另一個是用於android的,就是得有SDK和ADT的android項目。
先講第一個,也就是數據庫-servlet
這是數據庫的設計建表
包括一個輸入校驗表和一個界面主表顯示
第一部分代碼,也就是第一個有動態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();
}
}
}
}
運行進入登錄界面,輸入用戶名和密碼
最後,就顯示出來了
關注小何童鞋,一隻不斷努力的小白!