Android———利用JDBC链接服务器数据库

一、Android平台下与服务器数据库通讯的方法html


        在Android平台下,链接电脑服务器的MySQL、PostgreSQL、Oracle、Sybase、Microsoft SQLServer等数据库管理系统DBMS(database management system),主要有如下两种方法:java

方法一、直接链接mysql

在Android工程中引入JDBC驱动,直接链接。(本文主要介绍此种方法)android

 

方法二、间接链接sql

在服务器上用PHP+DBMS作服务器端,PHP将DBMS中的数据用json或者xml进行封装。而后再发封装好的数据返回给Android平台。数据库

注意:json

        采用JDBC方法主要问题是安全性不高,并且一旦要访问的数据量过多,容易出问题。另外,Android系统自己有对json或者xml直接解析的api,因此建议采用第二种方法,实用性与安全性都提升了。windows

二、JDBC简介api

       JDBC是Java Data Base Connectivity的缩写,意思为“java数据库链接”,由一组用Java语言编写的类和接口组成,为java层直接操做关系型数据库提供了标准的API。原理很简单,主要是先服务器DBMS发送SQL(结构化查询语言)指令。实现各类数据库的操做。安全

三、如何在Android中使用JDBC与服务器数据库通讯

在Android工程使用JDBC链接数据库的主要步骤以下:

加载JDBC驱动程序------->创建链接--------->发送SQL语句

3.一、加载JDBC驱动程序

     在Android工程中要使用JDBC的话,要导入JDBC的驱动。

 详细过程:

在eclipse选择工程,右键---->Properties---->在左侧选项“Java Build Path”---->切换到“Libraries”---->选择“Add External JARs”---->选中jtds的jar包---->完毕

而后在java代码的开始处 import JDBC的包,这一步根据不一样的驱动,目录可能不同,找到Driver的路径便可。


  1. import net.sourceforge.jtds.jdbc.Driver;  

接下来在java代码中使用如下语句,加载jdbc驱动。

[java]  view plain copy
  1. Class.forName("net.sourceforge.jtds.jdbc.Driver");// 加载驱动程序  

注意:ADT版本和android-sdk_Tools最好为16,我试过版本20总是出现找不到驱动的问题。

降级方法:

离线安装ADT

下载SDK Tools

添加下载任务

http://dl.google.com/android/installer_r16-windows.exe

下载完毕以后,安装到一个任意位置,而后把里面的文件和文件夹copy到以前的sdk tools目录,覆盖新版本的。而后从eclipse里面打开 Android Sdk Manager,而后在第一项的tools里面,再勾选Android SDK Platform-tools就好了,记得不要勾选Android SDK Tool。


3.二、创建链接

      每种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种)

//1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar  
Connection con = null;  
Class.forName( "org.gjt.mm.mysql.Driver" );// 加载驱动程序  
con = DriverManager.getConnection( "jdbc:mysql://DbComputerNameOrIPAddr:3306/DatabaseName", UserName, Password );  
  
  
//2. PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar  
Connection con = null;  
Class.forName( "org.postgresql.Driver" );// 加载驱动程序  
con = DriverManager.getConnection( "jdbc:postgresql://DbComputerNameOrIPAddr/DatabaseName", UserName, Password );  
  
  
//3. Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip  
Connection con = null;  
Class.forName( "oracle.jdbc.driver.OracleDriver" );// 加载驱动程序  
con = DriverManager.getConnection( "jdbc:oracle:thin:@DbComputerNameOrIPAddr:1521:DatabaseName", UserName, Password );  
  
  
//4. Sybase(http://jtds.sourceforge.net)jconn2.jar  
Connection con = null;  
Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" );// 加载驱动程序  
con = DriverManager.getConnection( "jdbc:sybase:Tds:DbComputerNameOrIPAddr:2638/DatabaseName", UserName, Password );  
//(Default-Username/Password: "dba"/"sql")  
  
  
//5. Microsoft SQLServer(http://jtds.sourceforge.net)  
Connection con = null;  
Class.forName( "net.sourceforge.jtds.jdbc.Driver" );// 加载驱动程序  
con = DriverManager.getConnection( "jdbc:jtds:sqlserver://DbComputerNameOrIPAddr:1433/DatabaseName", UserName, Password );  
  
  
//6. Microsoft SQLServer(http://www.microsoft.com)  
Connection con = null;  
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );// 加载驱动程序  
con = DriverManager.getConnection( "jdbc:microsoft:sqlserver://DbComputerNameOrIPAddr:1433;databaseName=master", UserName, Password );

