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

import net.sourceforge.jtds.jdbc.Driver;

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

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. 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.3、发送SQL语句

当成功连接数据库之后,就可以发送操作数据库的语句并处理结果了。

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

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

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

如:

         String sql = "SELECT * FROM table_test";//查询表名为“table_test”的所有内容
Statement stmt = con.createStatement();//创建Statement
ResultSet rs = stmt.executeQuery(sql);

4、简单demo程序

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

<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输出结果:

结果图:

/*author:conowen
* 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) {
}
}
}
}

利用JDBC连接服务器数据库(Android)相关推荐

  1. Java案例:利用JDBC连接Oracle数据库

    Java案例:利用JDBC连接Oracle数据库 一.准备工作 1.启动SQL Developer,设置java.exe路径 2.在Oracle SQL Developer里,新建数据库连接 连接名: ...

  2. 利用JDBC连接Oracle数据库

    JDBC是Sun公司制定的一个可以 用Java语言连接数据库的技术. 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接) 是一种用于执行SQL ...

  3. jdbc读取mysql数据库_Ecplise 中利用 JDBC 连接 Mysql 数据库读取数据

    准备工作 将压缩包解压得到文件 mysql-connector-java-5.1.41-bin.jar 备用 打开 Mysql 控制台创建数据库及数据表,并插入测试数据.代码如下: CREATE DA ...

  4. android jdbc 连接mysql数据库,android怎么用JDBC方法连接mysql数据库

    2016-11-21 回答 用android程序去直连mysql数据库,觉得这样做不好,出于安全等方面考虑.数据库地址,用户名密码,查询sql什么的都存在程序里,很容易被反编译等方法看到. 建议把表示 ...

  5. MySQL获取数据库连接对象_利用JDBC连接mysql数据库,获取连接对象的通用格式

    String driverName="com.mysql.jdbc.Driver";        //驱动程序名 String userName="root" ...

  6. 在java中使用JDBC连接mysql数据库时的服务器时区值无法识别或表示多个时区的问题解决方案

    项目场景: 在java中使用JDBC连接mysql数据库时,报以下的错:Exception in thread "main" java.sql.SQLException: The ...

  7. JDBC连接MySQL数据库及示例

    JDBC是Sun公司制定的一个可以用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  8. JDBC连接MySQL数据库及演示样例

    JDBC是Sun公司制定的一个能够用Java语言连接数据库的技术. 一.JDBC基础知识         JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...

  9. JAVA-数据库之JDBC连接MySQL数据库

    相关资料: <21天学通Java Web开发> JDBC连接MySQL数据库 1.如果需要通过JDBC来连接MySQL数据库,还必须先在MySQL数据库服务器中创建数据库和表. Conne ...

最新文章

  1. uboot中添加hi35xx的GPIO设置
  2. 如何解决notefirst的闪退问题?
  3. STM32F0xx_EXIT中断配置详细过程
  4. ORACLE1.10 - 一对多
  5. Kubernetes1.6安装指南 (二进制文件方式)
  6. redis之闪电内幕
  7. ios15使用纯代码计算cell的高度
  8. 简述linux常见的安全措施,六个常用的Linux安全基本措施
  9. 【lucene】Lucene 自定义 Parser
  10. 协同OA融入ERP 高端应用助企业升级转型
  11. C/C++回调方式系列之二class接口回调和lambda程式
  12. 数据分析告诉你,历年的诺贝尔奖都被哪些人拿走了?
  13. gs地图开发_中国地图全图高清版大图审图号GS(2016)2923号
  14. 如何把一张图片设置成一个应用程序的图标?
  15. 形容词和指示代词-this、that、thses、those_31
  16. 华为网络设备-Telnet实验
  17. 华为5G专利收费标准曝光!原来卖专利真的很挣钱
  18. OpenHarmony WLAN HDI 源码学习
  19. a += 1、a = a + 1、a++区别
  20. iOS底层原理:weak的实现原理

热门文章

  1. Java工程师是做什么的 岗位职责都有哪些
  2. php获取服务器运行时间差,解决php服务器时间差异
  3. 微软bing每日壁纸API接口
  4. python分段函数编写程序_python分段函数如何编写?
  5. IOS开发百度地图API入门到精通-用点生成路线,导航,气泡响应
  6. 使用UniApp 编写APP
  7. 28:全局变量的使用
  8. 在tensorflow下进行pip操作时需要注意的地方
  9. 直饮净水器什么牌子好,净水器评测
  10. 我的职业是计算机英语,职业英语系列:计算机英语