一,简介
要实现Android端对数据库的远程操作由三部分组成:Android端、服务器端和数据库。Android端发送操作请求,服务器端响应Android端的操作请求,连接部署的数据库,并发送操作命令语句,再返回操作结果;服务器端发送操作结果返回Android端,Android根据服务器端返回的数据判断,端显示相应的提示。
二,过程
建立服务器端
(1)创建数据库连接类DBConnection(连接数据库要引入数据库对应的jdbc的jar因为我用的是包sqlserver所以我介绍了2008年的数据库sqljdbc4.jar包:https://wwp.lanzoum.com/iHmUY07b11ja 密码:1oj0)
import java.sql.*; import java.util.ArrayList; import java.util.List; public class DBConnection { private final static String URL="jdbc:sqlserver://127.0.0.1:1435;DatabaseName=book_db"; private final static String USER="sa"; private final static String PASSWORD="password"; private static Connection conn=null; public DBConnection(){ try{ Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");////在连接之前,应引入数据库对应的数据库jdbc的jar包 conn=(Connection)DriverManager.getConnection(URL,USER,PASSWORD); }catch(Exception ex){ ex.printStackTrace(); } } //新增 public boolean add(String[] args){ String sql="insert into books" "(id,name,author,location) " "values(?,?,?,?,?)"; try { PreparedStatement psmt=conn.prepareStatement(sql); psmt.setString(1,args[1]); psmt.setString(2,args[2]); psmt.setString(3,args[3]); psmt.setString(4,args[4]); psmt.execute(); return true; } catch (SQLException ex) { ex.printStackTrace(); return false; } } //修改 public boolean update(String[] args){ String sql="update books set id=?,name=?,name=?,author=?,location=? where id=?"; try { PreparedStatement psmt=conn.prepareStatement(sql); psmt.setString(1,args[1]); psmt.setString(2,args[2]); psmt.setString(3,args[3]); psmt.setString(4,args[4]); psmt.setString(5,args[5]); psmt.execute(); return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } //删除 public boolean delete(String id){ String sql="delete from books where id=?"; try { PreparedStatement psmt=conn.prepareStatement(sql); psmt.setString(1,id); psmt.execute(); return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } //查看 public List<Book> search(String where){ List<Book> list=new ArrayList<Book>(); try { Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("select * from books " where); Book b=null; while(rs.next()){ b=new Book(); b.setId(rs.getString("id")); b.setName(rs.getString("name")); b.setAuthor(rs.getString("author")); b.setLocation(rs.getString("location")); list.add(b); } } catch (Exception ex) { ex.printStackTrace(); } return list; } public void close() { try { conn.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } }
(2)服务器代码
import java.net.ServerSocket; import java.net.Socket; public class SocketServer { ServerSocket server=null; Socket socket=null; public static void main(String[] args) { new SocketServer(); } public SocketServer(){ try { server=new ServerSocket(8008); while(true){ System.out.println("服务器等待客户端连接..."); socket =server.accept(); String ip=socket.getLocalAddress().getHostAddress(); int port=socket.getPort(); System.out.println("客户端连接ip:" ip " 端口号:" port); new ServerThread(socket).start(); } }catch (Exception ex){ ex.printStackTrace(); } } }
线程实现
import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.List; public class ServerThread extends Thread { Socket socket; OutputStream out=null; InputStream in=null; DBConnection db; public ServerThread(Socket socket){ this.socket=socket; } public void run(){ try{ String ip=socket.getLocalAddress().getHostAddress(); int port=socket.getPort(); byt[] buffer=new byte[1024];
out=socket.getOutputStream();
in=socket.getInputStream();
db=new DBConnection();
//接受指令
int len=in.read(buffer,0,1024);
if(len!=-1){
String mes=new String(buffer,0,len,"UTF-8");
String[] args=mes.split("\\+\\+\\+\\+");
if (args[0].equals("insert")){
boolean b=db.add(args);
System.out.println(String.valueOf(b));
out.write(String.valueOf(b).getBytes());
}
else if(args[0].equals("update")){
boolean b=db.update(args);
System.out.println(String.valueOf(b));
out.write(String.valueOf(b).getBytes());
}else if (args[0].equals("delete")){
boolean b=db.delete(args[1]);
System.out.println(String.valueOf(b));
out.write(String.valueOf(b).getBytes());
}else if (args[0].equals("search")){
List<Book> list=db.search(args[1]);
String s="";
for (int i=0;i<list.size();i++){
Book book=list.get(i);
s+= book.getId();
s+="+++"+book.getName();
s+="+++"+book.getAuthor();
s+="+++"+book.getLocation();
s+="++++";
}
System.out.println(s);
if (s.equals("")){
s+="++++";
}
out.write(s.getBytes());
}else{
System.out.println(mes);
}
}
}catch (Exception ex){
ex.printStackTrace();
CloseUtil.closeAll(db,in,out,socket);
}
}
}
关闭工具类
public class CloseUtil {
public static void closeAll(DBConnection db, Closeable... io) {
for (Closeable temp:io) {
if(null!=temp) {
try {
temp.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
Book类
public class Book {
private String id="";
private String name="";
private String author="";
private String location="";
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
}
(3)数据库设计
含id,name,author,location四个字段
(4)Android端实现
链接:https://pan.baidu.com/s/1km09M0r1dsRMDK5BzUveNQ 提取码:y1ud
三,总结
这是我专业结课的设计,用来记录一下。