Android的JDBC开发与普通java程序的JDBC开发一样,在编码时,程序利用JDBC的API(java.sql.*)来和数据库交互,针对不同的DBMS,只需加载对应的driver和使用不同的链接字符串即可。
开发时针对不同的DBMS数据库需要有对应的DBMS的驱动jar包才行,jar包在DBMS的官网可下载,下载后需要注意附带的说明文档,里面详细介绍了使用方法和注意事项(主要看驱动字符串和连接字符串的配置和适合的jdk版本)。实际的开发过程中,用到的jar包不一定最新的才行,有时最新的反而会报错,mysql的驱动采用mysql-connector-java-3.0.17-ga-bin.jar时才行,其它版本编译时会出现警告,最新版本引入包后会直接报错。Sql server的jar包使用最新的没有问题,旧版本的包反而会编译时报出警告。Sql Anywhere 10提供有JODBC.JAR但是只能是java通过odbc的方式连接,不适合android,适合android的是jconn3.jar。
总之一句话,直连开发首先是找到DBMS的jdbc驱动jar包(合适的,不一定是最新的,靠摸索排查),并在项目引入驱动jar包,然后就可以开始jdbc编码,编码和普通的java jdbc编码代码一致,可以参考java.sql.*下的相关API,需要注意的是不同的DBMS,驱动和连接字符串不同,其它均同,下表是经过测试可以用的jar包和字符串:
DBMS | Jar包 | 驱动字符串 | 连接字符串 |
Mysql | mysql-connector-java-3.0.17-ga-bin.jar | com.mysql.jdbc.Driver | jdbc:mysql://ip:port/dbname?user=uname&password=pwd&useUnicode=true&characterEncoding=UTF-8 |
Ms sql server | Sqljdbc4.jar | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://ip:port;databaseName=AdventureWorks;user=MyUserName;password=*****; |
Sybase sql anywhere | Jconn3.jar | com.sybase.jdbc3.jdbc.SybDriver | jdbc:sybase:Tds:ip:port |
sybase | | | |
Db2 | | | |
Oracle | | | |
Informix | | | |
Sybase SQL Anywhere建立连接示例代码:
String driver = "com.sybase.jdbc3.jdbc.SybDriver";
String constring = "jdbc:sybase:Tds:10.0.2.2:2638";
//-------------connecting test start--------------
try {
Class.forName(driver);
java.sql.Connection conn= (java.sql.Connection) DriverManager.getConnection(constring,"dba","sql"); ((EditText)(Android_jdbcActivity.this.findViewById(R.id.edt_result))).setText("连接成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
((EditText)(Android_jdbcActivity.this.findViewById(R.id.edt_result))).setText(e.getMessage());
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
((EditText)(Android_jdbcActivity.this.findViewById(R.id.edt_result))).setText(e.getMessage());
}
//--------------connecting test end------------
注意:对于不同的dbms,driver和constring的值不同,见上表
建立连接对象示例代码:
String driver = "",constring="";
try {
Class.forName(driver);
java.sql.Connection mConnection= (java.sql.Connection) DriverManager.getConnection(constring);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
连接池实现:
23.3.2无参Insert、Delete、Update实现
Insert、Delete和Update的实现代码一致,仅SQL语句不一样:
public int EXECUTE_IMMEDIATE(String SQLStatement,Transaction transaction){
java.sql.Connection conn = transaction.getConnection();
if(conn!=null) {
try {
Statement cmd = conn.createStatement();
int result = cmd.executeUpdate(SQLStatement);
if(!conn.getAutoCommit()) {
conn.commit();
conn.setAutoCommit(false);
}
return result;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("demo", "执行错误"+e.getMessage());
return -1;
}
}
else {
Log.d("demo", "连接对象为null");
return 0;
}
}
http://blog.sina.com.cn/s/blog_4ed320a901017ql7.html