近来一个小项目,用到Android直接连接SQL server数据库,颇废了一些周折,这里简单的总结一下
首先下载JTDS(http://sourceforge.net/projects/jtds/files/jtds/),这里有JTDS的各种版本,起初下的是jtds-1.3.1,但在使用中总出现
ClassNotFound:net.sourceforge.jtds.jdbc.Driver 错误,后来下载了1.2.7版本,解决了这个问题。
然后解压下载后的文件,将里面的jtds-1.2.7.jar导入到工程:
工程--->属性--->JAVA Build Path--->Libraries--->add external jars;
然后,创建好数据库后就可以在Android程序中连接了。下面是连接代码:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; public class MainActivity extends Activity { private String UserName = "sa"; private String Password = "sa"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ConnectTask dt = new ConnectTask(); dt.execute(); } class ConnectTask extends AsyncTask<Integer, Integer, String> { Connection con = null; @Override protected void onPreExecute() { //第一个执行方法 super.onPreExecute(); } @Override protected String doInBackground(Integer... params) { //建立于数据库的连接 try { Class.forName( "net.sourceforge.jtds.jdbc.Driver"); con = DriverManager.getConnection( "jdbc:jtds:sqlserver://10.0.2.2:1433/AndroidSample", UserName, Password); //10.0.2.2是使用模拟器是用的本机(pc)的IP,androidSample是我的数据库名称 testConnection(con);//测试数据库连接 } catch (ClassNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); Log.e("Class.forName::ClassNotFoundException", e1.getMessage()); }catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "执行完毕"; } @Override protected void onPostExecute(String result) { super.onPostExecute(result); } public void testConnection(Connection con) throws java.sql.SQLException { try { String sql = "SELECT * FROM Seed.Person";//查询表名为“Seed.Person”的所有内容 Statement stmt = con.createStatement();//创建Statement ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor while (rs.next()) {//<CODE>ResultSet</CODE>最初指向第一行 Log.e("&&&&&", rs.getString("NameChs")); Log.e("&&&&&", rs.getString("OperateUserName")); } rs.close(); stmt.close(); } catch (SQLException e) { System.out.println(e.getMessage().toString()); } finally { if (con != null) try { con.close(); } catch (SQLException e) { } } } } }
主要遇到了两个问题:
1、ClassNotFound错误:如果jtds库都导入了,还有这个问题,可能是jtds版本的问题。我最初用的jtds-1,3,1错误,后来用的jtds-1.2.7后解决了;
2、与数据库的连接涉及网络操作,不能直接写在OnCreate函数中,代码中单独定义了一个类,进行数据库的操作。