android中本地建立数据库,服务器访问本地数据库,将查询结果返回客户端(重要的一条线)

来源:互联网 发布:汉诺塔递归算法难么 编辑:程序博客网 时间:2024/06/05 11:58

 服务器端  客户端传来的参数通过UserQuery(servlet)获取参数,调用相应的(数据库表中)方法,类通过DBConnection连接数据库进行数据库的访问操作获取操作的结果。

 a.DBConection来连接数据库以及增删改查的连接语句

importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement; publicclassDBConnection {   public Connection conn=null;   public Statement stmt=null;   public ResultSet resultSet=null;   private static Stringdbclassname="com.microsoft.sqlserver.jdbc.SQLServerDriver";   private static Stringdburl="jdbc:sqlserver://172.19.198.40:1433;DatabaseName=userload";   private static String dbuser="sa";   private static String dbpwd="123";      /* 连接数据库  */   public static Connection getconnection(){       Connection conn =null;              try{           //连接数据库           Class.forName(dbclassname);           //得到连接           conn=DriverManager.getConnection(dburl,dbuser,dbpwd);                  }       catch(Exception ee){           ee.printStackTrace();       }       if(conn!=null){           return conn;       }       return null;   }      /* 查询操作  */   public ResultSet executequery(String sql){              try{           conn=getconnection();           stmt=conn.createStatement();           resultSet=stmt.executeQuery(sql);          }        catch(Exception ex){            System.err.println(ex.getMessage());        }        return resultSet;       }      /* 更新操作  */   public int executeupdate(String sql){       int result=0;       try{           conn=getconnection();           stmt=conn.createStatement();           result=stmt.executeUpdate(sql);                  }       catch(SQLException ex){           result=0;           System.out.println(ex.toString());       }       try{           stmt.close();       }       catch(SQLException ex1){           ex1.printStackTrace();                  }       return result;   }   /*  关闭连接 */   public void close(){       try{           if(resultSet!=null){               resultSet.close();           }       }       catch(Exception e){           e.printStackTrace(System.err);       }       try{           if(stmt!=null){               stmt.close();           }       }       catch(Exception e){           e.printStackTrace(System.err);       }       try{           if(conn!=null){               conn.close();           }       }       catch(Exception e){           e.printStackTrace(System.err);       }   } }


b.对于数据库中的表可以建相应的类 对于这个表的所有操作可以以静态方法的形式写在这个类中。

public class User {      private String userID;   private String userName;   private String password;      public User() {       super();   }   public User(String userID, String userName,String password) {       super();       this.userID = userID;       this.userName = userName;       this.password = password;   }  public String getUserID() {       return userID;   }   public void setUserID(String userID) {       this.userID = userID;   }   public String getUserName() {       return userName;   }   public void setUserName(String userName) {       this.userName = userName;   }   public String getPassword() {       return password;   }   public void setPassword(String password) {       this.password = password;   }   public static User getUserByNamePassword(Stringuser_name,String password)throws SQLException{       User user = new User();       // 生成查询语句       String sql ="SELECT user_id,user_name, password FROM Table_user WHERE(user_name ='"+user_name+"') and(password='"+password+"')";       DBConnection dbconn = newDBConnection();       ResultSet rs = dbconn.executequery(sql);       if(rs.next()){           user.setUserID(rs.getString("user_id"));           user.setUserName(user_name);           user.setPassword(password);       }       else{user=null;}       return user;   }}


73.将从数据库中得到的结果转换成json对象解析出来

publicstatic JSONObject userToJSON(User user) throwsJSONException,SQLException{       JSONObjectuser_json = new JSONObject();       if((user!=null)&&(user.getUserName()!=null)&&(user.getPassword()!=null)){           user_json.put("user_id",user.getUserID());           user_json.put("user_name",user.getUserName());           user_json.put("password",user.getPassword());       }else{           user_json.put("Err","根据给定条件没有找到查询结果!");       }       returnuser_json;   }


 

d.建立一个servlet类 用来实现客户请求和服务器的响应。

Servlet是一种服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面。它担当客户请求(Web浏览器或其他HTTP客户程序)与服务器响应(HTTP服务器上的数据库或应用程序)的中间层。 Servlet是位于Web 服务器内部的服务器端的Java应用程序,与传统的从命令行启动的Java应用程序不同,Servlet由Web服务器进行加载,该Web服务器必须包含支持Servlet的Java虚拟机。

 

publicstatic JSONObject userToJSON(User user) throwsJSONException,SQLException{       JSONObjectuser_json = new JSONObject();       if((user!=null)&&(user.getUserName()!=null)&&(user.getPassword()!=null)){           user_json.put("user_id",user.getUserID());           user_json.put("user_name",user.getUserName());           user_json.put("password",user.getPassword());       }else{           user_json.put("Err","根据给定条件没有找到查询结果!");       }       returnuser_json;   }

e.客户端建立一个HttpAccess访问服务器


 

 

importorg.apache.http.HttpResponse;importorg.apache.http.HttpStatus;importorg.apache.http.client.HttpClient;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpUriRequest;importorg.apache.http.impl.client.DefaultHttpClient;importorg.apache.http.util.EntityUtils;importorg.json.JSONObject;importandroid.util.Log; /** *使用Get方法访问服务器 *1.创建一个HttpGet对象 *2.创建HttpClient对象 *3.发送Get请求:调用HttpClient对象的execute(HttpUriRequest)方法 *4.读取服务器响应,调用HttpResponse的getEntity()方法可获取HttpEntity对象 *5.将从服务器获得的对象封装成JSON对象 * * */publicclassHttpAccess {         private static final String TAG ="HttpAccess";      public static JSONObject Read(String url) {       Log.d(TAG, url);       JSONObject rtnJson = null;       try {       //创建HttpGet对象       HttpGet get = new HttpGet(url);       // 创建HttpClient对象       HttpClient httpClient = newDefaultHttpClient();       //发送Get请求       HttpResponse httpResponse =httpClient.execute(get);       // 读取服务器状态码       int statCode =httpResponse.getStatusLine().getStatusCode();       // 如果服务器成功地返回响应       if (statCode == HttpStatus.SC_OK){//SC_OK=200           // 获取服务器响应字符串           String result = EntityUtils.toString(httpResponse.getEntity());           // 将字符串封装成JSON对象           rtnJson = new JSONObject(result);       }       }catch(Exception e){           Log.d(TAG, e.toString());       }              Log.d(TAG,"responsejson:"+rtnJson);          return rtnJson;   }   }

f.建立一个activity与用户进行交互,获取参数。