当前位置:首页 » 编程软件 » sqlite编程

sqlite编程

发布时间: 2022-05-31 16:19:42

sqlite怎么使用呀

下载一个sqlite客户端工具就可以进行编程了,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 ".mp" > 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('bao', '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;
bao|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 |
bao | 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 |
bao | male | 24 |
在程序中访问SQLite3数据库时,要注意C API的接口定义和数据类型是否正确,否则会得到错误的访问结果。

❸ 如何编程遍历sqlite数据库,遍历数据库,并把id存到一个数组里,这样就可以用与item

如何编程遍历sqlite数据库,遍历数据库,并把id存到一个数组里,这样就可以用与item
单独写个插入方法,每次做插入操作的时候都用插入方法写。
插入多行的时候就遍历list然后循环调用方法。
你在list里面存的是你要存的对象,插入方法的参数也是那个对象。

❹ 《SQLite权威指南第二版》pdf下载在线阅读全文,求百度网盘云资源

《SQLite权威指南第二版》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1BbVWfxQL0V52IRCt3TY60w

?pwd=ggvf 提取码:ggvf
简介:本书是一本关于SQLite起源、特性、简介、使用、深度解析的书。全书首先从SQLite 初起源、特性、设计理念、实际应用讲解开始,逐步深入、全面地介绍了在各个平台如何使用SQLite。接着,介绍SQLite的一般SQL和高级功能的SQL,采取举例说明,使得本书内容生动有趣。然后,全面介绍了各种语言如何与SQLite进行编程交互,重点介绍SQLite原生语言C语言中的API,使得使用者可以不管扩展SQLite的功能。本书还介绍了目前火热的IOS和Android开发中如何使用SQLite,并给出实际例子。 后,介绍了SQLite内部架构设计,使得读者可以深入理解SQLite,高级开发者可以进一步参与SQLite开发或者开发自己的SQLite。

❺ sqlite是什么意思

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界着名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。
参考资料网络《SQLite》。

❻ 如何学习sqlite源码

先来说说sqlite的资料.
首先sqlite的资料其实是不多不少的.
不少的原因是因为这些资料确实能够让你明白sqlite的设计原理.
说它不多的原因是也就让你明白其原理, 仅此而已.

sqlite的资料主要来自四个地方, 从简到深依次为:
1.<>, 这是一本介绍sqlite"基本原理"的小书, 只有80页左右, 介绍了sqlite的"后端"原理. 这本书在网络有下载, 纯英文版的, 链接:inside sqlite_网络知道. 在上面的github上, 我们项目的同伴对这本书做了翻译, 不过还没完成, 建议直接扫原版.

2.官方文档, 连接:SQLite Documentation. 但是里面的文档对于学习者来说也有轻重之分, 建议主要阅读 "SQLite Technical/Design Documentation" 这一栏的技术文档.

3.<<SQLite Database System: Design and Implementation>>. 这也是一本说sqlite的小书, 不到200页. 这本书的内容其实和<<inside sqlite>>有重叠, 甚至不少地方的段落是直接复制过来的... 不过这本书比<<inside sqlite>>详细很多, 也建议扫描一遍. 这本书我目前在做翻译, 做了3,4,5,6四章的翻译了. 不过是很粗翻译, 不建议直接看...

4.源码注释. sqlite的源码注释非常详细, 详细到比上面两本书说的还多... sqlite的每份.c代码内的注释差不多快比代码还多了, 而且除了将基本架构外, 很多上述资料没有提到的细节, 也在源码注释中被提了出来.

================================================================

接下来说一下本人推荐的学习方法~~

================================================================

下面是认真学习的方法, 如果想快速暴力的学习, 直接看下一段.

想要认真点学习的话.
应该先去看"Architecture of SQLite"这篇文档, 该文档详细的介绍了sqlite的7层结构, 总体被分为了"前段", "中层VM", "后端".

看完arch.html那文过后, 你就知道"前端"主要做的是语法分析, "后端"主要实现了数据库性质(ACID, 增删查改).
个人建议从后端开始学习, 毕竟学习sqlite是学习怎么实现数据库.

后端的tree, pager, os三层, 其实都不难(起码理解起来不难),
我建议OS->PAGER->TREE这样边学习, 边写demo.
简要说一下我在学习这三层过程中遇到的一些点, 希望能帮到楼主.

OS:
os是很薄的一层, 主要是为了提高可移植性而被设计出来的.
学习这一层的方法很粗暴:看"The OS Backend (VFS) To SQLite", 然后去看源码中的"test_demovfs.c".
主要搞清下面三个结构体.
sqlite3_vfs
sqlite3_io_methods
sqlite3_file
在我github中的demo1.1中, 有一个更简单的demo, 可以参考看下里面的os.c, os.h, unix_os.c三份代码.

-------------------------------------------------

Pager:
Pager主要实现了三段功能: ACID, log, cache.
先说ACID:
ACID的这部分我只看了最最基本的方法, 然后选择跳过的, sqlite实现ACID的方法可以看"Atomic Commit In SQLite",
这里是我翻译的, 能看,
"how-to-implement-a-DB-like-sqlite/SQLite怎样实现原子性.md at master · qw4990/how-to-implement-a-DB-like-sqlite · GitHub".
除了这篇最基本的文档, 推荐看<<SQLite Database System: Design and Implementation>>的3章和4章, 看完能理解sqlite实现ACID的基本方法.

接着是cache, sqlite提供了插件式的cache结构, 所以你或许会惊讶为什么sqlite里面同时有pager.c, pcache.c, pcache1.c:
cache这个部分比较简单, <<inside sqlite>>第三章, <<SQLite Database System>>第五章都有详细的介绍, 主要讲解了pager实现cache的方法.
在我github中的demo1.1中, cache的功能也已经完成了, 1 可以参考看下里面的pager.h, pager.c, pcache.c, pcahce1这四份代码.

最后是log:
这部分我现在直接选择了忽视...

----------------------------------------------------

Tree层:
sqlite的tree层就是用B+/B-树维护数据, 以达到快速"增删查改"的目的.
这一层在官方文档里没多少资料.
先是算法本身, 也就是B+/B-/B树, 没什么好说的, 很多算法书都有.
接下来重点是sqlite怎么将B树应用到自身的数据库中的.
这一点可以看<<inside sqlite>>的第5章, <<SQLite Database System>>的第6章, 都有很详细的介绍.
<<SQLite Database System>>讲得更为仔细, 除了说原理外, 还说了sqlite里btree大致被分为了几个结构体在工作.

以上就是我学习后端遇到的一些点吧.

=============================================================

如果嫌弃上面的学习方法麻烦的话,
可以先扫一下"Architecture of SQLite",
接着再看一下"Atomic Commit In SQLite",
最后简单粗暴的把推荐的那两本书扫完,
也大致知道sqlite是怎么设计的了.

不过个人认为sqlite是一个"大师级的精致的工艺品", 光看完两本书就说自己学完了它, 未免有点"暴殄天物".
除了基本的数据库设计方法(也就是那两本书的内容), sqlite的源代码中所蕴含的编程技巧, 工程设计, 以及各种小考虑, 也是非常值得吸收学习的.

=============================================================

最后总结一下
如果想简单粗暴快捷的学习, 直接扫arch.html, atomiccommit.html和那两本书, 就能明白sqlite是怎样被设计的了.
如果想深入学习, 建议从7层开始向前学, 边翻文档边看源码边写demo.

❼ 编程实现sqlite数据库读取excel表格的内容,并用android提取sqlite中的数据

你可以先用poi框架,将Excel中的内容读取出来,然后写入数据库中,然后就可以从数据库中读取你想要的内容了,希望这些对你有所帮助。

❽ 安卓sqlite需要有什么基础

一.基础知识: 1.SQLite的数据类型: NULL:空值。 INTEGER:带符号的整型,具体取决有存入数字的范围大小。 REAL:浮点数字,存储为8-byte IEEE浮点数。 TEXT:字符串文本。 BLOB:二进制对象。 smallint 16位元的整数。 interger 32位元的整数。 decimal(p,s) p 精确值和 s 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 。 float 32位元的实数。 double 64位元的实数。 char(n) n 长度的字串,n不能超过 254。 varchar(n) 长度不固定且其最大长度为 n 的字串,n不能超过 4000。 graphic(n) 和 char(n) 一样,不过其单位是两个字符 double-bytes, n不能超过127。这个形态是为了支援两个字符长度的字体,例如中文字。 vargraphic(n) 可变长度且其最大长度为 n 的双字符字串,n不能超过 2000 date 包含了 年份、月份、日期。 time 包含了 小时、分钟、秒。 timestamp 包含了 年、月、日、时、分、秒、千分之一秒。 datetime 包含日期时间格式,必须写成'2010-08-05'不能写为'2010-8-5',否则在读取时会产生错误! 2.SQLite的基本操作: ①SQLiteOpenHelper 抽象类:通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。 [java] // 创建数据库 public void onCreate(SQLiteDatabase db) // 更新数据库 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打开数据库 public void onOpen(SQLiteDatabase db) // 得到一个可读SQLiteDatabase对象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一个可写SQLiteDatabase对象 public synchronized SQLiteDatabase getWriteableDatabase() // 创建数据库 public void onCreate(SQLiteDatabase db) // 更新数据库 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 打开数据库 public void onOpen(SQLiteDatabase db) // 得到一个可读SQLiteDatabase对象 public synchronized SQLiteDatabase getReadableDatabase() // 得到一个可写SQLiteDatabase对象 public synchronized SQLiteDatabase getWriteableDatabase() ②SQLiteDatabase 数据库访问类:执行对数据库的插入记录、查询记录等操作。 [java] execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。 columns:要查询出来的列名。相当于select语句select关键字后面的部分。 selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?” selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 groupBy:相当于select语句group by关键字后面的部分 having:相当于select语句having关键字后面的部分 orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。 //还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常设置为null ContentValues values // 待插入的数据 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的内容 String whereClause, // 选择通过哪个字段来更新 String [] whereArgs // 为whereClause字段要查询的值 ) execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法可以执行select语句。 query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit) table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。 columns:要查询出来的列名。相当于select语句select关键字后面的部分。 selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?” selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。 groupBy:相当于select语句group by关键字后面的部分 having:相当于select语句having关键字后面的部分 orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc; limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。 //还有两个,网上貌似都用的比较少,而我们这个例子中采用的是这些: public long insert( String table, // 待插入的表名 String nullColumnHack, // 通常设置为null ContentValues values // 待插入的数据 ) public int update( String table, // 待更新的表名 ContentValues values, // 待更新的内容 String whereClause, // 选择通过哪个字段来更新 String [] whereArgs // 为whereClause字段要查询的值 ) ③下面为网上常用的访问数据库的一般流程: [java] public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4}); db.close(); }; public void onClick(View v) { DatabaseHelper databaseHelper = new DatabaseHelper(HelloActivity.this); SQLiteDatabase db = databaseHelper.getWritableDatabase(); db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4}); db.close(); }; 二.编程实现: 1. 界面编辑(reslayoutmain.xml): [java] android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > android:text="创建数据库" android:id="@+id/ButtonCreate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="增加数据" android:id="@+id/ButtonInsert" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="更新数据" android:id="@+id/ButtonUpdate" android:layout_width="fill_parent" android:layout_height="wrap_content"> android:text="查询数据" android:id="@+id/ButtonQuery" android:layout_width="fill_parent" android:layout_height="wrap_content"> 定义了一个垂直方向上的线性布局,及各操作的按钮,水平方向充满父窗口,垂直方向与内容等高。 界面布局效果如下: 2. 代码编辑(srcwyfzclMyActivity.java): [java] package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相关包 import android.app.Activity; //引入相关包 import android.content.ContentValues; //引入相关包 import android.database.Cursor; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.os.Bundle; //引入相关包 import android.view.View; //引入相关包 import android.widget.Button; //引入相关包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //创建数据库按钮 private Button insertBut; //增加数据库记录按钮 private Button updateBut; //更新数据库记录按钮 private Button queryBut; //查询数据库记录按钮 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //实例化创建数据库按钮 insertBut=(Button)findViewById(R.id.ButtonInsert); //实例化插入数据库按钮 updateBut=(Button)findViewById(R.id.ButtonUpdate); //实例化更新数据库按钮 queryBut=(Button)findViewById(R.id.ButtonQuery); //实例化查询数据库按钮 createButton.setOnClickListener(new View.OnClickListener() {//创建数据库时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Toast.makeText(MyActivity.this, "创建或打开数据库", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加数据库记录时调用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues对象 cv.put("uid", 1); //放入键值对,键要与列名一致,值要与列的数据类型一致 cv.put("uname", "zcl"); //放入键值对,键要与列名一致,值要与列的数据类型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "插入记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 sld.insert("sqlitetest", null, cv);//增加数据库记录 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //创建数据库 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 ContentValues cv = new ContentValues(); //得到ContentValues对象 Toast.makeText(MyActivity.this, "更新记录", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新数据库记录 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查询数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "查询记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //打印输出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } package wyf.zcl; import wyf.zcl.sqlitedb.SqLiteDBHelper; //引入相关包 import android.app.Activity; //引入相关包 import android.content.ContentValues; //引入相关包 import android.database.Cursor; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.os.Bundle; //引入相关包 import android.view.View; //引入相关包 import android.widget.Button; //引入相关包 import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; //创建数据库按钮 private Button insertBut; //增加数据库记录按钮 private Button updateBut; //更新数据库记录按钮 private Button queryBut; //查询数据库记录按钮 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton=(Button)findViewById(R.id.ButtonCreate); //实例化创建数据库按钮 insertBut=(Button)findViewById(R.id.ButtonInsert); //实例化插入数据库按钮 updateBut=(Button)findViewById(R.id.ButtonUpdate); //实例化更新数据库按钮 queryBut=(Button)findViewById(R.id.ButtonQuery); //实例化查询数据库按钮 createButton.setOnClickListener(new View.OnClickListener() {//创建数据库时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 System.out.println("create or open database success!"); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Toast.makeText(MyActivity.this, "创建或打开数据库", Toast.LENGTH_SHORT).show(); }}); insertBut.setOnClickListener(new View.OnClickListener() {//增加数据库记录时调用 @Override public void onClick(View v) { ContentValues cv=new ContentValues(); //得到ContentValues对象 cv.put("uid", 1); //放入键值对,键要与列名一致,值要与列的数据类型一致 cv.put("uname", "zcl"); //放入键值对,键要与列名一致,值要与列的数据类型一致 SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "插入记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 sld.insert("sqlitetest", null, cv);//增加数据库记录 System.out.println("success insert a new content!"); }}); updateBut.setOnClickListener(new View.OnClickListener() { //更新数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1); //创建数据库 SQLiteDatabase sld=dh.getWritableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 ContentValues cv = new ContentValues(); //得到ContentValues对象 Toast.makeText(MyActivity.this, "更新记录", Toast.LENGTH_SHORT).show(); cv.put("uname", "zcl_update"); sld.update("sqlitetest", cv, "uid=?", new String[]{"1"});//更新数据库记录 System.out.println("success updata the content!"); }}); queryBut.setOnClickListener(new View.OnClickListener() { //查询数据库记录时调用 @Override public void onClick(View v) { SqLiteDBHelper dh=new SqLiteDBHelper(MyActivity.this,"testdb",null,1);//创建数据库 Toast.makeText(MyActivity.this, "查询记录", Toast.LENGTH_SHORT).show(); SQLiteDatabase sld=dh.getReadableDatabase(); //得到一个SQLiteDatabase对象,用于操控数据库 Cursor cursor=sld.query("sqlitetest", new String[]{"uid","uname"}, "uid=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ //打印输出 String name=cursor.getString(cursor.getColumnIndex("uname")); System.out.println("query result:"+name); }}}); } } (.java): [java] package wyf.zcl.sqlitedb; import android.content.Context; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.database.sqlite.SQLiteOpenHelper; //引入相关包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相关包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//继承SQLiteOpenHelper的类,必须有该构造函数 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库时调用,此方法是在调用了getReadableDatabase()或getWritableDatabase()后才调用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升级数据库时掉用 } } package wyf.zcl.sqlitedb; import android.content.Context; //引入相关包 import android.database.sqlite.SQLiteDatabase; //引入相关包 import android.database.sqlite.SQLiteOpenHelper; //引入相关包 import android.database.sqlite.SQLiteDatabase.CursorFactory;//引入相关包 public class SqLiteDBHelper extends SQLiteOpenHelper{ public SqLiteDBHelper(Context context, String name, CursorFactory factory, int version) {//继承SQLiteOpenHelper的类,必须有该构造函数 super(context, name, factory, version); } @Override public void onCreate(SQLiteDatabase db) { //创建数据库时调用,此方法是在调用了getReadableDatabase()或getWritableDatabase()后才调用 db.execSQL("create table sqlitetest(uid long,uname varchar(25))"); System.out.println("already create a database:sqlitetest."); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //升级数据库时掉用 } }

❾ Android开发 sqlite作用

SQLite简介
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:

1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
Android中的SQLite使用
首先创建数据库类

public class DatabaseHelper extends SQLiteOpenHelper {

private static final String DB_NAME = "mydata.db"; //数据库名称
private static final int version = 1; //数据库版本

public DatabaseHelper(Context context) {
super(context, DB_NAME, null, version);
// TODO Auto-generated constructor stub
}

@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table user(username varchar(20) not null , password varchar(60) not null );";
db.execSQL(sql);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}

}

