java 连接各种数据库及android连接数据库

********************************************************************************************
 * author:conowen@大 钟                                                                                                                          
 * E-mail:[email protected]

 *site:http://www.idealpwr.com/  

 *深圳市动力思维科技发展有限公司                                                                                                         
 * http://blog.csdn.net/conowen                                                                                                              
 * 注:本文为原创,仅作为学习交流使用,转载请标明作者及出处。     

 ********************************************************************************************/


1、Android平台下与服务器数据库通信的方法


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


方法1、直接连接

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

 

方法2、间接连接

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


注意:

        采用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 plaincopy

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


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

[java] view plaincopy

  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.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 plaincopy

  1. //1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar  

  2. 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(http://www.de.postgresql.org)pgjdbc2.jar  

  8. Connection con = null;  

  9. Class.forName( "org.postgresql.Driver" );// 加载驱动程序  

  10. con = DriverManager.getConnection( "jdbc:postgresql://DbComputerNameOrIPAddr/DatabaseName", UserName, Password );  

  11.   

  12.   

  13. //3. Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip  

  14. 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(http://jtds.sourceforge.net)jconn2.jar  

  20. 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(http://jtds.sourceforge.net)  

  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(http://www.microsoft.com)  

  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 plaincopy

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


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

如:

[java] view plaincopy

  1. String sql = "SELECT * FROM table_test";//查询表名为“table_test”的所有内容  

  2. Statement stmt = con.createStatement();//创建Statement  

  3. ResultSet rs = stmt.executeQuery(sql);  


4、简单demo程序


由于要联网,所以要在AndroidManifest.xml里面加入连接网络的权限:

[html] view plaincopy

  1.   


完整的AndroidManifest.xml如下所示:

[html] view plaincopy

  1.   

  2.     package="com.conowen.sqlserver"  

  3.     android:versionCode="1"  

  4.     android:versionName="1.0" >  

  5.   

  6.       

  7.   

  8.     

  9.         android:icon="@drawable/ic_launcher"  

  10.         android:label="@string/app_name" >  

  11.         

  12.             android:label="@string/app_name"  

  13.             android:name=".Android_connect_sqlserverActivity" >  

  14.               

  15.                   

  16.   

  17.                   

  18.               

  19.           

  20.       

  21.   

  22.   



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

结果图:


[java] view plaincopy

  1. /*author:conowen 

  2.  * date:2012.4.7 

  3.  * Android_connect_sqlserverActivity 

  4.  */  

  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.     @Override  

  19.     public void onCreate(Bundle savedInstanceState) {  

  20.         super.onCreate(savedInstanceState);  

  21.         setContentView(R.layout.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 block  

  43.             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();//创建Statement  

  53.             ResultSet rs = stmt.executeQuery(sql);//ResultSet类似Cursor  

  54.   

  55.             while (rs.next()) {//ResultSet最初指向第一行  

  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.     }  



转载于:https://my.oschina.net/tslin/blog/489586

你可能感兴趣的:(java 连接各种数据库及android连接数据库)