java mysql jtds,AndroidStudio通过JTDS远程访问SQLServer数据库

Android Studio通过JTDS远程连接SQL Server数据库

一、下载SQL驱动JTDS

下载 jtds-1.3.1-dist.zip

2 在Android Studio中导入Library项目

在开发环境菜单

File -- New -- Import Project...

从中找到下载的加入

3 把Library项目添加到源项目中

这部不做,调用以下语句 Class.forName("net.sourceforge.jtds.jdbc.Driver");

会出现

ClassNotFound:net.sourceforge.jtds.jdbc.Driver 错误

在开发环境,从菜单 File -- Project

Structure,点击进入

在窗口左侧选择自己的项目后,点击右侧的Dependencies。

点击右侧的“+”添加按钮,在下拉菜单中找到Module

Dependency,点击打开项目选择窗口。

选择前面步骤中导入的Library项目后,点击OK按钮导入到自己项目中

a4c26d1e5885305701be709a3d33442f.png

二、开发环境

windows 7 X64

android 5.1

android studio 3.1.2

Microsoft SQL Server 2008 R2

1 SQL ERVER 允许远程访问

开始--SQL2008--配置工具--SQL Server配置管理器--SQL

Server网络配置--SQLexpress的协议--TCP/IP

状态 要改为 已启用

a4c26d1e5885305701be709a3d33442f.png

2 建立数据库和表

数据库 BOOK

建立表 管理员,字段 编号,姓名,密码,内容如下:

编号  姓名 密码

1001  穆木 1212

1002  久九 123

1003  巴芭 111

1004  admin 111

a4c26d1e5885305701be709a3d33442f.png

三、用JTDS连接SQLServer数据库相关代码

1 Android 访问sql server的类

package com.example.wmx.myapplication6;

//package com.example.androidsql;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class DBUtil

{

private static

Connection getSQLConnection(String ip, String user, String pwd,

String db)

{

Connection con = null;

try

{

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

con =

DriverManager.getConnection("jdbc:jtds:sqlserver://" + ip +

":1433/" + db, user, pwd);

} catch (ClassNotFoundException e)

{

e.printStackTrace();

} catch (SQLException e)

{

e.printStackTrace();

}

return con;

}

public static String

QuerySQL()

{

String result = "";

try

{

Connection

conn = getSQLConnection("10.3.1.37", "sa", "123", "book");

String sql

= "select top 10 * from 管理员";

Statement

stmt = conn.createStatement();//

ResultSet

rs = stmt.executeQuery(sql);

while

(rs.next())

{

String s1 =

rs.getString("姓名");

String s2 =

rs.getString("密码");

result += s1 + "

-  " + s2 + "\n";

System.out.println(s1 + "

-  " + s2);

}

rs.close();

stmt.close();

conn.close();

} catch (SQLException e)

{

e.printStackTrace();

result +=

"异常!" + e.getMessage();

}

return result;

}

public static void

main(String[] args)

{

QuerySQL();

}

}

2 MainActivity.java

package com.example.wmx.myapplication6;

//package com.example.androidsql;

import android.os.Bundle;

import android.os.Handler;

import android.os.Message;

import android.app.Activity;

import android.view.Menu;

import android.view.View;

import android.widget.TextView;

public class MainActivity extends Activity

{

private View

btnTest;

private View

btnClean;

private TextView

tvTestResult;

@Override

protected void

onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btnTest=findViewById(R.id.btnTestSql);

btnClean=findViewById(R.id.btnClean);

tvTestResult =

(TextView)findViewById(R.id.tvTestResult);

btnTest.setOnClickListener(getClickEvent());

btnClean.setOnClickListener(getClickEvent());

}

private

View.OnClickListener getClickEvent(){

return new View.OnClickListener()

{

@Override

public

void onClick(View v)

{

tvTestResult.setText("...");

if(v==btnTest){

test();

}

}

};

}

private void

test()

{

Runnable run = new Runnable()

{

@Override

public void

run()

{

//测试数据库的语句,在子线程操作,在主线程好像不成功。

String ret =

DBUtil.QuerySQL();

Message msg = new

Message();

msg.what=1001;

Bundle data = new

Bundle();

data.putString("result",

ret);

msg.setData(data);

mHandler.sendMessage(msg);

}

};

new Thread(run).start();

}

Handler mHandler = new

Handler(){

public void handleMessage(android.os.Message

msg) {

switch

(msg.what)

{

case 1001:

String str =

msg.getData().getString("result");

tvTestResult.setText(str);

break;

default:

break;

}

};

};

}

以下 XML文件中都有大量的 左尖括号

需要和它后面的内容之间空一格才行,这样做太麻烦了,为了简单拍成图片

3 activity_main.xml

a4c26d1e5885305701be709a3d33442f.png

4 content_main.xml

a4c26d1e5885305701be709a3d33442f.png

5

strings.xml

a4c26d1e5885305701be709a3d33442f.png

6

AndroidManifest.xml

a4c26d1e5885305701be709a3d33442f.png

注意:有关网络访问需要如下的许可,

< uses-permission

android:name="android.permission.WRITE_EXTERNAL_STORAGE"

/>

< uses-permission

android:name="android.permission.INTERNET" />

< uses-permission

android:name="android.permission.ACCESS_NETWORK_STATE" />

执行程序

1  从模拟上

a4c26d1e5885305701be709a3d33442f.png

2  从真实的手机上

a4c26d1e5885305701be709a3d33442f.png

五  IP地址的获得

SQL SERVER 数据库位于PC机上,

手机和PC机位于同一个局域网内

1 获得 PC机IP地址10.3.1.37

从命令行执行 ipconfig 获得Windows IP 配置如下:

无线局域网适配器 无线网络连接:

连接特定的 DNS 后缀 . . . . . .

. :

本地链接 IPv6 地址. . . . . . .

. : fe80::59cb:ec67:d8a1:77d3

IPv4 地址 . . . . . . . . .

. . . : 192.168.123.1

子网掩码  .

. . . . . . . . . . . : 255.255.255.0

默认网关. . . . . . . . . . .

. . :

以太网适配器 本地连接:

连接特定的 DNS 后缀 . . . . . .

. :

本地链接 IPv6 地址. . . . . . .

. : fe80::50fb:a1b7:500e:82ef

IPv4 地址 . . . . . . . . . . . . :

10.3.1.37

子网掩码  .

. . . . . . . . . . . : 255.255.0.0

默认网关. . . . . . . . . . .

. . : 10.3.0.1

2 获得手机的IP地址 10.0.2.10

这一步不需要,只是将来需要静态设置时需要

从手机上, 设置--关于手机-- 状态信息

a4c26d1e5885305701be709a3d33442f.png

以下几个文件夹的内容可能在工作中出现问题,需要删除重新建立

C:\Users\wmx\AppData\Local\Android\Sdk

C:\Users\wmx\.android\avd\Nexus_5X_API_22.avd

C:\Users\wmx\.gradle\wrapper\dists\gradle-4.4-all\9br9xq1tocpiv8o6njlyu5op1

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值