Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(一)
2017-04-18 17:18
507 查看
前记:Android真机访问PC端MySQL等数据库时,一般的思路为:开通mysql远程连接,andriod直接通过pc的ip地址访问mysql,也就是android直连mysql。本人本想也通过此方法实现,无奈android开发平台是基于Android
Studio的,其不可导入mysqk的jdbc.jar包,出现如Android Studio已有sql资源包,不可再导入此类jar包的错误。查找了半天也没找出解决的办法。而且此方法虽符合逻辑,但是存在不少漏洞,不安全。
最后我选择了一种基于servlet为服务器的中转实现方式,其主要的思路为:通过servlet搭建的服务器将mysql中需要的数据取出来发布在以tomcat为支持的网页上,android端直接访问该网页,将网页中的数据全部取出。当然也可以通过webservice实现中转。。。本文主要讲解服务器代码,客户端详解请看本人下一篇博文!!!
话不多说,直接上代码:
1、服务器端主要webtest.Java代码(在eclipse中新建Dynamic
Web Project工程,工程名为webtt)
[java] view
plain copy
<span style="font-size:14px;">package com.tt;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
import com.tt.Deviceinformation;
public class webtest extends HttpServlet {
private String idAndstatement,sqlqurey,sqlupdate,deviceid,statement;
private Connection conn;
private Statement stm=null;
private ResultSet result=null;
private PrintWriter outPrintWriter;
private PreparedStatement pstm=null;
private static final long serialVersionUID = 1L;
/**
* @param args
*/
public webtest(){
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//sex="男";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/自己的数据库名称?" +
"user=root&password=123456&useUnicode=true&characterEncoding=utf-8");
stm=(Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
sqlqurey="select * from deviceif ";//查询表语句
result = stm.executeQuery(sqlqurey);
if (result!=null) {//下面用到servlet
response.setContentType("text/html;charset=UTF-8");//这句必须放在下一句之前
outPrintWriter =response.getWriter();
//<span style="font-family: Arial, Helvetica, sans-serif;">idAndstatement为android返回给服务器的字段,里面包含的信息,自己自定义</span>
idAndstatement=new String(request.getParameter("idAndstatement").getBytes("ISO-8859-1"),"UTF-8");
//对<span style="font-family: Arial, Helvetica, sans-serif;">idAndstatement进行拆解(以“,”为分界)</span>
String [] splitStrings=idAndstatement.split("\\,");
for(int i=0;i<splitStrings.length;i++){
//System.out.println(splitStrings.length);
}
deviceid=splitStrings[0];
statement=splitStrings[1];
//更新数据
if(!deviceid.equals("t")){
sqlupdate="update deviceif set 仪表状态=? where 设备号=?";
pstm=(PreparedStatement) conn.prepareStatement(sqlupdate);
//改变数据库记录性别
pstm.setString(1, statement);
pstm.setString(2, deviceid);
pstm.executeUpdate();
//outPrintWriter.print("性别:"+sex);
}
while(result.next()){//从mysql选取数据
//获得客户端发来的参数信息
<span style="font-family: Arial, Helvetica, sans-serif;">/*outPrintWriter.write("用户名:"+name+"的账户密码为:"+result.getString(1)+""+result.getString(2));*/</span>
//<span style="font-family: Arial, Helvetica, sans-serif;">outPrintWriter.write()用于向网页写数据</span>
outPrintWriter.write(result.getString(1)+" "+result.getString(2)+" "+result.getString(3)+" "+
result.getString(4)+" "+" "+result.getString(5)+" "+" "+result.getString(6)+" ");
outPrintWriter.println();
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
outPrintWriter.flush();
outPrintWriter.close();
//response.getWriter().write("link sucessfully!");
}
public void Json(){
}
//释放资源
public void destroy() {
super.destroy();
try{
if(result!=null){
result.close();//关闭数据库
result=null;
}
if(stm!=null){
stm.close();
stm=null;
}
if(pstm!=null){
pstm.close();
pstm=null;
}
if(conn!=null){
conn.close();//关闭后Statement,PreparedStatement也会关闭
conn=null;
}
}catch(Exception ex){
System.out.println("Error : " + ex.toString());
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}</span>
2、服务器端web.xml需要做响应修改,可直接替换本来web.xml(说明,HelloWorld任意取的,com.tt.webtest为在工程webtt下src下创建com.tt包,在包下新建webtest文件,如上)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.tt.webtest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>
3、tomcat 安装并调试成功后,通过tomcat发布之后在浏览器输入http://localhost:8080/webtt/HelloWorld 即可等待android端的访问请求,从而自启动webtest中的doget()函数
Studio的,其不可导入mysqk的jdbc.jar包,出现如Android Studio已有sql资源包,不可再导入此类jar包的错误。查找了半天也没找出解决的办法。而且此方法虽符合逻辑,但是存在不少漏洞,不安全。
最后我选择了一种基于servlet为服务器的中转实现方式,其主要的思路为:通过servlet搭建的服务器将mysql中需要的数据取出来发布在以tomcat为支持的网页上,android端直接访问该网页,将网页中的数据全部取出。当然也可以通过webservice实现中转。。。本文主要讲解服务器代码,客户端详解请看本人下一篇博文!!!
话不多说,直接上代码:
1、服务器端主要webtest.Java代码(在eclipse中新建Dynamic
Web Project工程,工程名为webtt)
[java] view
plain copy
<span style="font-size:14px;">package com.tt;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
import com.tt.Deviceinformation;
public class webtest extends HttpServlet {
private String idAndstatement,sqlqurey,sqlupdate,deviceid,statement;
private Connection conn;
private Statement stm=null;
private ResultSet result=null;
private PrintWriter outPrintWriter;
private PreparedStatement pstm=null;
private static final long serialVersionUID = 1L;
/**
* @param args
*/
public webtest(){
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//sex="男";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/自己的数据库名称?" +
"user=root&password=123456&useUnicode=true&characterEncoding=utf-8");
stm=(Statement) conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
sqlqurey="select * from deviceif ";//查询表语句
result = stm.executeQuery(sqlqurey);
if (result!=null) {//下面用到servlet
response.setContentType("text/html;charset=UTF-8");//这句必须放在下一句之前
outPrintWriter =response.getWriter();
//<span style="font-family: Arial, Helvetica, sans-serif;">idAndstatement为android返回给服务器的字段,里面包含的信息,自己自定义</span>
idAndstatement=new String(request.getParameter("idAndstatement").getBytes("ISO-8859-1"),"UTF-8");
//对<span style="font-family: Arial, Helvetica, sans-serif;">idAndstatement进行拆解(以“,”为分界)</span>
String [] splitStrings=idAndstatement.split("\\,");
for(int i=0;i<splitStrings.length;i++){
//System.out.println(splitStrings.length);
}
deviceid=splitStrings[0];
statement=splitStrings[1];
//更新数据
if(!deviceid.equals("t")){
sqlupdate="update deviceif set 仪表状态=? where 设备号=?";
pstm=(PreparedStatement) conn.prepareStatement(sqlupdate);
//改变数据库记录性别
pstm.setString(1, statement);
pstm.setString(2, deviceid);
pstm.executeUpdate();
//outPrintWriter.print("性别:"+sex);
}
while(result.next()){//从mysql选取数据
//获得客户端发来的参数信息
<span style="font-family: Arial, Helvetica, sans-serif;">/*outPrintWriter.write("用户名:"+name+"的账户密码为:"+result.getString(1)+""+result.getString(2));*/</span>
//<span style="font-family: Arial, Helvetica, sans-serif;">outPrintWriter.write()用于向网页写数据</span>
outPrintWriter.write(result.getString(1)+" "+result.getString(2)+" "+result.getString(3)+" "+
result.getString(4)+" "+" "+result.getString(5)+" "+" "+result.getString(6)+" ");
outPrintWriter.println();
}
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
outPrintWriter.flush();
outPrintWriter.close();
//response.getWriter().write("link sucessfully!");
}
public void Json(){
}
//释放资源
public void destroy() {
super.destroy();
try{
if(result!=null){
result.close();//关闭数据库
result=null;
}
if(stm!=null){
stm.close();
stm=null;
}
if(pstm!=null){
pstm.close();
pstm=null;
}
if(conn!=null){
conn.close();//关闭后Statement,PreparedStatement也会关闭
conn=null;
}
}catch(Exception ex){
System.out.println("Error : " + ex.toString());
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}</span>
2、服务器端web.xml需要做响应修改,可直接替换本来web.xml(说明,HelloWorld任意取的,com.tt.webtest为在工程webtt下src下创建com.tt包,在包下新建webtest文件,如上)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>com.tt.webtest</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>
3、tomcat 安装并调试成功后,通过tomcat发布之后在浏览器输入http://localhost:8080/webtt/HelloWorld 即可等待android端的访问请求,从而自启动webtest中的doget()函数
相关文章推荐
- Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(二)
- Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(一)
- Android studio 通过以servlet搭建的服务器访问 PC端 mysql数据库(二)
- 在MAC搭建apache服务器的基础上,通过php访问MySql数据库
- Android通过HttpClient访问服务器的servlet
- 搭建通过 ssh 访问的 Git 服务器
- 怎么通过web服务器访问MYSQL数据库,使其数据同步到android SQLite数据库?
- mqtt服务器搭建成功,微信端可以通过websocket访问,计算机可以访问,安卓可以访问,stm32嵌入式可以访问,一个完整的物联网系统!
- 在阿里云主机上搭建JBOSS服务器并部署项目,通过域名:端口号访问项目
- Apache 通过CGI方式实现对fossil仓库访问的服务器搭建
- 怎么通过web服务器访问MYSQL数据库,使其数据同步到android SQLite数据库?
- 搭建tomcat服务器,目标可通过外网ip访问本机
- android客户端访问tomcat搭建的servlet服务器并互传数据
- 搭建通过 ssh 访问的 Git 服务器
- 使用tomcat 来搭建本地服务器 ,使用Android 客户端(真机)通过浏览器访问
- 在云服务器上搭建JSP环境并发布web项目(通过域名访问自己写的项目)
- 自己搭建服务器通过外网访问内网的方法(端口映射、内网穿透、重定向等)
- Windows下搭建Git服务器,安装Copssh通过SSH访问,教程及总结
- 利用个人电脑搭建WEB服务器并能通过域名访问
- VLC搭建流媒体服务器。使用PC端,移动端访问