Android sqldroid JDBC装载sql驱动程序序问题,怎么解决

博客访问: 156875
博文数量: 100
博客积分: 1630
博客等级: 上尉
技术积分: 972
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Android平台
前一段时间要做一个用Android平板连接SQL的项目,在这种情况下,我就想到了两种方案:
1)Android Client &+ Webservice + SQL的方式来连接
2)Android Client + SQL
本人一直都在用第一种方案做的,都很坚持第一种方案,但由于客户的环境加上其他因素,不能用第一种方案来做,所以就用了第二种;
由于SQL官方的驱动不能直接用于Android上运行,所以就在网上搜了一些资料,看到了JTDS驱动,这个是开源的,网址是:
现在最新的版本是1.3.0,但这个版本不能在Android上用,因为1.3.0是支持Java7的,Android不支持Java7,所以我就选择了1.2.7的版本;&
Windows7 x64 专业版&
Android4.0.2
Eclipse4.2+ADT 21+SDK 21
以下是数据库连接和测试类DataBaseUtil.java,注意修改连接字符串
package&com.example.&&
import&java.sql.C&&
import&java.sql.DriverM&&
import&java.sql.ResultS&&
import&java.sql.SQLE&&
import&java.sql.S&&
public&class&DataBaseUtil&&
&&&&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&+&";charset=utf8",&user,&pwd);&&
&&&&&&&&}&catch&(ClassNotFoundException&e)&&
&&&&&&&&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&catch&(SQLException&e)&&
&&&&&&&&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&public&static&String&testSQL()&&
&&&&&&&&String&result&=&"字段1&&-&&字段2\n";&&
&&&&&&&&try&&
&&&&&&&&{&&
&&&&&&&&&&&&Connection&conn&=&getSQLConnection("xx.xx.xx.xx",&"sa",&"123",&"DataBaseName");&&
&&&&&&&&&&&&String&sql&=&"select&top&10&*&from&UserTable";&&
&&&&&&&&&&&&Statement&stmt&=&conn.createStatement();&&
&&&&&&&&&&&&ResultSet&rs&=&stmt.executeQuery(sql);&&
&&&&&&&&&&&&while&(rs.next())&&
&&&&&&&&&&&&{&&
&&&&&&&&&&&&&&&&String&s1&=&rs.getString("Name1");&&
&&&&&&&&&&&&&&&&String&s2&=&rs.getString("Name2");&&
&&&&&&&&&&&&&&&&result&+=&s1&+&"&&-&&"&+&s2&+&"\n";&&
&&&&&&&&&&&&&&&&System.out.println(s1&+&"&&-&&"&+&s2);&&
&&&&&&&&&&&&}&&
&&&&&&&&&&&&rs.close();&&
&&&&&&&&&&&&stmt.close();&&
&&&&&&&&&&&&conn.close();&&
&&&&&&&&}&catch&(SQLException&e)&&
&&&&&&&&{&&
&&&&&&&&&&&&e.printStackTrace();&&
&&&&&&&&&&&&result&+=&"查询数据异常!"&+&e.getMessage();&&
&&&&&&&&}&&
&&&&&&&&return&&&
&&&&public&static&void&main(String[]&args)&&
&&&&&&&&testSQL();&&
MainActivity.java
package&com.example.&&
import&android.os.B&&
import&android.os.H&&
import&android.os.M&&
import&android.app.A&&
import&android.view.M&&
import&android.view.V&&
import&android.widget.TextV&&
public&class&MainActivity&extends&Activity&&
&&&&private&View&btnT&&
&&&&private&View&btnC&&
&&&&private&TextView&tvTestR&&
&&&&@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());&&
&&&&@Override&&
&&&&public&boolean&onCreateOptionsMenu(Menu&menu)&&
&&&&&&&&&&
&&&&&&&&getMenuInflater().inflate(R.menu.main,&menu);&&
&&&&&&&&return&true;&&
&&&&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&=&DataBaseUtil.testSQL();&&
&&&&&&&&&&&&&&&&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;&&
&&&&&&&&&&&&}&&
&&&&&&&&};&&
activity_main.xml
&xmlns:android="/apk/res/android"&&
&&&&xmlns:tools="/tools"&&
&&&&android:layout_width="match_parent"&&
&&&&android:layout_height="match_parent"&&
&&&&android:paddingBottom="@dimen/activity_vertical_margin"&&
&&&&android:paddingLeft="@dimen/activity_horizontal_margin"&&
&&&&android:paddingRight="@dimen/activity_horizontal_margin"&&
&&&&android:paddingTop="@dimen/activity_vertical_margin"&&
&&&&tools:context=".MainActivity"&&&
&&&&&&&&android:id="@+id/btnTestSql"&&
&&&&&&&&android:layout_width="wrap_content"&&&
&&&&&&&&android:layout_height="wrap_content"&&
&&&&&&&&android:text="@string/testSQL"&&
&&&&&&&&android:id="@+id/btnClean"&&
&&&&&&&&android:layout_width="wrap_content"&&&
&&&&&&&&android:layout_height="wrap_content"&&
&&&&&&&&android:layout_alignParentRight="true"&&
&&&&&&&&android:text="@string/clean"&&
&&&&&&&&android:id="@+id/tvTestResult"&&
&&&&&&&&android:layout_width="wrap_content"&&
&&&&&&&&android:layout_height="wrap_content"&&
&&&&&&&&android:layout_below="@id/btnTestSql"&&
&&&&&&&&android:text="@string/hello_world"&&&
strings.xml
&version="1.0"&encoding="utf-8"&&
&&&&&name="app_name"AndroidSQL&&
&&&&&name="action_settings"Settings&&
&&&&&name="hello_world"Hello&world!&&
&&&&&name="testSQL"测试SQL&&
&&&&&name="clean"清除数据&&
阅读(8062) | 评论(1) | 转发(0) |
下一篇:没有了
相关热门文章
给主人留下些什么吧!~~
我是个刚接触android开发的新手,刚一上手就遇到连接SQL的问题了,我想请教一下:1、在MainActivity.java中,这一行:getMenuInflater().inflate(R.menu.main,&menu)报错,金错误提示是:menu&cannot&be&resolved&or&is&not&a&field,是不是缺一个main的布局文件?2、JTDS驱动是如何加载的??还请详细说明一下
请登录后评论。本帖子已过去太久远了,不再提供回复功能。&15112人阅读&&&
Database(1)&
开篇之前,提醒一句,记得关闭电脑防火墙,我的手机一直连不上电脑,排查了两天,结果竟然是电脑防火墙的原因,那股不爽之情,油然而生.切记!!!
一.创建一个和若干表,并导入相关信息.这里以我之前使用的一个图书系统的数据库为例子.
首先假设已经安装并配置好Mysql.(建议大家安装WAMP,也就是安装完这个,就相当于安装了Mysql,PHPAdimin,Apache这三个软件,以后采用php,apache搭建动态网站服务器的方式访问数据库时候需要用到这几个软件,以后会另外写一篇文章,在此不多说).
(一)进入Mysql Command Line Client客户端,创建一个名为&LibrarryDB&的数据库.
create database LibraryDB;
(二)赋予某某一个用户访问权限,以后通过这一个用户访问LibraryDB数据库.这个用户名为&user&,登陆密码是&1234&. localhost表示可以通过本地主机访问数据库LibraryDB.而表示允许远程访问,即可以通过其他电脑或手机访问到你这个数据库.赋予用户权限后,flush
相当于保存刷新.如果没有这一句,下次登陆会出现密码报错的情况.
grant all privileges on LibraryDB.*& to&'user'& IDENTIFIED &by '1234';
grant all privileges on LibraryDB.*& to&'user'&IDENTIFIED &by '1234';
(三)往数据库里面创建表,并插入相关的数据.
进入Mysql客户端,使用use LibraryDB进入LibraryDB数据库,插入下面的数据.可以一条一条地插入,但如果数据量太庞大的话,这样的方式就显昝太麻烦,这个时候,可以考虑将这些数据放在某一个txt文件里面,然后将txt格式改为sql脚本文件.如我的命名为:db.sql.
然后通过Mysql命令,将这份db.sql脚本文件导入到你的数据库当中.假设我的db.sql放在D盘.如图:
二. 导入外部JAR包.
需要说明的是,虽然提供对JDBC的支持,但是,JAVA JDK里面并不包含JDBC API,因此,若想使用JDBC连接操作数据库,需要我们从外部导入一个JDBC的JAR包.这个JAR包,可以到&(点击进入)去下载,如我下载的是:mysql-connector-java-5.0.8.tar.gz.将下载下来的文件解压,放到电脑某个盘上.如:d:\Mysql.新建一个JAVA或Android工程.
选择工程--&右键 Build Path--&Configur Build Path--&选择Java Build Path--&点击 Add External JARS--&选择下载的的jar包---&打开,确定
到此,JDBC的jar包就导入到你的工程里面去了.
&三. JDBC连接并操作数据库
Java语言提供了对采用JDBC访问并操作数据库的支持.由于android是采用Java语言编写的,自然而然地,也就继承了这一功能的支持.
JDBC API 工作的4个重要的环节:
1.&&&&&& DriverManager类:依据数据库的不同管理jdbc驱动
2.&&&&&& Connection接口:负责连接数据库并担任传送数据的任务。
3.&&&&&& Statement 接口:友Connection产生,负责执行sql语句。
4.&&&&&& ResultSet接口:负责保存Statement执行后所产生的查询结果。
不管是java,还是android,其通过JDBC访问数据库的基本步骤都是一样的.
(一)加载JDBC驱动程序,并连接数据库.JDBC对于不同的数据库的连接方法略有不同.具体如下所示.//连接URL为&& jdbc:mysql//服务器地址/数据库名& ,后面的2个参数分别是登陆用户名和密码
&&&&& &1、DB2
  Class.forName(&Com.ibm.db2.jdbc.net.DB2Driver&);
  String url=&jdbc:db2://dburl:port/DBname&
  cn = DriverManager.getConnection( url, userName, password );
  2、Microsoft SQLServer(microsoft)
  Class.forName( &com.microsoft.jdbc.sqlserver.SQLServerDriver& );
  cn = DriverManager.getConnection( &jdbc:microsoft:sqlserver://DBServerIP:1433;databaseName=master&, userName, password );
  3、Sybase(jconn2.jar)
  Class.forName( &com.sybase.jdbc2.jdbc.SybDriver& );
  cn = DriverManager.getConnection( &jdbc:sybase:Tds:DBServerIP:2638&, userName, password);
  4、MySQL(mm.mysql-3.0.2-bin.jar)
  Class.forName(&com.mysql.jdbc.Driver&);&&&&
  cn = DriverManager.getConnection( &jdbc:mysql://DBServerIP:3306/myDatabaseName&, userName, password );
  5、PostgreSQL(pgjdbc2.jar)
  Class.forName( &org.postgresql.Driver& );
  cn = DriverManager.getConnection( &jdbc:postgresql://DBServerIP/myDatabaseName&, userName, password );
  6、Oracle(classes12.jar)
  Class.forName( &oracle.jdbc.driver.OracleDriver& );
  cn = DriverManager.getConnection( &jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL&, userName, password );
  7、ODBC
  Class.forName( &sun.jdbc.odbc.JdbcOdbcDriver& );
  Connection cn = DriverManager.getConnection( &jdbc:odbc:& + sDsn, userName, password );
&&& 由于我的电脑安装的是Mysql,主机IP为&192.168.137.1&,数据库端口是默认的3306.故,连接到Mysql的程序为:
&& &Class.forName(&com.mysql.jdbc.Driver&);&&&& //加载MYSQL JDBC驱动程序&&&
&&&&Connection&con = (Connection) DriverManager.getConnection(&jdbc:mysql://192.168.137.1:3306/LibraryDB&,&user&,&1234&);
&&&&&&&&&&&&&
(二). 对数据库进行增,删,改,查.
(1)&&&&&& ResultSet executeQuery (String sql) :可以进行色sql查询并获取到ResultSet对象。
&&&& String sql=&select B_Name from book&; //具体视你的查询要求而定
&&&& Statement st=(Statement) con.createStatement();
&&&&&ResultSet rs=st.executeQuery(sql);
&&&&&while(rs.next())
&&&&&&&&& //进行你想要的查询.
&&&&&&&&& rs.getString(&B_Name&);
(2)int executeUpdate(String sql ):可以执行插入删除更新等操作,返回值是执行操作返回的受影响函数。
&&&& String sql=&drop table student&;&&&&
&&&& Statement st=(Statement) con.createStatement();
&&&&&ResultSet rs=st.executeUpdate(sql);
(3)&boolean execute (String sql) :可以执行任意sql语返回一个布尔值,表示是否返回ResultSet
(三)关闭数据库
&&&& rs.close();
&&&&&st.close();
&&&&&con.close();
&四. 下面,,根据以上的方法,进行android JDBC连接数据库的演示.用户可以输入SQL查询命令,然后点击&查询数据库&按键的时候,会将查询结果显示在下面的TextView上.
如下面的截图所示.
由于上面已经介绍地很详尽了,所以在此就不再给出工程代码了.如果想要完整的程序代码可到以下地下下载.
&新浪下载:&&
&CSDN下载:
最后说一声,采用JDBC的方式虽然可以访问数据库,但是,这样的方式不是很安全,因为,你必须把服务器那边的数据库的用户名,密码,甚至IP地址都写到代码里面去,这样的话,要是别人对你的apk进行反编译,那么,这些数据库用户名,密码便显露无遗.容易被别人用来恶意破坏你的数据库.因此,并不建议用这样的方式
对于数据库的访问,比较安全而普遍的方法,但是在你的电脑上搭建一个动态网页服务器(apache php mysql),然后android程序通过网页去访问你的数据库,如果需要传输数据,可用PHP 将数据打包成JSON包,然后,另一方接收JSON包,对其进行解析,得到相应数据.
&& 这里就不再介绍了.以后用到的时候,会另写一篇文章来重点介绍.
本文已收录于以下专栏:
相关文章推荐
/********************************************************************************************
 * aut...
1&实体类---即ListView中各个Item中填充的内容
package com..demo.cxc.
import java....
在大多数Android项目中,数据的读取和保存都是通过调用服务器的接口来实现的,所以对于本地数据库的操作是很少的。但是,在前段时间的项目中,客户提出了要直接连接服务器上的数据库来操作数据,这对于一个A...
1、Android平台下与服务器数据库通信的方法
在Android平台下,连接电脑服务器的MySQL、PostgreSQL、Oracle、Sybase、Microsoft SQLServer...
由于项目上有需求,需要通过android移动终端直接向pc端的sqlserver数据库上写数据,由于各种原因,无法通过接口来实现,所以就研究了一下,其中也遇到很多问题,翻墙出去看了很多大神的解决方案才...
最近在做一个Android的应用软件,为了图省事就打算使用Android通过JDBC连接Mysql,在这个过程中也遇到了些问题,通过网上查找最终整好了,把这个过程整理下。
一、准备条件
他的最新文章
讲师:刘文志
讲师:陈伟
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 显示驱动程序出现问题 的文章

 

随机推荐