3.三、发送SQL语句

当成功链接数据库以后,就能够发送操做数据库的语句并处理结果了。

在发送SQL语句以前,首先要建立一个Statement对象,Statement主要工做是把 SQL 语句发送给 DBMS 。


  1. Statement stmt = con.createStatement();//建立Statement  

而后发送SQL语句对于SELECT操做,使用的是Statement对象的executeQuery(sql)方法,对于一些建立table和修改table的操做,使用的是Statement对象的executeUpdate(sql)方法。

如:


  1. String sql = "SELECT * FROM table_test";//查询表名为“table_test”的全部内容  
  2. Statement stmt = con.createStatement();//建立Statement  
  3. ResultSet rs = stmt.executeQuery(sql);  

四、简单demo程序

因为要联网,因此要在AndroidManifest.xml里面加入链接网络的权限:

  1. <uses-permission android:name="android.permission.INTERNET" />  

完整的AndroidManifest.xml以下所示:

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    package="com.conowen.sqlserver"  
    android:versionCode="1"  
    android:versionName="1.0" >  
  
    <uses-sdk android:minSdkVersion="9" />  
  
    <application  
        android:icon="@drawable/ic_launcher"  
        android:label="@string/app_name" >  
        <activity  
            android:label="@string/app_name"  
            android:name=".Android_connect_sqlserverActivity" >  
            <intent-filter >  
                <action android:name="android.intent.action.MAIN" />  
  
                <category android:name="android.intent.category.LAUNCHER" />  
            </intent-filter>  
        </activity>  
    </application>  
<uses-permission android:name="android.permission.INTERNET" />  
</manifest>



链接到Microsoft SQL Server,而后后台System.out.println输出结果:

结果图:

* date:2012.4.7 
 * Android_connect_sqlserverActivity 
 */  
package com.conowen.sqlserver;  
  
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.ResultSet;  
import java.sql.Statement;  
  
import android.app.Activity;  
import android.database.SQLException;  
import android.os.Bundle;  
  
public class Android_connect_sqlserverActivity extends Activity {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        String UserName = "test";//用户名  
        String Password = "test";//密码  
        Connection con = null;  
  
        try { // 加载驱动程序  
            Class.forName("net.sourceforge.jtds.jdbc.Driver");  
            con = DriverManager.getConnection(  
                    "jdbc:jtds:sqlserver://192.168.1.2:1433/testDB", 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) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
    }  
  
    public void testConnection(Connection con) throws java.sql.SQLException {  
  
        try {  
  
            String sql = "SELECT * FROM table_test";//查询表名为“table_test”的全部内容  
            Statement stmt = con.createStatement();//建立Statement  
            ResultSet rs = stmt.executeQuery(sql);//ResultSet相似Cursor  
  
            while (rs.next()) {//<code>ResultSet</code>最初指向第一行  
                System.out.println(rs.getString("test_id"));//输出第n行,列名为“test_id”的值  
                System.out.println(rs.getString("test_name"));  
                  
            }  
  
            rs.close();  
            stmt.close();  
        } catch (SQLException e) {  
            System.out.println(e.getMessage().toString());  
        } finally {  
            if (con != null)  
                try {  
                    con.close();  
                } catch (SQLException e) {  
                }  
        }  
    }  
}
相关文章
相关标签/搜索