SQLiteOpenHelper类介绍
SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本的更新。一般是建立一个类继承它,并实现它的onCreate和onUpgrade方法。

方法名
方法描述

SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version) 构造方法,一般是传递一个要创建的数据库名称那么参数
onCreate(SQLiteDatabase db) 创建数据库时调用
onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion) 版本更新时调用
getReadableDatabase() 创建或打开一个只读数据库
getWritableDatabase() 创建或打开一个读写数据库
下面来介绍调用的方法
创建数据库
这里特别的地方是通过调用了SQLiteOpenHelper类的getReadableDatabase()方法来实现创建一个数据库的

1
2
3

DatabaseHelper database = new DatabaseHelper(this);//这段代码放到Activity类中才用this
SQLiteDatabase db = null;
db = database.getReadalbeDatabase();

SQLiteDatabase类为我们提供了很多种方法,而较常用的方法如下

(返回值)方法名
方法描述

(int) delete(String table,String whereClause,String[] whereArgs) 删除数据行的便捷方法
(long) insert(String table,String nullColumnHack,ContentValues values) 添加数据行的便捷方法
(int) update(String table, ContentValues values, String whereClause, String[] whereArgs) 更新数据行的便捷方法
(void) execSQL(String sql) 执行一个SQL语句,可以是一个select或其他的sql语句
(void) close() 关闭数据库
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 查询指定的数据表返回一个带游标的数据集
(Cursor) rawQuery(String sql, String[] selectionArgs) 运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别就是防止SQL注入)
数据的添删改查分别可以通过2种途径来实现
数据的添加
1.使用insert方法

