【首先把结论说出来:不到万不得已最好不要使用JDBC操作SQLite数据库】
最近两天一直在捣鼓JDBC与SQLite相连接的事情,想使用jdbc的preparedStatement类实现对SQLite数据库的操作。在Java项目上能够成功加载JDBC驱动,也就是这句话能够被成功执行: Class.forName("org.sqlite.JDBC") ;,但是一旦移植到Android项目上各种bug横行其道:
【java
.
lang
.
ClassNotFoundException
:
com
.sqlite
.
jdbc
.
Driver】
【unable to execute dex: gc overhead limit exxeeded】
【An out of memory error has occurred】
【no suitable driver found for jdbc:sqlite:db/test.db】
。。。。。。。。。。
百度了两天,各种解决方案都尝试了,最后还是无法运行。然后翻过去用谷歌搜索了一下答案,发现国外有位网友也有同样的困惑,我就不复制粘贴了,截图如下:
-----------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------
他的大概意思就是:我想在我的Android项目中读取一个数据库的内容,所以就把该数据库放在一个文件夹里面。我准备通过JDBC建立与该数据库的连接,然后我导入JDBC 的jar包并且通过如下语句实现驱动的加载与数据库的连接,在Java项目中这样做很成功,但是当我想在Android项目中实现该功能时,中会出现ClassNotFoundException的异常,我检查了自己的项目,没发现什么错误啊。请问为什么会出现这种异常?
有一位网友这样答道:
------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------
他的意思是说:你非得这样做吗?我觉着只有0.1%的Android程序员会在Android项目中使用JDBC,只用0.05的程序员会在Android项目中把JDBC与SQLite数据库结合使用。很多已经Android中已经封装好的类例如
SQLiteDatabase
SQLiteOpenHelper
,
已经可以提供很强大的数据库操作功能了。
还有一位网友这样答道:
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
他的大概意思是说:
JDBC确实不适合在Android上面使用,我绝对不会推荐在Android项目中使用JDBC
JDBC适合于高宽带、低延迟、高可靠性的网络连接,例如B/S,D/S中的数据库服务,Android设备一点也不符合这些特性。
=======================================================================================================
2015年4月9日11:39:23补充
我想在Android中使用JDBC的朋友有一部分是想用JDBC里面的PreparedStatement类吧,因为preparedStatement提供了很多对数据库的便捷操作。如果是这样的话只能说你舍近求远了。在SQLiteDatabase类中已经提供了很强大的功能实现了。SQLiteDatabase的作用类似于JDBC的Connection,例如方法Cursor rawQuery(String sql String[] selectinArgs)返回的Cursor就像JDBC中的ReultSet。JDBC里面的PrepatedStatement提供了setXXX()方法,同样Android中的SQLiteStatement也提供了类似的bindXXX()方法。
========================================================================================================
国外类似问题链接:
http://stackoverflow.com/questions/7221620/android-jdbc-not-working-classnotfoundexception-on-driver
总而言之,在Android项目开发中不适合使用JDBC。
SQLite
是一款非常流行的嵌入式
数据库
,它支持 SQL 查询,并且只用很少的内存。
Android
在运行时集成了
SQLite
,所以每个
Android
应用程序都可以
使用
SQLite
数据库
。对数熟悉 SQL 的开发人员来时,
使用
SQLite
相当简单。可以,由于
JDBC
不适合手机这种内存受限设备,所以
Android
开发人员需要学习新的 API 来
使用
SQLite
。本文主要讲解
SQLite
在
Android
环境中的基本
使用
。
SQLite
介绍
SQLite
一个非常流行的嵌入式
数据库
,它支持 SQL 语言,并且只利用很少的内存有很好的性能。此外它还是开源
写了一段算法,需要
使用
到
数据库
,写完才发现,
android
的app很少有用
jdbc
连自己的sqllite的,但是我又不想再去多学一套操作
数据库
的语法~怎么办?
使用
sqldroid!
*
JDBC
方式
连接
数据库
* @return
* @throws BaseException
public Connection getConnection() {
Android
数据库
之
SQLite
数据库
导出查看
数据库
文件
在
android
中,为某个应用程序创建的
数据库
,只有它可以访问,其它应用程序是不能访问的,
数据库
位于
Android
设备/data/data/package_name/databases文件夹中。
想要将
数据库
文件导出可以
使用
eclipse.
查看
数据库
,
使用
SQlite
Database Browser
扩展
SQLite
Open...
1.
数据库
连接
创建、释放频繁会造成资源的浪费,从而影响系统的性能。如果
使用
数据库
连接
池技术可能会使其好转。
2.sql语句中存在硬编码问题,造成代码的不易维护,实际应用中sql变化的可能较大,容易造成整体的
java
代码的改变
3.
使用
prepreparedStatement向占位符传递参数存在硬编码问题,因为sql中的where条件可能不一定,可能多和少,很容易要造成修改sql代码,系统不易维...
SQLite
简介
SQLite
是一个开源的嵌入式关系
数据库
,实现自包容、零配置、支持事务的SQL
数据库
引擎。其特点是高度便携、
使用
方便、结构紧凑、高效、可靠。与其他
数据库
管理系统不同,
SQLite
的安装和运行非常简单,在大多数情况下只要确保
SQLite
的二进制文件存在即可开始创建、
连接
和
使用
数据库
。
除了应用于
Android
、IOS等移动设备外,
SQLite
在小型网站以及PC客户端上也有着相当广泛的应用。下面我们学习如何在PC上建立
SQLite
数据库
以及如何利用
JDBC
的方式来操作
SQLite
数据库
。在正式
之前操作
sqlite
一直用sdk中的
SQLite
OpenHelper,在多线程操作
数据库
(特别是插入数据)的时候,总是提示
sqlite
已经被锁定,其它线程就无法继续了。
今天研究了一下
android
用
jdbc
操作
sqlite
,再用多线程去操作
数据库
的时候就不会有这个状况了
您可以
使用
Qt 提供的 QSqlDatabase 类来
连接
SQLite
数据库
。首先,您需要在项目中包含 QtSql 模块,然后
使用
以下代码
连接
数据库
:
QSqlDatabase db = QSqlDatabase::addDatabase("Q
SQLITE
");
db.setDatabaseName("database.db");
if (!db.open()) {
qDebug() << "Failed to connect to database.";
其中,"database.db" 是您要
连接
的
SQLite
数据库
文件名。接下来,您可以
使用
QSqlQuery 类执行 SQL 查询和操作
数据库
。例如,以下代码创建一个名为 "users" 的表:
QSqlQuery query;
query.exec("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
然后,您可以插入数据到表中:
query.prepare("INSERT INTO users (name) VALUES (:name)");
query.bindValue(":name", "John Doe");
query.exec();
最后,您可以查询数据并
使用
QSqlQuery::next() 函数遍历结果集:
query.exec("SELECT * FROM users");
while (query.next()) {
int id = query.value().toInt();
QString name = query.value(1).toString();
qDebug() << "User #" << id << ": " << name;
希望这可以帮助您在 Qt 中
使用
SQLite
数据库
。