Android开发怎么查看和管理sqlite数据库
发布时间:2025-05-23 06:32:15 发布人:远客网络
一、Android开发怎么查看和管理sqlite数据库
1首先打开android项目的调试模式,然后找到显示DDMS
切换到DDMS,显示FileExplorer窗口,找到/data/data/如下图1,
然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了。选择将其导出。如下图2.
这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如SQLite Expert Professional可以打开该数据库了。其他 sqlite界面管理工具如sqliteadministrator、sqliteman或者firefox插件sqlitemanager也可以打开该数据库
AndroidDebugBridge(ADB)是Android的一个通用调试工具,它可以更新设备或模拟器中的代码,可以管理预定端口,可以在设备上运行shell命令,知道android是基于Linux内核,它的内部文件结构也是采用linux文件组织方式,因此访问它的文件结构需要使用shell。这次我们就会用shell来访问android应用中的sqlite数据库文件。
1、运行cmd,切换到android-sdk目录,运行adb.exe,加上参数shell,出现#号就代表进入了shell命令模式,注意adb要在Android模拟器运行时才能进入shell:如下图
shell命令记住两个基本命令ls和cd,类似windows命令提示行中的dir和cd,代表列出当前目录下文件列表和进入到指定目录。了解这两个命令之后,就可以找到data/data/项目包名/databases如下图1,找到数据库文件如下图2。
使用sqlite管理工具来进行数据库操作
键入sqlite3数据库名就进入了sqlite管理模式了。
在android的sdk中自带了sqlite3.exe,这是sqlite的官方管理工具,它是一个命令行工具。为了使用方便,将其路径注册到系统环境变量path中,即将;%Android_Home%加在Path中,这样只样运行sqlite3,就能直接打开sqlite管理工具了。
sqlite命令行工具默认是以;结束语句的。所以如果只是一行语句,要在末尾加;,或者在下一行中键入;,这样sqlite命令才会被执行。
其他命令可随时.help查看帮助。sql命令可直接在此命令行上执行即可:
二、如何用sqlite3
1.首先是下载sqlite,可以该页面下载:
当前的最新版本为:sqlite-shell-win32-x86-3070701.zip这个是windows下sqlite的命令行管理工具,用它可以管理sqlite数据库文件
同时最好把文档也下载下来,里面包含了详细的sqlite的使用说明:sqlite-doc-3070701.zip
sqlite无需任何配置和安装,只要将下载下来的shell文件解压到任何你觉得合适的地方,然后将其加入到path环境变量就可以了(加入path环
境变量是为了直接在命令行使用sqlite3,不加的话需要详细的指定sqlite3的路径,如d:/sqlite/sqlite3)。
要想掌握一个软件的使用,最好的方式是使用软件自带的帮助和文档,而不是一直利用google。文档和帮助一般包含了该软件所有的用法,毕竟那是有软件的开发者所写的,他对软件是最了解的。
win+ r输入cmd,进入命令行,并输入sqlite3,进入sqlite的命令行管理工具。
然后输入.help,则可以看到sqlite3的管理工具的所有用法了:
为了照顾e文不好的朋友,这里将所有的命令解释一遍,并给出相应的示例:
首先创建一个数据库test.db,并在该数据库中创建一张表user
1.因为之前进入了sqlite3了,先用.quit退出sqlite
2.再用sqlite3 test.db加载或创建指定数据库
3.然后用sql语句创建一个一张表user(关于sql语句,可以去看些sql入门的书籍,在sqlite文档中也有对应的sql的介绍,不过
感觉那个不适合入门,因为毕竟很多数据库的基本知识里面都没有讲到)(同时还需要注意的是sqlite是可以不指定列的类型的,这也是sqlite的一个
4.然后又用到了一个显示当前数据库中存在的数据表的命令.tables(.help中倒数第三个)
5.最后向数据表中插入了一条数据(sql语句,不是.help中的命令)
接下来从上到下介绍所有命令的使用:
将数据库文件备份到指定的文件中,默认(在不指定数据库名时)会备份main数据库)
设置在遇到错误时就停止sqlite工具的执行,默认时是OFF的。
列出(当前数据库文件中)附加的所有数据库的名字和文件
将数据库打印为sql文本格式。如果?TABLE1?指定了,就只打印出名字中包含了TABLE1的数据表。
在显示的结果前是否显示输入的命令
注意:这个是以column模式显示了,后面会讲到如何将显示方式设置为column
开启或关闭适合于的输出模式。不指定ON或OFF时,默认为ON。
--no-drop:不删除旧的外键触发器
--ignore-error:忽略表的外键错误
这个应该是设置在违反外键约束时,sqlite如何做。具体的没尝试。
设置输出模式,当?TABLE?指定时,就是该输出模式只应该在该表的输出上
读取文件中的数据插入到指定表中
注意这里的分隔符.separator是\t,所以data.txt中是以tab分隔的,默认的是,(此时就是2,yuan2,2)
显示指定表的所有索引。表没指定时,显示所有索引。
开启,并将日志输出到标准输出流:.log stdout
开启,并将日志输出到标准错误六:.log stderr
开启,并将日志输出到指定文件:.log d:/sqlite3/log.txt
值为NULL时,显示的字符串。默认为""
将所有的输出都输出到标准输出流(默认就是),就是输出到控制台上
从备份文件中还原数据库。默认是还原main数据库。
3.然后在还原main数据库,看数据是否还原成功
显示指定表的创建语句。表未指定时,显示所有表的创建语句。
因为之前创建了索引,所以包含索引创建语句。
设置输出模式.mode和导入数据.import的分隔符。
只在指定的毫秒内尝试打开锁定的表,而不是一直尝试打开。
设置.mode column中每个列的宽度。每个列默认的宽度是10个字符,过长时会被截断。
第一列设为1个字符,第二列设为0表示保持不变,第三类不设置也是保持不变
三、MFC中,如何连接sqlite3的数据库,并对此数据库操作
这个比较容易。按照网上提供的方法把sqlite编译成dll和lib
将dll和lib在项目的输入中添加好
在要操作的文件中#include“sqlite3.h”就可以了。我做过这方面的项目,虽然是嵌入式wince使用,但是基本和windows相同。
1).打开VC新建一个“Win32 Dynamic-Link Library”工程,命名为:sqlite3(也可以是其他的,注意这个就是编译后的dll和lib的名字)
2).在接下来的对话框中选择"An empty DLL project",点 FINISH->OK
3).将源码中所有的*.c*.h*.def复制到工程文件夹下
4).在工程的Source File中添加你下载到的SQLite源文件中所有*.c文件,
注意这里不要添加shell.c和tclsqlite.c这两个文件。*注意需要将tclsqlite.c和shell.c、icu.c去掉。其中tclsqlite.c用于生成基于tcl的api,如果要编译,这需要另外下载tcl.h;shell.c用于生成命令行模式的sqlite.exe,如果是静态库形式则可以选择; icu是internationalcomponents forunicode,如果需要则需另外下载相关头文件。
5).将 SQLite源文件中的 sqlite3.def文件添加到在工程的Source File中
6).在Header File中添加你下载到的SQLite源文件中所有*.h文件,
e:\zieckey\sqlite\sqlite3\sqlite3ext.h(22): fatal error C1083: Cannot open include file:'sqlite3.h': No such file or directory
经检查发现,源码中包含sqlite3.h都是以#include<sqlite3.h>方式包含的,
这就是说编译器在系统默认路径中搜索,这样当然搜索不到 sqlite3.h这个头文件啦,
这时可以改为#include"sqlite3.h",让编译器在工程路径中搜索,
但是如果还有其他地方也是以#include<sqlite3.h>方式包含的,那么改源码就显得有点麻烦,
好了,我们可以这样,在菜单栏依次选择:Tools->Options...->Directeries
在下面的Directeries选项中输入你的 sqlite3.h的路径,这里也就是你的工程目录.
添加好后,我们在编译一下就好了,
最后我们在工程目录的 Debug目录生成了下面两个重要文件:
动态链接库文件 sqlite3.dll和引入库文件 sqlite3.lib
下面我们来编写个程序来测试下我们的动态链接库.
在VC下新建一个空的"Win32 Console Application" Win32控制台程序,工程命名为:TestSqliteOnWindows
再新建一个 test.cpp的C++语言源程序,源代码如下:
// This prog is used to test C/C++ API for sqlite3.It is very simple,ha!
rc= sqlite3_open("zieckey.db",&db);//打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
fprintf(stderr,"Can't open database:%s\n", sqlite3_errmsg(db));
else printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun! ^-^\n");
//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg中
char*sql=" CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,Time VARCHAR(12),SensorParameter REAL);";
sqlite3_exec( db, sql, 0, 0,&zErrMsg);
printf("zErrMsg=%s\n", zErrMsg);
sql="INSERT INTO\"SensorData\" VALUES(NULL, 1, 1,'200605011206', 18.9);";
sqlite3_exec( db, sql, 0, 0,&zErrMsg);
sql="INSERT INTO\"SensorData\" VALUES(NULL, 23, 45,'200605011306', 16.4);";
sqlite3_exec( db, sql, 0, 0,&zErrMsg);
sql="INSERT INTO\"SensorData\" VALUES(NULL, 34, 45,'200605011306', 15.4);";
sqlite3_exec( db, sql, 0, 0,&zErrMsg);
char**azResult;//二维数组存放结果
sql="SELECT* FROM SensorData";
sqlite3_get_table( db, sql,&azResult,&nrow,&ncolumn,&zErrMsg);
printf("row:%d column=%d\n", nrow, ncolumn);
printf("\nThe result of querying is:\n");
for( i=0; i<( nrow+ 1)* ncolumn; i++)
printf("azResult[%d]=%s\n", i, azResult[i]);
sql="DELETE FROM SensorData WHERE SensorID= 1;";
sqlite3_exec( db, sql, 0, 0,&zErrMsg);
printf("zErrMsg=%s\n", zErrMsg);
sql="SELECT* FROM SensorData";
sqlite3_get_table( db, sql,&azResult,&nrow,&ncolumn,&zErrMsg);
printf("\n\n\n\nrow:%d column=%d", nrow, ncolumn);
printf("\nAfter deleting, the result of querying is:\n");
for( i=0; i<( nrow+ 1)* ncolumn; i++)
printf("azResult[%d]=%s\n", i, azResult[i]);
sqlite3_free_table( azResult);
printf("zErrMsg=%s\n", zErrMsg);
sqlite3_close(db);//关闭数据库
另外,将sqlite3.h sqlite3.lib sqlite3.dll文件复制到我们的工程目录.
最后 Project->Settings在Link选项卡找到Object/library modules:在最后填入sqlite3.lib。
如果原来就有链接,请使用空格分隔。
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun! ^-^
After deleting, the result of querying is:
5).将 SQLite源文件中的 sqlite3.def文件添加到在工程的Source File中
是必须的, sqlite3.def这个文件的加入会生成*.lib引入库文件,这个对于*.dll文件是很重要的.否则你光有*.dll文件在程序调用的时候就不是那么方便了,因为这样你只能通过动态加载dll的方式调用dll库中函数
这个程序,我们先创建一个数据库,然后新建一个表,然后插入一些数据,
再查询看看插入的数据是否正确,然后又删除一些数据,删除后我们再查询了一下,
这个程序简单的调用 sqlite的函数接口来实现对数据库的管理,
包括创建数据库、创建表格、插入数据、查询数据、删除数据等。