Android實(shí)現(xiàn)與Apache Tomcat服務(wù)器數(shù)據(jù)交互(MySql數(shù)據(jù)庫(kù))
需求:Android客戶端連接服務(wù)器端MySQL數(shù)據(jù)庫(kù)中的內(nèi)容
環(huán)境部署
服務(wù)器:apache-tomcat-8.5.9
語(yǔ)言版本:Java 1.8.0_101
編譯環(huán)境:Eclipse
android Studio
調(diào)用jar包:httpclient-4.2.5,httpcore-4.2.4 //HttpClient父類
mysql-connector-java-5.1.40-bin //用于連接mysql數(shù)據(jù)庫(kù)
思路:涉及到服務(wù)器端mysql數(shù)據(jù)庫(kù)安裝、web應(yīng)用部分開(kāi)發(fā)和Android客戶端開(kāi)發(fā)三個(gè)部分
步驟:
1、mysql數(shù)據(jù)庫(kù)安裝
a、先安裝mysql-installer-community-5.7.17.0,其中在Setup Type上選擇“Server only”,然后記住數(shù)據(jù)庫(kù)端口號(hào)和賬號(hào)(例如:root)密碼(例如:123456),如下圖:


b、安裝成功驗(yàn)證。命令行窗口輸入密碼,然后輸入顯示所有數(shù)據(jù)庫(kù)命令:show databases; 一定要有分號(hào),并按回車。


c、NavicatforMySQL下載及使用。注冊(cè),然后連接數(shù)據(jù)庫(kù),輸入密碼后,能夠看到已存在的數(shù)據(jù)庫(kù),可以在其中進(jìn)行相關(guān)數(shù)據(jù)庫(kù)和數(shù)據(jù)表的創(chuàng)建操作。