1
2
3

ContentValues cv = new ContentValues();//实例化一个ContentValues用来装载待插入的数据cv.put("username","Jack Johnson");//添加用户名
cv.put("password","iLovePopMusic"); //添加密
db.insert("user",null,cv);//执行插入操作

2.使用execSQL方式来实现

1
2

String sql = "insert into user(username,password) values ('Jack Johnson','iLovePopMuisc');//插入操作的SQL语句
db.execSQL(sql);//执行SQL语句

数据的删除
同样有2种方式可以实现

1
2
3

String whereClause = "username=?";//删除的条件
String[] whereArgs = {"Jack Johnson"};//删除的条件参数
db.delete("user",whereClause,whereArgs);//执行删除

使用execSQL方式的实现

1
2

String sql = "delete from user where username='Jack Johnson'";//删除操作的SQL语句
db.execSQL(sql);//执行删除操作

数据修改
同上,仍是2种方式

1
2
3
4
5

ContentValues cv = new ContentValues();//实例化ContentValues
cv.put("password","iHatePopMusic");//添加要更改的字段及内容
String whereClause = "username=?";//修改条件
String[] whereArgs = {"Jack Johnson"};//修改条件的参数
db.update("user",cv,whereClause,whereArgs);//执行修改

使用execSQL方式的实现

