zoukankan      html  css  js  c++  java
  • 【Android笔记】Android与服务器数据库通信的方法

    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的路径即可。

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

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

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

     

     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

    3.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);

    4、简单demo程序

     

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

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

    完整的AndroidManifest.xml如下所示:

     1 <?xml version="1.0" encoding="utf-8"?>  
     2 <manifest xmlns:android="http://schemas.android.com/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     <application  
    10         android:icon="@drawable/ic_launcher"  
    11         android:label="@string/app_name" >  
    12         <activity  
    13             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="android.intent.category.LAUNCHER" />  
    19             </intent-filter>  
    20         </activity>  
    21     </application>  
    22 <uses-permission android:name="android.permission.INTERNET" />  
    23 </manifest>  

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

    结果图:

     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()) {//<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     }  
    73 }  

    参考原文:http://blog.csdn.net/yyh1988923/article/details/8657184

  • 相关阅读:
    SuperSocket 服务管理器 (ServerManager)
    在Linux/Unix上运行SuperSocket
    SuperSocket
    添加SuperSocket的启动代码到 Windows Azure 的 WorkRole 项目
    Struts2中文件的上传与下载
    解决eclipse中找不到jar包问题
    SSH框架的搭建与配置文件的书写格式
    jxl导出Excel
    CentOS下yum安装mysql,jdk以及tomcat
    如何控制WAP网站上输入框的默认键盘类型
  • 原文地址:https://www.cnblogs.com/tanghuian/p/4053688.html
Copyright © 2011-2022 走看看