Android实现与SQL连接

本文详细介绍了如何在Android应用中使用JDBC连接到SQL Server数据库,包括数据库配置、线程安全的代码编写,以及如何通过ListView显示查询结果。重点在于处理耗时操作和数据同步到UI的正确方式。
摘要由CSDN通过智能技术生成

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

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) {  
            }  
        }
    }  
}  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥一号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值