赞
踩
为了实现这个功能,在网上看了很多资料,可是就是下载源码来运行都还是出错,后来通过看代码总结,终于弄明白了一点,
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) { } } } }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。