服务器端 客户端传来的参数通过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;
}
}