(具體以參考資料中的內(nèi)容為主)
2、web應(yīng)用部分開(kāi)發(fā)
a、新建servlet,并且配置好web.xml中的相應(yīng)信息(在WebContent下的WEB-INF文件夾下加入web.xml文件來(lái)連接servlet與jsp前端),此外還需在libs中添加mysql-connector-java-5.1.37-bin.jar文件,代碼如下:
package com.Servlet;
import java.io.IOException;
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 java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.DBTool.DBUtil;
@WebServlet("/Servlet")
public class Login extends HttpServlet {
private static final long serialVersionUID = L;
/**
* @see HttpServlet#HttpServlet()
*/
public Login() {
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
response.getWriter().append("Served at: ").append(request.getContextPath());
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String ID = request.getParameter("ID");
String PW= request.getParameter("PW");
boolean type=false;
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
try
{
Connection con=DBUtil.getConnection();
Statement stmt=con.createStatement();
//mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù)表,表名叫:demotable ,需要自己預(yù)先在數(shù)據(jù)庫(kù)中進(jìn)行創(chuàng)建,包含相應(yīng)的字段和記錄。
String sql="select * from mysql.demotable where uid="+ID+" and pwd="+PW;
ResultSet rs=stmt.executeQuery(sql);
while(rs.next())
{
type=true;
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
DBUtil.Close();
out.print(type);
out.flush();
out.close();
}
}
}
web.xml內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>web</display-name>
<servlet>
<display-name>Login</display-name>
<servlet-name>Login</servlet-name>
<servlet-class>com.Servlet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
b、前端界面設(shè)計(jì)(TestPage.jsp)如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form id="from" action="Login" method="post"> <table> <tr><td>用戶名</td><td><input type="text" name="ID"></td></tr> <tr><td>密碼</td><td><input type="password" name="PW"></td></tr> <tr><td colspan="2" align="center"><input type="submit" value="登陸"/></td></tr> </table> </form> </body> </html>
c、在java Resources下的src文件夾中新建com.DBTool包,用作數(shù)據(jù)池來(lái)連接數(shù)據(jù)庫(kù),在包中建立DBUtil類實(shí)現(xiàn)功能,代碼如下:
package com.DBTool;
import java.sql.*;
public class DBUtil {
//其中mysql是數(shù)據(jù)庫(kù)名稱,在mysql57版本的數(shù)據(jù)庫(kù)中已經(jīng)預(yù)先新建完成;3306是mysql數(shù)據(jù)庫(kù)的端口號(hào)。
private static String url="jdbc:mysql://localhost:3306/mysql";
//com.mysql.jdbc.Driver是mysql-connector-java-5.1.40中的驅(qū)動(dòng)包路徑
private static String driverClass="com.mysql.jdbc.Driver";
//mysql的賬號(hào)和密碼是在安裝mysql中進(jìn)行設(shè)置的,這里拿來(lái)用即可。
private static String username="root";
private static String password="123456";
private static Connection conn;
//裝載驅(qū)動(dòng)
static{
try{
Class.forName(driverClass);
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
}
//獲取數(shù)據(jù)庫(kù)連接
public static Connection getConnection(){
try{
conn=DriverManager.getConnection(url,username,password);
}
catch(SQLException e){
e.printStackTrace();
}
return conn;
}
//建立數(shù)據(jù)庫(kù)連接
public static void main(String[] args){
Connection conn=DBUtil.getConnection();
if(conn!=null){
System.out.println("數(shù)據(jù)庫(kù)連接成功");
}
else{
System.out.println("數(shù)據(jù)庫(kù)連接失敗");
}
}
//關(guān)閉數(shù)據(jù)庫(kù)連接
public static void Close(){
if(conn!=null){
try{
conn.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
}
d、運(yùn)行服務(wù)器,測(cè)試是否成功搭建。


3、Android部分開(kāi)發(fā)
僅附上核心部分代碼,如下:
public void SendByHttpClient(final String id, final String pw){
new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpclient=new DefaultHttpClient();
HttpPost httpPost=new HttpPost("http://web應(yīng)用部署服務(wù)器上的IP地址:/HttpClientDemo/Login");//服務(wù)器地址,指向Servlet
List<NameValuePair> params=new ArrayList<NameValuePair>();//將id和pw裝入list
params.add(new BasicNameValuePair("ID",id));
params.add(new BasicNameValuePair("PW",pw));
final UrlEncodedFormEntity entity=new UrlEncodedFormEntity(params,"utf-8");//以UTF-8格式發(fā)送
httpPost.setEntity(entity);
HttpResponse httpResponse= httpclient.execute(httpPost);
if(httpResponse.getStatusLine().getStatusCode()==200)//在200毫秒之內(nèi)接收到返回值
{
HttpEntity entity=httpResponse.getEntity();
String response=EntityUtils.toString(entity1, "utf-8");//以UTF-8格式解析
Message message=new Message();
message.what=USER_LOGIN;
message.obj=response;
handler.sendMessage(message);使用Message傳遞消息給線程
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
最終,測(cè)試結(jié)果圖,如下:

參考資料:
http://blog.csdn.NET/qq_14923661/article/details/50461696 Android平臺(tái)實(shí)現(xiàn)與Apache Tomcat服務(wù)器數(shù)據(jù)交互(MySql數(shù)據(jù)庫(kù))
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
基于Android CALL && SendMes Test的相關(guān)介紹
本篇文章小編為大家介紹,Android CALL && SendMes Test 需要的朋友參考下2013-04-04
Android實(shí)現(xiàn)仿excel數(shù)據(jù)表格效果
這篇文章主要介紹了Android實(shí)現(xiàn)仿excel數(shù)據(jù)表格效果的實(shí)現(xiàn)代碼,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下2016-10-10
使用AccessibilityService實(shí)現(xiàn)微信自動(dòng)切換賬號(hào)功能
這篇文章主要為大家詳細(xì)介紹了使用AccessibilityService實(shí)現(xiàn)微信自動(dòng)切換賬號(hào)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12
Android中加載網(wǎng)絡(luò)資源時(shí)的優(yōu)化可使用(線程+緩存)解決
Android 中加載網(wǎng)絡(luò)資源時(shí)的優(yōu)化;基本的思路是線程+緩存來(lái)解決,具體解決思路如下,有類似情況的朋友可以參考下哈2013-06-06
Android 可拖動(dòng)的seekbar自定義進(jìn)度值
這篇文章主要介紹了Android 可拖動(dòng)的seekbar自定義進(jìn)度值的相關(guān)資料,有需要的朋友參考下2016-04-04
Kotlin中關(guān)于內(nèi)聯(lián)函數(shù)的一些理解分享
這篇文章主要給大家介紹了關(guān)于Kotlin中內(nèi)聯(lián)函數(shù)的一些理解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
android popuwindow點(diǎn)擊外部窗口不消失的實(shí)例
下面小編就為大家?guī)?lái)一篇android popuwindow點(diǎn)擊外部窗口不消失的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04
Android自定義控件實(shí)現(xiàn)萬(wàn)能的對(duì)話框
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)萬(wàn)能對(duì)話框的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03
Android10 App啟動(dòng)Activity源碼分析
這篇文章主要為大家介紹了Android10 App啟動(dòng)Activity源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android 中圖片和按鈕按下?tīng)顟B(tài)變化實(shí)例代碼解析
這篇文章通過(guò)實(shí)例代碼給大家總結(jié)了android 中圖片和按鈕按下?tīng)顟B(tài)變化問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨腳本之家小編一起學(xué)習(xí)吧2018-06-06

