【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

时间: 2024-11-06 14:00:33

【Android笔记】Android与服务器数据库通信的方法的相关文章

Android客户端与本地服务器Socket通信

Android客户端与本地服务器Socket通信 Socket服务器运行结果图?? 一.客户端和服务器端的选择: 客户端是我们手机端,关于服务器端,只要安装了JDK,自然就拥有通讯的功能,我们只需要在Eclipse或者MyEclipse中写好文章中服务器端的代码,运行起来即可,用accept()方法启动服务器端,等待客户端的连接,在未连接的情况下,服务器端处于堵塞的状态. 二.客户端注意事项 andriod客户端添加网络访问权限 <uses-permission android:name="

Android笔记——Android中数据的存储方式(二)

我们在实际开发中,有的时候需要储存或者备份比较复杂的数据.这些数据的特点是,内容多.结构大,比如短信备份等.我们知道SharedPreferences和Files(文本文件)储存这种数据会非常的没有效率.如果学过JavaWeb的朋友,首先可能想到的是数据库.当然了数据库是一个方案,那么是否还有其他的解决方案呢?今天我们在讲下Android笔记——Android中数据的存储方式(一) 提到的除了SharedPreferences和Files(文本文件)以外的其他几种数据储存方式:xml文件.SQL

转载:android笔记--android中的多线程--Handler, Looper, MessageQueue, Message类

什么时候使用多线程: 1. 耗时操作使用多线程, 耗时操作放在UI线程中会导致用户的操作无法得到响应. 2. 阻塞操作使用多线程, 理由同上. 3. 多核CUP的设备使用多线程, 可以有效提高CPU的利用率. 4. 并行操作使用多线程. android中的多线程模型主要涉及的类有:Looper, Handler, MessageQueue, Message等. 一:Looper类: 1 static final ThreadLocal<Looper> sThreadLocal = new Th

Android笔记——Android中数据的存储方式(三)

Android系统集成了一个轻量级的数据库:SQLite,所以Android对数据库的支持很好,每个应用都可以方便的使用它.SQLite作为一个嵌入式的数据库引擎,专门适用于资源有限的设备上适量数据存取,现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,并且它是以手机内存为储存的. 那么,实际开发项目中有大量数据需要读写,并且需要面临大量用户的并发储存的情况呢.就不应该把数据存放在手机等移动设备的SQLite数据库里,移动设备的储存能力和计算能力都不足以

Android笔记----Android的数据存储和IO操作

使用SharedPreferences File存储 SQLite数据库           使用SharedPreferences 1.1 SharedPreferences与Editor简介 应用程序有少量的数据需要保存,而且这些数据的格式很简单,都是普通的字符串.标量类型的值等,比如应用程序的各种配置信息,对于这种数据,Android提供了SharedPreferences. SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此它保存的数据主要是简单类型的key

Android笔记----Android的网络应用

基于TCP协议的网络通信 使用URL访问网络资源 使用HTTP访问网络 使用WebView视图显示网页       基于TCP协议的网络通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket,通信的两端之间形成网络虚拟链路.Java对基于TCP协议的网络通信提供了良好的封装,Java使用Socket对象来代表两端的通信接口,并通过Socket产生IO流来进行网络通信. 1.1 使用ServerSocket创建TCP服务器端 Java中能接收其他通信实体连接请求的类是

android笔记——android studio环境搭建

前段时间开始了学习android的旅程,想要写一个随笔,记录一下学习android的点点滴滴!从现在起每周一和周六周日将在这里持续更新最近学习android的情况. 今天将在这里展示如何利用android studio 搭建android开发环境. 第一步:下载安装JDK8     www.oracle.com 配置系统环境变量 JAVA_HOME   C:\Program Files\Java\jdk1.8.0_66 CLASSPATH    .; C:\Program Files\Java\

Android笔记——Android自定义控件

目录: 1.自定义控件概述 01_什么是自定义控件 Android系统中,继承Android系统自带的View或者ViewGroup控件或者系统自带的控件,并在这基础上增加或者重新组合成我们想要的效果. 02_为什么用自定义控件 系统控件无法满足需求时,需要自定义控件. 系统的控件在不同手机长得不一样,我们希望在不同手机实现相同的效果: 有些手机上的控件长得不好看,希望好看一些. 系统控件的功能有限,需要在基础上增加功能. 03_怎么用自定义控件-三种方式 1.使用系统控件,重新组合,实现自定义

Android笔记----Android传感器开发

Android的传感器开发 Android的常用传感器 传感器应用案例         Android的传感器开发 1.1 开发传感器应用 开发传感器的步骤如下: 调用Context的getSystemService(Context.SENSOR_SERVICE)方法获取SensorManager对象. 调用SensorManager的getDefaultSensor(int type)方法来获取指定类型的传感器. 一般在Activity的onResume()方法中调用SensorManager