安卓sqlite软件(在Android应用程序中使用SQLite数据库以及怎么用)

本文目录
- 在Android应用程序中使用SQLite数据库以及怎么用
- android 系统root后读取其他应用的sqlite
- android系统sqlite数据库文件怎么打开
- 有哪些比较好的 Android SQLite 开源工具类
- android软件SQLite Editor是如何打开data/data中的数据库的呢
- 如何使用SQLite,Android上SQLite的最佳实践
在Android应用程序中使用SQLite数据库以及怎么用
其主要思路是:
1.
把数据库分解成几个asset文件。
2.
当需要打开数据库时,如果数据库不存在,就把那几个asset文件重新合并成一个数据库文件。
3.
如果数据库的版本改变了,就在onUpgrade()方法中把数据库文件删除掉。
下面是代码:
//数据库的缺省路径
private
static
finalString
DB_PATH
=
“/data/data/com.mypackage.myapp/databases/“;
private
static
finalString
DB_NAME
=
“mydb.db“;
private
static
finalint
DB_VERSION
=
2;
private
static
finalString
DB_SPLIT_NAME
=
“mydb.db.00“;
private
static
finalint
DB_SPLIT_COUNT
=
3;
private
SQLiteDatabasem_database;
private
final
Contextm_context;
/**
*
Constructor
*保存传进来的context参数以用来访问应用的asset和资源文件。
*
@param
context
*/
public
MyDB(Contextcontext)
{
super(context,
DB_NAME,
null,
DB_VERSION);
this.m_context
=
context;
}
public
static
MyDBopenDatabaseReadOnly(Context
context)
{
MyDB
db
=
new
MyDB(context);
try
{
db.createDataBase();
}
catch
(IOException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
db.openDataBase(SQLiteDatabase.OPEN_READONLY);
return
db;
}
public
static
MyDBopenDatabaseReadWrite(Context
context)
{
MyDB
db
=
new
MyDB(context);
try
{
db.createDataBase();
}
catch
(IOException
e)
{
//
TODO
Auto-generated
catch
block
e.printStackTrace();
}
db.openDataBase(SQLiteDatabase.OPEN_READWRITE);
return
db;
}
/**
*创建一个空数据库,用来存储已有的数据库。
*/
public
voidcreateDataBase()
throws
IOException{
boolean
dbExist
=checkDataBase();
if
(dbExist)
{
/*
**如果自己的数据库的版本改变了,调用这个方法确保在onUpgrade()被调用时
**传进去的是可写的数据库。
*/
SQLiteDatabase
db
=this.getWritableDatabase();
if
(db
!=
null)
{
db.close();
}
}
dbExist
=
checkDataBase();
if
(!dbExist)
{
try
{
/*
**
调用这个方法以确保在缺省路径内产生一个空数据库,以便在其基础上复制咱们已有的数据库。
*/
SQLiteDatabase
db
=this.getReadableDatabase();
if
(db
!=
null)
{
db.close();
}
copyDataBase();
}
catch
(IOException
e)
{
Log.e(“DB“,
e.getMessage());
throw
new
Error(“Error
copyingdatabase“);
}
}
}
/**
*
检查数据库是否已存在,以避免重复复制。
*
@return
true
if
it
exists,
false
if
itdoesn’t
*/
private
static
booleancheckDataBase(){
SQLiteDatabase
checkDB
=
null;
try
{
String
path
=
DB_PATH
+
DB_NAME;
checkDB
=SQLiteDatabase.openDatabase(path,
null,
SQLiteDatabase.OPEN_READONLY);
}
catch
(SQLiteException
e){
//database
does’t
exist
yet.
}
if
(checkDB
!=
null)
{
checkDB.close();
}
return
checkDB
!=
null
?
true
:
false;
}
/**
*
把存在asset文件中的数据库复制的刚创建的空数据库中。
*
*/
private
voidcopyDataBase()
throws
IOException
{
//
刚创建的空数据库的路径
String
outFileName
=
DB_PATH
+
DB_NAME;
//
打开空数据库
OutputStream
output
=
new
FileOutputStream(outFileName);
byte
buffer
=
new
byte[1024*8];
AssetManager
assetMgr
=m_context.getAssets();
for
(int
i
=
1;
i
《=
DB_SPLIT_COUNT;
i++){
//
打开分解的asset文件
String
fn
=
DB_SPLIT_NAME
+String.valueOf(i);
InputStream
input
=
assetMgr.open(fn);
//Log.i(“DB“,
“opened“
+
fn);
int
length;
while
((length
=
input.read(buffer))
》0)
{
//Log.i(“DB“,
“read“
+
String.valueOf(length));
output.write(buffer,
0,
length);
//Log.i(“DB“,
“write“
+
String.valueOf(length));
}
input.close();
}
//Close
the
streams
output.flush();
output.close();
}
/**
android 系统root后读取其他应用的sqlite
安卓手机Root后,通过禁用自启动程序,卸载系统自带软件,有助于提升手机的性能,同时也伴随着巨大的潜在风险。
1、硬件危害
手机Root不会到对硬件造成危害。但Root后可能会导致一些数据出错或丢失,比如改变充电电流或照明功率等,从而烧坏手机的元器件。
2、系统危害
手机Root后将会出现系统问题。Root操作将会引起一些系统数据的丢失或出错,导致手机变板砖无法开机,或是反复重启、触屏失灵、WIFI或蓝牙失效等意想不到的系统故障。
此外,手机root后,系统可能会不稳定、手机更卡了、运行软件闪退等。
3、软件危害
手机Root后,个别手机可能会出现软件无法正常使用的情况。
4、信息泄漏风险
手机Root后,提供了最大的自主权,然而正是因为自主权,同时也给给病毒入侵提供方便之门。可能在不知不觉键给了软件某些权限,恶意软件可以比平常更容易侵入到手机。
5、影响保修
手机root后,不再享有保修的权利,且刷回原系统需收费。如果Root失败或出现故障,需要去进行售后处理时,消费者都一般需要付出费用的代价。
android系统sqlite数据库文件怎么打开
切换到ddms,显示file
explorer窗口,找到/data/data/然后找到自己用的程序包的文件夹,打开databases,就看到sqlite数据库文件了,然后到处就可以了。步骤上面标注好了,1,2,3。这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如sqlite
administrator、sqlite
man或者firefox插件sqlite
manager等打开就可以了。
有哪些比较好的 Android SQLite 开源工具类
ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android
android软件SQLite Editor是如何打开data/data中的数据库的呢
安卓的底层都是Linux,程序文件都在文件系统里面,而不是在SD卡里面,所以首先要进入文件系统,否则是找不到data文件夹的。我用的不是SQLite Editor,是通过PC查看手机的数据库,不过基本都差不多:
1,前提是要获取ROOT权限;
2,安卓的底层是Linux,可以通过ROOT账户登录Linux;
3,通过Linux的文件系统修改data/data的访问权限;
4,如果要修改文件夹的访问权限,输入命令:chmod 777 data;
5,如果要修改文件的访问权限,则输入:chmod 755 文件名;
6,遇到没有访问权限的文件夹和文件都使用上面的两条命令就可以解决;
7,最后,就是SQLite 器打开数据库文件了。
如何使用SQLite,Android上SQLite的最佳实践
SQLite3是目前最新的SQLite版本。可以从网站上下载SQLite3的源代码(本书使用的版本是sqlite-3.6.12.tar.gz)。
解压缩后进入sqlite-3.6.12的根目录,首先命令“./configure”生成Makefile文件,接着运行命令“make”对源代码进行编译,最后运行命令“make install”安装SQLite3。安装完毕后,可以运行命令sqlite3查看SQLite3是否能正常运行,如下所示:
[root@localhost ~]# sqlite3
SQLite version 3.6.12
Enter “.help“ for instructions
Enter SQL statements terminated with a “;“
sqlite》
可以看到,SQLite3启动后会停留在提示符sqlite》处,等待用户输入SQL语句。
在使用SQLite3前需要先了解下SQLite3支持的数据类型。SQLite3支持的基本数据类型主要有以下几类:
NULL
NUMERIC
INTEGER
REAL
TEXT
SQLite3会自动把其他数据类型转换成以上5类基本数据类型,转换规则如下所示:
char、clob、test、varchar—》 TEXT
integer—》INTEGER
real、double、float—》 REAL
blob—》NULL
其余数据类型都转变成NUMERIC
下面通过一个实例来演示SQLite3的使用方法。
新建一个数据库
新建数据库test.db(使用.db后缀是为了标识数据库文件)。在test.db中新建一个表test_table,该表具有name,、sex、age三列。SQLite3的具体操作如下所示:
[root@localhost home]# sqlite3 test.db
SQLite version 3.6.12
Enter “.help“ for instructions
Enter SQL statements terminated with a “;“
sqlite》 create table test_table(name, sex, age);
如果数据库test.db已经存在,则命令“sqlite3 test.db”会在当前目录下打开test.db。如果数据库test.db不存在,则命令“sqlite3 test.db”会在当前目录下新建数据库test.db。为了提高效率,SQLite3并不会马上创建test.db,而是等到第一个表创建完成后才会在物理上创建数据库。
由于SQLite3能根据插入数据的实际类型动态改变列的类型,所以在create语句中并不要求给出列的类型。
创建索引
为了加快表的查询速度,往往在主键上添加索引。如下所示的是在name列上添加索引的过程。
sqlite》 create index test_index on test_table(name);
操作数据
如下所示的是在test_table中进行数据的插入、更新、删除操作:
sqlite》 insert into test_table values (’xiaoming’, ’male’, 20);
sqlite》 insert into test_table values (’xiaohong’, ’female’, 18);
sqlite》 select * from test_table;
xiaoming|male|20
xiaohong|female|18
sqlite》 update test_table set age=19 where name = ’xiaohong’;
sqlite》 select * from test_table;
xiaoming|male|20
xiaohong|female|19
sqlite》 delete from test_table where name = ’xiaoming’;
sqlite》 select * from test_table;
xiaohong|female|19
批量操作数据库
如下所示的是在test_table中连续插入两条记录:
sqlite》 begin;
sqlite》 insert into test_table values (’xiaoxue’, ’female’, 18);
sqlite》 insert into test_table values (’xiaoliu’, ’male’, 20);
sqlite》 commit;
sqlite》 select * from test_table;
xiaohong|female|19
xiaoxue|male|18
xiaoliu|male|20
运行命令commit后,才会把插入的数据写入数据库中。
数据库的导入导出
如下所示的是把test.db导出到sql文件中:
[root@localhost home]# sqlite3 test.db “.dump“ 》 test.sql;
test.sql文件的内容如下所示:
BEGIN TRANSACTION;
CREATE TABLE test_table(name, sex, age);
INSERT INTO “test_table“ VALUES(’xiaohong’,’female’,19);
CREATE INDEX test_index on test_table(name);
COMMIT;
如下所示的是导入test.sql文件(导入前删除原有的test.db):
[root@localhost home]# sqlite3 test.db 《 test.sql;
通过对test.sql文件的导入导出,可以实现数据库文件的备份。
11.2.2 SQLite3的C接口
以上介绍的是SQLite3数据库的命令操作方式。在实际使用中,一般都是应用程序需要对数据库进行访问。为此,SQLite3提供了各种编程语言的使用接口(本书介绍C语言接口)。SQLite3具有几十个C接口,下面介绍一些常用的C接口。
sqlite_open
作用:打开SQLite3数据库
原型:int sqlite3_open(const char *dbname, sqlite3 **db)
参数:
dbname:数据库的名称;
db:数据库的句柄;
sqlite_colse
作用:关闭SQLite3数据库
原型:int sqlite_close(sqlite3 *db)
例如:
test.c:
#include 《stdio.h》
#include 《sqlite3.h》
static sqlite3 *db=NULL;
int main()
{
int rc;
rc= sqlite3_open(“test.db“, &db);
if(rc)
{
printf(“can’t open database!\n“);
}
else
{
printf(“open database success!\n“);
}
sqlite3_close(db);
return 0;
}
运行命令“gcc –o test test.c –lsqlite3”进行编译,运行test的结果如下所示:
[root@localhost home]# open database success!
sqlite_exec
作用:执行SQL语句
原型:int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg)
参数:
db:数据库;
sql:SQL语句;
callback:回滚;
errmsg:错误信息
例如:
test.c:
#include 《stdio.h》
#include 《sqlite3.h》
static sqlite3 *db=NULL;
static char *errmsg=NULL;
int main()
{
int rc;
rc = sqlite3_open(“test.db“, &db);
rc = sqlite3_exec(db,“insert into test_table values(’daobao’, ’male’, 24)“, 0, 0, &errmsg);
if(rc)
{
printf(“exec fail!\n“);
}
else
{
printf(“exec success!\n“);
}
sqlite3_close(db);
return 0;
}
编译完成后,运行test的结果如下所示:
[root@localhost home]# ./test
exec success!
[root@localhost home]# sqlite3 test.db
SQLite version 3.6.11
Enter “.help“ for instructions
Enter SQL statements terminated with a “;“
sqlite》 select * from test_table;
daobao|male|24
sqlite3_get_table
作用:执行SQL查询
原型:int sqlite3_get_table(sqlite3 *db, const char *zSql, char ***pazResult, int *pnRow, int *pnColumn, char **pzErrmsg)
参数:
db:数据库;
zSql:SQL语句;
pazResult:查询结果集;
pnRow:结果集的行数;
pnColumn:结果集的列数;
errmsg:错误信息;
sqlite3_free_table
作用:注销结果集
原型:void sqlite3_free_table(char **result)
参数:
result:结果集;
例如:
test.c:
#include 《stdio.h》
#include 《sqlite3.h》
static sqlite3 *db=NULL;
static char **Result=NULL;
static char *errmsg=NULL;
int main()
{
int rc, i, j;
int nrow;
int ncolumn;
rc= sqlite3_open(“test.db“, &db);
rc= sqlite3_get_table(db, “select * from test_table“, &Result, &nrow, &ncolumn,
&errmsg);
if(rc)
{
printf(“query fail!\n“);
}
else
{
printf(“query success!\n“);
for(i = 1; i 《= nrow; i++)
{
for(j = 0; j 《 ncolumn; j++)
{
printf(“%s | “, Result[i * ncolumn + j]);
}
printf(“\n“);
}
}
sqlite3_free_table(Result);
sqlite3_close(db);
return 0;
}
编译完成后,运行test的结果如下所示:
[root@localhost home]# ./test
query success!
xiaohong | female | 19 |
xiaoxue | female | 18 |
xiaoliu | male | 20 |
daobao | male | 24 |
sqlite3_prepare
作用:把SQL语句编译成字节码,由后面的执行函数去执行
原型:int sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **stmt, const char **pTail)
参数:
db:数据库;
zSql:SQL语句;
nByte:SQL语句的最大字节数;
stmt:Statement句柄;
pTail:SQL语句无用部分的指针;
sqlite3_step
作用:步步执行SQL语句字节码
原型:int sqlite3_step (sqlite3_stmt *)
例如:
test.c:
#include 《stdio.h》
#include 《sqlite3.h》
static sqlite3 *db=NULL;
static sqlite3_stmt *stmt=NULL;
int main()
{
int rc, i, j;
int ncolumn;
rc= sqlite3_open(“test.db“, &db);
rc=sqlite3_prepare(db,“select * from test_table“,-1,&stmt,0);
if(rc)
{
printf(“query fail!\n“);
}
else
{
printf(“query success!\n“);
rc=sqlite3_step(stmt);
ncolumn=sqlite3_column_count(stmt);
while(rc==SQLITE_ROW)
{
for(i=0; i《2; i++)
{
printf(“%s | “, sqlite3_column_text(stmt,i));
}
printf(“\n“);
rc=sqlite3_step(stmt);
}
}
sqlite3_finalize(stmt);
sqlite3_close(db);
return 0;
}
编译完成后,运行test的结果如下所示:
[root@localhost home]# ./test
query success!
xiaohong | female | 19 |
xiaoxue | female | 18 |
xiaoliu | male | 20 |
daobao | male | 24 |
在程序中访问SQLite3数据库时,要注意C API的接口定义和数据类型是否正确,否则会得到错误的访问结果。

更多文章:
易语言网页api接口怎么调用(易语言,怎么读取网页json的api)
2026年10月11日 08:00
majority of(the majority of 和 a majority of的区别以及用法例句)
2026年10月11日 07:40
another time(another time和other time的区别)
2026年10月11日 05:00








