您的位置:首页 > 移动开发 > Android开发

Android实现与SQL连接

2016-03-25 19:04 681 查看
为了实现这个功能,在网上看了很多资料,可是就是下载源码来运行都还是出错,后来通过看代码总结,终于弄明白了一点,

Android与SQL连接,可以通过WebService搭建桥梁实现与SQL的连接,第二种就是通过JDBC实现与SQL连接,

本文主要是实现第二种。首先你需要在服务器建立一个数据库,如下图:



在这个代码的编写前,我们需要导入jtds-1.2.7.jar包:



然后进入代码的正式编写,我们主要是接收从服务器端发来的数据,布局非常的简单,主要用一个listview展示数据,

java代码的编写才是关键,详细如下:

package com.example.androidsql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.database.SQLException;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ListView;
import android.widget.SimpleAdapter;

/*
* @author 王能斌
* Android实现与SQL数据访问
*/
public class MainActivity extends Activity {

private ListView sqlList;
private List<Map<String, Object>> listItems ;
Map<String, Object> listItem;
private Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

sqlList = (ListView) this.findViewById(R.id.sql_list);

//此处关键,数据库的连接需放在子线程中操作
//网上的代码基本没放在子线程中,程序运行报错,应该是Android5.0以后耗时操作需放在子线程中
new Thread(new Runnable() {
@Override
public void run() {
String userName = "sa";//用户名
String password = "123456";//密码
Connection con = null;
try {
// 加载驱动程序
Class.forName("net.sourceforge.jtds.jdbc.Driver");
con = DriverManager.getConnection(
"jdbc:jtds:sqlserver://192.168.0.65:1433/StockManage", userName,
password);
} catch (ClassNotFoundException e) {
System.out.println("加载驱动程序出错");
} catch (SQLException e) {
System.out.println(e.getMessage());
} catch (Exception e) {
System.out.println(e.getMessage());
}
try {
testConnection(con);//测试数据库连接
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
}).start();
//接收从子线程发回来的结果进行处理
handler = new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what == 0x123){
List<Map<String, Object>> data = (List<Map<String, Object>>) msg.obj;
SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,data,
R.layout.sql_item,
new String[]{"Cno","Cname","Cnum"},
new int[]{R.id.cno,R.id.cname,R.id.cnum});
sqlList.setAdapter(adapter);
}
}
};

}

public void testConnection(Connection con) throws java.sql.SQLException {
try {
String sql = "SELECT * FROM Table_1";//查询表名为“Table_1”的所有内容
Statement stmt = con.createStatement();//创建Statement
ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor
listItems = new ArrayList<Map<String,Object>>();
while (rs.next()) {
listItem = new HashMap<String , Object>();
listItem.put("Cno", rs.getString("Cno"));
listItem.put("Cname",rs.getString("Cname"));
listItem.put("Cnum", rs.getString("Cnum"));
listItems.add(listItem);
//                System.out.print(rs.getString("Cno") + " ");
//                System.out.print(rs.getString("Cname") + " ");
//                System.out.println(rs.getString("Cnum"));
}
rs.close();
stmt.close();
//消息从子线程发回主线程
Message message = new Message();
message.what = 0x123;
message.obj = listItems;
handler.sendMessage(message);
} catch (SQLException e) {
System.out.println(e.getMessage().toString());
} finally {
if (con != null)
try {
con.close();  //数据库的关闭
} catch (SQLException e) {
}
}
}
}


最后运行显示的界面:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: