采用JDBC方法主要问题是安全性不高,而且一旦要访问的数据量过多,容易出问题。
另外,Android系统本身有对json或者xml直接解析的api,所以建议采用第二种方法,实用性与安全性都提高了。
2、JDBC简介JDBC是Java Data Base Connectivity的缩写,意思为“java数据库连接”,由一组用Java语言编写的类和接口组成,为java层直接操作关系型数据库提供了标准的API。
原理很简单,主要是先服务器DBMS发送SQL(结构化查询语言)指令。
实现各种数据库的操作。
3、如何在Android中使用JDBC与服务器数据库通信在Android工程使用JDBC连接数据库的主要步骤如下:加载JDBC驱动程序------->建立连接--------->发送SQL语句3.1、加载JDBC驱动程序在Android工程中要使用JDBC的话,要导入JDBC的驱动。
详细过程:在eclipse选择工程,右键---->Properties---->在左侧选项“Java Build Path”---->切换到“Libraries”---->选择“Add External JARs”---->选中jtds的jar包---->完毕然后在java代码的开始处import JDBC的包,这一步根据不同的驱动,目录可能不一样,找到Driver的路径即可。
[java]view plaincopy1.import net.sourceforge.jtds.jdbc.Driver;接下来在java代码中使用以下语句,加载jdbc驱动。
[java]view plaincopy1.Class.forName("net.sourceforge.jtds.jdbc.Driver");// 加载驱动程序注意:ADT版本和android-sdk_Tools最好为16,我试过版本20老是出现找不到驱动的问题。
降级方法:离线安装ADT下载SDK Tools添加下载任务/android/installer_r16-windows.exe下载完毕之后,安装到一个任意位置,然后把里面的文件和文件夹copy到之前的sdk tools 目录,覆盖新版本的。
然后从eclipse里面打开Android Sdk Manager,然后在第一项的tools 里面,再勾选Android SDK Platform-tools就行了,记得不要勾选Android SDK Tool。
3.2、建立连接每种DBMS的JDBC驱动是不一样的,同一个DBMS也会有几种JDBC驱动,如Microsoft SQL Server的JDBC驱动主要有两种,Microsoft 官方提供的JDBC驱动和民间开源的JDBC驱动(JTDS),推荐JTDS,bug少,而且是完全开放源代码的。
目前JTDS只能支持Microsoft SQL Server和Sybase。
由于DBMS与JDBC驱动的不同,所以每种JDBC连接数据库的字符串书写方法也是不一样的。
下面给出几种常见的JDBC与DBMS建立连接的字符串书写格式,(本博文是JTDS 连接msserver ,所以是第5种)[java]view plaincopy1.//1. MySQL()mm.mysql-2.0.2-bin.jar2.Connection con = null;3.Class.forName( "org.gjt.mm.mysql.Driver" );// 加载驱动程序4.con = DriverManager.getConnection( "jdbc:mysql://DbComputerNameOrIPAddr:3306/DatabaseName", UserName, Password );5.6.7.//2. PostgreSQL()pgjdbc2.jar8.Connection con = null;9.Class.forName( "org.postgresql.Driver" );// 加载驱动程序10.con = DriverManager.getConnection( "jdbc:postgresql://DbComputerNameOrIPAddr/DatabaseName", UserName, Password );11.12.13.//3. Oracle(/ip/deploy/database/oracle9i/)classes12.zip14.Connection con = null;15.Class.forName( "oracle.jdbc.driver.OracleDriver" );// 加载驱动程序16.con = DriverManager.getConnection( "jdbc:oracle:thin:@DbComputerNameOrIPAddr:1521:DatabaseName", UserName, Password );17.18.19.//4. Sybase()jconn2.jar20.Connection con = null;21.Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" );// 加载驱动程序22.con = DriverManager.getConnection( "jdbc:sybase:Tds:DbComputerNameOrIPAddr:2638/DatabaseName", UserName, Password );23.//(Default-Username/Password: "dba"/"sql")24.25.26.//5. Microsoft SQLServer()27.Connection con = null;28.Class.forName( "net.sourceforge.jtds.jdbc.Driver" );// 加载驱动程序29.con = DriverManager.getConnection( "jdbc:jtds:sqlserver://DbComputerNameOrIPAddr:1433/DatabaseName", UserName, Password );30.31.32.//6. Microsoft SQLServer()33.Connection con = null;34.Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );// 加载驱动程序35.con = DriverManager.getConnection( "jdbc:microsoft:sqlserver://DbComputerNameOrIPAddr:1433;databaseName=master", UserName, Password );3.3、发送SQL语句当成功连接数据库之后,就可以发送操作数据库的语句并处理结果了。
在发送SQL语句之前,首先要创建一个Statement对象,Statement主要工作是把SQL 语句发送给DBMS 。
[java]view plaincopy1.Statement stmt = con.createStatement();//创建Statement然后发送SQL语句。
对于SELECT操作,使用的是Statement对象的executeQuery(sql)方法,对于一些创建table和修改table的操作,使用的是Statement对象的executeUpdate(sql)方法。
如:[java]view plaincopy1.String sql = "SELECT * FROM table_test";//查询表名为“table_test”的所有内容2.Statement stmt = con.createStatement();//创建Statement3.ResultSet rs = stmt.executeQuery(sql);4、简单demo程序由于要联网,所以要在AndroidManifest.xml里面加入连接网络的权限:[html]view plaincopy1.<uses-permission android:name="android.permission.INTERNET"/>完整的AndroidManifest.xml如下所示:[html]view plaincopy1.<?xml version="1.0"encoding="utf-8"?>2.<manifest xmlns:android="/apk/res/android"3.package="com.conowen.sqlserver"4.android:versionCode="1"5.android:versionName="1.0">6.7.<uses-sdk android:minSdkVersion="9"/>8.9.<application10.android:icon="@drawable/ic_launcher"11.android:label="@string/app_name">12.<activity13.android:label="@string/app_name"14.android:name=".Android_connect_sqlserverActivity">15.<intent-filter>16.<action android:name="android.intent.action.MAIN"/>17.18.<category android:name="UNCHER"/>19.</intent-filter>20.</activity>21.</application>22.<uses-permission android:name="android.permission.INTERNET"/>23.</manifest>连接到Microsoft SQL Server,然后后台System.out.println输出结果:结果图:[java]view plaincopy1./*author:conowen2. * date:2012.4.73. * Android_connect_sqlserverActivity4. */5.package com.conowen.sqlserver;6.7.import java.sql.Connection;8.import java.sql.DriverManager;9.import java.sql.ResultSet;10.import java.sql.Statement;11.12.import android.app.Activity;13.import android.database.SQLException;14.import android.os.Bundle;15.16.public class Android_connect_sqlserverActivity extends Activity {17./** Called when the activity is first created. */18.@Override19.public void onCreate(Bundle savedInstanceState) {20.super.onCreate(savedInstanceState);21. setContentView(yout.main);22. String UserName = "test";//用户名23. String Password = "test";//密码24. Connection con = null;25.26.try { // 加载驱动程序27. Class.forName("net.sourceforge.jtds.jdbc.Driver");28. con = DriverManager.getConnection(29."jdbc:jtds:sqlserver://192.168.1.2:1433/testDB", UserName,30. Password);31. } catch (ClassNotFoundException e) {32. System.out.println("加载驱动程序出错");33. } catch (SQLException e) {34. System.out.println(e.getMessage());35. } catch (Exception e) {36. System.out.println(e.getMessage());37.38. }39.try {40. testConnection(con);//测试数据库连接41. } catch (java.sql.SQLException e) {42.// TODO Auto-generated catch block43. e.printStackTrace();44. }45. }46.47.public void testConnection(Connection con) throws java.sql.SQLException{48.49.try {50.51. String sql = "SELECT * FROM table_test";//查询表名为“table_test”的所有内容52. Statement stmt = con.createStatement();//创建Statement53. ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor54.55.while (rs.next()) {//<code>ResultSet</code>最初指向第一行56. System.out.println(rs.getString("test_id"));//输出第n行,列名为“test_id”的值57. System.out.println(rs.getString("test_name"));58.59. }60.61. rs.close();62. stmt.close();63. } catch (SQLException e) {64. System.out.println(e.getMessage().toString());65. } finally {66.if (con != null)67.try {68. con.close();69. } catch (SQLException e) {70. }71. }72. }。