javaadt连接mysql,Android学习笔记(21)————利用JDBC连接服务器数据库

本文介绍了在Android平台上使用JDBC直接连接到MySQL、PostgreSQL、Oracle、Sybase、MicrosoftSQLServer等数据库的方法,特别是详细讲解了通过JDBC驱动连接MicrosoftSQLServer的步骤,包括加载驱动、建立连接和发送SQL语句。尽管直接连接存在安全性和效率问题,但文中提供了详细的示例代码,便于开发者参考实践。
摘要由CSDN通过智能技术生成

jdbcandroid服务器microsoftsqlserverpostgresql

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包---->完毕

a4c26d1e5885305701be709a3d33442f.png

然后在java代码的开始处 import

JDBC的包,这一步根据不同的驱动,目录可能不一样,找到Driver的路径即可。

import net.sourceforge.jtds.jdbc.Driver;

import net.sourceforge.jtds.jdbc.Driver;

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

Class.forName("net.sourceforge.jtds.jdbc.Driver");//

加载驱动程序

Class.forName("net.sourceforge.jtds.jdbc.Driver");// 加载驱动程序

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

降级方法:

离线安装ADT

下载SDK Tools

添加下载任务

下载完毕之后,安装到一个任意位置,然后把里面的文件和文件夹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 );

//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

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

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

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

ResultSet rs = stmt.executeQuery(sql);

4、简单demo程序

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

android:name="android.permission.INTERNET"

/>

完整的AndroidManifest.xml如下所示:

version="1.0"

encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

package="com.conowen.sqlserver"

android:versionCode="1"

android:versionName="1.0"

>

android:minSdkVersion="9"

/>

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

>

android:label="@string/app_name"

android:name=".Android_connect_sqlserverActivity"

>

android:name="android.intent.action.MAIN"

/>

android:name="android.intent.category.LAUNCHER"

/>

android:name="android.permission.INTERNET"

/>

package="com.conowen.sqlserver"

android:versionCode="1"

android:versionName="1.0" >

android:icon="@drawable/ic_launcher"

android:label="@string/app_name" >

android:label="@string/app_name"

android:name=".Android_connect_sqlserverActivity" >

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

结果图:

a4c26d1e5885305701be709a3d33442f.png

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

{

@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())

{//ResultSet最初指向第一行

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

}

}

}

}

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 {

@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()) {//ResultSet最初指向第一行

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

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值