1
2

String sql = "update [user] set password = 'iHatePopMusic' where username='Jack Johnson'";//修改的SQL语句
db.execSQL(sql);//执行修改

数据查询
数据查询相对前面几种方法就复杂一些了,因为查询会带有很多条件
通过query实现查询的
public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
各参数说明:
table:表名称
colums:列名称数组
selection:条件子句,相当于where
selectionArgs:条件语句的参数数组
groupBy:分组
having:分组条件
orderBy:排序类
limit:分页查询的限制
Cursor:返回值,相当于结果集ResultSet
针对游标(Cursor)也提供了不少方法

方法名称
方法描述

getCount() 总记录条数
isFirst() 判断是否第一条记录
isLast() 判断是否最后一条记录
moveToFirst() 移动到第一条记录
moveToLast() 移动到最后一条记录
move(int offset) 移动到指定的记录
moveToNext() 移动到吓一条记录
moveToPrevious() 移动到上一条记录
getColumnIndex(String columnName) 获得指定列索引的int类型值
实现代码

1
2
3
4
5
6
7
8

Cursor c = db.query("user",null,null,null,null,null,null);//查询并获得游标
if(c.moveToFirst()){//判断游标是否为空
for(int i=0;i<c.getCount();i++){
c.move(i);//移动到指定记录
String username = c.getString(c.getColumnIndex("username");
String password = c.getString(c.getColumnIndex("password"));
}
}

通过rawQuery实现的带参数查询

1
2
3
4

Cursor c = db.rawQuery("select * from user where username=?",new Stirng[]{"Jack Johnson"});
if(cursor.moveToFirst()) {
String password = c.getString(c.getColumnIndex("password"));
}

❿ Android编程中如何在一个SQLite数据库创建两个表

完全可以的.

SQLiteDatabase.insert(String
table, String
nullColumnHack, ContentValues
values)

db的插入,查询,删除函数的第一个参数就是table_name,就可以对指定的表进行操作

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:647
制作脚本网站 发布:2025-10-20 08:17:34 浏览:939
python中的init方法 发布:2025-10-20 08:17:33 浏览:634
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:823
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:734
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1069
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:302
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:163
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:855
python股票数据获取 发布:2025-10-20 07:39:44 浏览:765