当前位置:首页 » 安卓系统 » androidsqlite更新数据库

androidsqlite更新数据库

发布时间: 2022-06-11 20:00:10

Ⅰ android导入外部sqlite数据库 外部数据库后来有更新怎么同步到android上

1、 自己写一个方法,点击或者启动的时候,采用JDBC一条条的取数据来同步。如果有时间戳的列,那么你很好同步。 2. 我们采用的是,Local和服务器都采用SQLLite。需要同步的时候,直接把服务器的DB文件给拷贝下来,放到Local就可以了。至于提交到

Ⅱ Android数据库SQLiteDatabase的update方法,whereClause参数怎么添加多个条件

1. ACID事务

2. 零配置 – 无需安装和管理配置

3.储存在单一磁盘文件中的一个完整的数据库

4.数据库文件可以在不同字节顺序的机器间自由的共享

5.支持数据库大小至2TB

6. 足够小, 大致13万行C代码, 4.43M

7. 比一些流行的数据库在大部分普通数据库操作要快

8. 简单, 轻松的API

9. 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定

10. 良好注释的源代码, 并且有着90%以上的测试覆盖率

11. 独立: 没有额外依赖

12. 源码完全的开源, 你可以用于任何用途, 包括出售它

13. 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等

SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:

ATTACH DATABASE

BEGIN TRANSACTION

comment

COMMIT TRANSACTION

COPY

CREATE INDEX

CREATE TABLE

CREATE TRIGGER

CREATE VIEW

DELETE

DETACH DATABASE

DROP INDEX

DROP TABLE

DROP TRIGGER

DROP VIEW

END TRANSACTION

EXPLAIN

expression

INSERT

ON CONFLICT clause

PRAGMA

REPLACE

ROLLBACK TRANSACTION

SELECT

UPDATE

同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite 支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。到2013年10月17日最新版本是 3.8.1 。能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士.

Ⅲ 如何在android中使用sqlite数据库

android 中SQliteDatabase数据库使用SQLiteOpenHelper辅助类来创建SQLite数据库视图,如下代码:
create view 表名 as 定义

SQLiteOpenHelper类是一个辅助类,用于创建或打开数据库。
该类的使用方法一般是自定义一个子类,继承自SQLiteOpenHelper,并覆写其中最关键的两个方法:onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)。当新建一个数据库时会调用前者,一般在里面做一些创建表或视图的操作。数据库版本升级时则会调用后者。
定义好子类后(假如叫SqlHelper),只要调用SqlHelper对象的getReadableDatabase()方法或getWritableDatabase()方法即可返回一个SQLiteDatabase对象。如果是第一次调用,则会创建数据库。随后可使用SQLiteDatabase对象的方法进行数据操作,如:execSQL(), insert(), update(), query(), rawQuery(), delete()等。

Ⅳ android sqlitedatabase update 成功与否

Android 不自动提供数据库。

在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。

SQLiteOpenHelper 的子类,至少需要实现三个方法:


构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。


onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:

public class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
{
super(context, name, cursorFactory, version);
}

@Override

public void onCreate(SQLiteDatabase db) {

// TODO 创建数据库后,对数据库的操作

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO 更改数据库版本的操作

}
super.onOpen(db);
// TODO 每次成功打开数据库后首先被执行

}
}
复制代码
接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

db=(new DatabaseHelper(getContext())).getWritableDatabase();

return (db == null) ? false : true;
复制代码
上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。
当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

至少需要实现三个方法:
构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:

public class DatabaseHelper extends SQLiteOpenHelper {

DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version)
{
super(context, name, cursorFactory, version);
}

@Override

public void onCreate(SQLiteDatabase db) {

// TODO 创建数据库后,对数据库的操作

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

// TODO 更改数据库版本的操作

}
super.onOpen(db);
// TODO 每次成功打开数据库后首先被执行

}
}
复制代码
接下来讨论具体如何创建表、插入数据、删除表等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容:

db=(new DatabaseHelper(getContext())).getWritableDatabase();

return (db == null) ? false : true;
复制代码
上面这段代码会返回一个 SQLiteDatabase 类的实例,使用这个对象,你就可以查询或者修改数据库。
当你完成了对数据库的操作(例如你的 Activity 已经关闭),需要调用 SQLiteDatabase 的 Close() 方法来释放掉数据库连接。

Ⅳ 安卓 怎么强制刷新sqlite数据库

0、本质上是listview绑定Adapter,Adapter关联List,因此List变化后导致Adapter同步变化;再通过调用adapter.notifyDataSetChanged();方法使得listview界面自动更新。操作:1、ListstrName=newArrayList();//实际的数据源2、Adapteradap

Ⅵ android怎么操作sqlite数据库

SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.

Android 开发中使用 SQLite 数据库
Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。
创建数据库
Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

Ⅶ android SQLiteDatabase中的update函数用法

创建数据库
Android
不自动提供数据库。在
Android
应用程序中使用
SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android
提供了
SQLiteOpenHelper
帮助你创建一个数据库,你只要继承
SQLiteOpenHelper
类,就可以轻松的创建数据库。SQLiteOpenHelper
类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper
的子类,至少需要实现三个方法:
构造函数,调用父类
SQLiteOpenHelper
的构造函数。这个方法需要四个参数:上下文环境(例如,一个
Activity),数据库名字,一个可选的游标工厂(通常是
Null),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个
SQLiteDatabase
对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrage()
方法,它需要三个参数,一个
SQLiteDatabase
对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。
下面示例代码展示了如何继承
SQLiteOpenHelper
创建数据库:
public
class
DatabaseHelper
extends
SQLiteOpenHelper
{
DatabaseHelper(Context
context,
String
name,
CursorFactory
cursorFactory,
int
version)
{

super(context,
name,
cursorFactory,
version);
}
@Override
public
void
onCreate(SQLiteDatabase
db)
{
//
TODO
创建数据库后,对数据库的操作
}
@Override
public
void
onUpgrade(SQLiteDatabase
db,
int
oldVersion,
int
newVersion)
{
//
TODO
更改数据库版本的操作
}
super.onOpen(db);
//
TODO
每次成功打开数据库后首先被执行
}
}
复制代码
接下来讨论具体如何创建表、插入数据、删除表等等。调用
getReadableDatabase()

getWriteableDatabase()
方法,你可以得到
SQLiteDatabase
实例,具体调用那个方法,取决于你是否需要改变数据库的内容:
db=(new
DatabaseHelper(getContext())).getWritableDatabase();
return
(db
==
null)
?
false
:
true;
复制代码
上面这段代码会返回一个
SQLiteDatabase
类的实例,使用这个对象,你就可以查询或者修改数据库。
当你完成了对数据库的操作(例如你的
Activity
已经关闭),需要调用
SQLiteDatabase

Close()
方法来释放掉数据库连接。

Ⅷ 如何升级 sqlite

ndroid SQLite 客户端数据库升级
一,前言
没有采用Android自身提供的那一套数据库操作方式。而是想对SQLite数据库文件有更全面的控制,包括随时导出数据库文件修改表结构,增删数据等等。这样一来虽然在开放中得到不少便利,但是也带来了数据库升级的一些问题。
后来不得已采用了一种方案,可以解决问题,现将方案的全部实现细节记录下来。最后也会提出一些我认为有问题的地方。
二,数据库文件拷贝
程序不负责数据库的创建,SQLite数据库文件是在外部创建好的。程序启动阶段拷贝进SD卡。以达到对数据库结构的全面控制。 数据库文件存放位置见附件图片。
Java代码
1. public void DBFile() { 2. // 数据库路径
3. if (!FileOperator.checkFile(SysConst.DB_PATH)) {
4. boolean result = FileOperator.write2Sdcard(activity, 5. R.raw.scpip_collection, SysConst.DB_PATH); 6. Debug.log("无数据库文件,首次拷贝" + result); 7. if (!result) {
8. throw new IllegalAccessError(activity
9. .getString(R.string._db_exception)); 10. } else {
11. // 拷贝成功,更新数据库版本 12. try {
13. PackageInfo info = activity.getPackageManager() 14. .getPackageInfo(activity.getPackageName(), 0); 15. // 当前程序版本号,在AndroidManifest.xml中定义 16. int versionCode = info.versionCode; 17. Config.saveDbVer(versionCode); 18. Debug.log("拷贝成功" + result); 19. } catch (NameNotFoundException e) { 20. Debug.e(e); 21. } 22. } 23. } else {
24. // 数据库已存在的情况
25. if (dbUpdate.needUpdate() ) {
26. activity.showProgress("数据库升级中,请稍后", false); 27. new Thread() {
@Override
29. public void run() { 30. try {
31. Debug.log("update db"); 32. dbUpdate.updateDb();
33. handler.sendEmptyMessage(0); 34. } catch (Exception e) { 35. Debug.e(e);
36. handler.sendEmptyMessage(-1); 37. } 38. }; 39. }.start(); 40. } 41. } 42. }
其中有几个要点:
1、检测数据库文件是否已经存在。不存在则从raw文件夹复制数据库文件拷贝至SD卡中指定目录。
2、数据库版本是根据应用的versionCode相同。拷贝数据库后,会把当前versionCode写入数据库的表中。
Xml代码

1. <manifest
2. xmlns:android="http //schemas android com/apk/res/android" 3. package="com.xxx" 4. android:versionCode="2"
5. android:versionName="1.01.001"> 6. <uses-sdk android:minSdkVersion="8" />
versionCode在AndroidManifest.xml文件中。
在这种方案下,实际上是由versionCode控制数据库版本,versionName控制程序版本。 3、SD卡指定目录已经存在数据库文件的情况,则读取其中保存的数据库版本号,与versionCode对比,从而确定是否需要升级数据库。代码如下:
Java代码

1. public boolean needUpdate() {
2. int currVer = Config.getDbVer(); 3. return currVer < getAppVersion(); 4. } 5.
6. public int getAppVersion(){ 7. try {
8. PackageInfo info = context.getPackageManager().getPackageInfo(
9. context.getPackageName(), 0);
10. // 当前程序版本号,在AndroidManifest.xml中定义 11. return info.versionCode; 12. } catch (NameNotFoundException e) { 13. Debug.e(e); 14. return 1; 15. } 16. }

三,升级数据库
包括三个步骤:
1、从程序中拷贝新数据库文件至SD卡指定目录,命名为temp.db。
Java代码

1. String temp = SysConst.DB_FOLDER + "temp.db";
2. boolean s1 = FileOperator.write2Sdcard(context, R.raw.scpip_collection,tem
p);

2、分别获取两个数据源。
Java代码

1. //原数据库文件
2. BaseDao sd = new BaseDao(); 3. //新数据库文件
4. BaseDao nd = new BaseDao(temp);
对于SQLite数据库来讲,数据源就是数据库文件。BaseDao是自己封装的,关键在于要可以配置不同的数据源 具体实现的相关代码如下:
Java代码

1. private String dbPath;
2.
3. public BaseDao() {} 4.
5. public BaseDao(String dbPath) { 6. this.dbPath = dbPath; 7. } 8.
9. ublic SQLiteDatabase getDb() {
10. return SQLiteDatabase.openDatabase(SysConst.DB_PATH, null, 11. SQLiteDatabase.OPEN_READWRITE); 12. } 13.
14. public SQLiteDatabase getDb(String dbPath) {

15. return SQLiteDatabase.openDatabase(dbPath, null, 16. SQLiteDatabase.OPEN_READWRITE); 17. }

这样就可以根据文件,获取不同的SQLiteDatabase 对象。
3、传输数据
把原数据库中的数据查询出来,插入到新数据库中。
Java代码

1. public <E>void transfer(BaseDao sd,BaseDao nd,Class<E> cls) throws Exception
{
2. List<E> list = sd.find(cls, null); 3. nd.batchInsert(list); 4. }

这里有两个要点,
第一,使用了自行封装的ORM。
第二,使用了SQLite批量插入,增加写入效率。代码如下:
Java代码

1. @Override
2. public <T> void batchInsert(List<T> datas) throws Exception { 3. SQLiteDatabase dba = null; 4. if(dbPath == null){ 5. dba = getDb(); 6. } else {
7. dba = getDb(dbPath); 8. }
9. int size = datas.size(); 10. try {
11. dba.beginTransaction();
12. for (int i = 0; i < size; i++) {
13. DaoHelper helper = new DaoHelper(datas.get(i)); 14. String tableName = helper.getTableName();
15. String sql = "select 1 from " + tableName + " where " 16. + helper.getPkCol() + "="; 17. Object id = helper.getPkValue(); 18. if (id instanceof String) { 19. sql = sql + "'" + id + "'"; 20. } else {
21. sql = sql + id; 22. }

23. c = dba.rawQuery(sql, null);
24. if (c != null ? (c.getCount() == 1) : false) { 25. c.close(); 26. continue; 27. }
28. if(c != null){ 29. c.close(); 30. }
31. // SqlArgs sa = helper.prepareInsert(); 32. // dba.execSQL(sa.getSql(), sa.getArgs());
33. dba.insert(helper.getTableName(), "", helper.getInsertConten
t());
34. }
35. dba.setTransactionSuccessful(); 36. dba.endTransaction(); 37. } finally { 38. dba.close(); 39. } 40. }

4、写入当前数据库版本,即从程序获得的versionCode。 5、删除原数据库文件,重命名temp.db。 完整过程如下:
Java代码

1. public void updateDb() throws Exception { 2. //1,写入新的数据库文件,命名为temp
3. String temp = SysConst.DB_FOLDER + "temp.db";
4. boolean s1 = FileOperator.write2Sdcard(context, R.raw.scpip_collecti
on,temp);
5. Debug.log("s1:" + s1); 6. if(s1) {
7. //原数据库文件
8. BaseDao sd = new BaseDao(); 9. //新数据库文件
10. BaseDao nd = new BaseDao(temp); 11. //转移数据 12. //此处代码略
13. //删除原数据库文件,重命名临时数据库文件
14. if(FileOperator.delSdcardFile(SysConst.DB_PATH)){ 15. File file = new File(temp);
16. file.renameTo(new File(SysConst.DB_PATH)); 17. }
18. //此时更新数据库版本

Ⅸ android sqlite数据库的更新

一、使用嵌入式关系型SQLite数据库存储数据
在Android平台上,集成了一个嵌入式关系型数据库——SQLite,SQLite3支持NULL、INTEGER、REAL(浮点数字)、 TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、 char(n)、decimal(p,s) 等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么。例如:可以在Integer类型的字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。 但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段保存除整数以外的数据时,将会产生错误。 另外,在编写CREATE TABLE 语句时,你可以省略跟在字段名称后面的数据类型信息,如下面语句你可以省略name字段的类型信息:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))
SQLite可以解析大部分标准SQL语句,如:
复制代码 代码如下:

查询语句:select * from 表名 where 条件子句 group by 分组字句 having ... order by 排序子句
如: select * from person
select * from person order by id desc
select name from person group by name having count(*)>1
分页SQL与mysql类似,下面SQL语句获取5条记录,跳过前面3条记录
select * from Account limit 5 offset 3 或者 select * from Account limit 3,5
插入语句:insert into 表名(字段列表) values(值列表)。如: insert into person(name, age) values(‘传智',3)
更新语句:update 表名 set 字段名=值 where 条件子句。如:update person set name=‘传智‘ where id=10
删除语句:delete from 表名 where 条件子句。如:delete from person where id=10

二、使用SQLiteOpenHelper对数据库进行版本管理
我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用软件时创建出应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据表结构进行更新。那么,我们如何才能实现在用户初次使用或升级软件时自动在用户的手机上创建出应用需要的数据库表呢?总不能让我们在每个需要安装此软件的手机上通过手工方式创建数据库表吧?因为这种需求是每个数据库应用都要面临的,所以在Android系统,为我们提供了一个名为SQLiteOpenHelper的抽象类,必须继承它才能使用,它是通过对数据库版本进行管理来实现前面提出的需求。

为了实现对数据库版本进行管理,SQLiteOpenHelper类提供了两个重要的方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion),前者用于初次使用软件时生成数据库表,后者用于升级软件时更新数据库表结构。当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调用,一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2(有同学问设置为3行不行?当然可以,如果你愿意,设置为100也行),并且在 onUpgrade()方法里面实现表结构的更新。当软件的版本升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后作出相应的表结构及数据更新。

getWritableDatabase()和 getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但 getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用getWritableDatabase()打开数据库就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。
注意:getWritableDatabase(),getReadableDatabase的区别是当数据库写满时,调用前者会报错,调用后者不会,所以如果不是更新数据库的话,最好调用后者来获得数据库连接。
代码:
复制代码 代码如下:

public class DatabaseHelper extends SQLiteOpenHelper {
//类没有实例化,是不能用作父类构造器的参数,必须声明为静态
private static final String name = "ljqdb"; //数据库名称
private static final int version = 1; //数据库版本
public DatabaseHelper(Context context) {
//第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS person (
personid integer primary key autoincrement, name varchar(20), age INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(" ALTER TABLE person ADD phone VARCHAR(12) NULL "); //往表中增加一列
// DROP TABLE IF EXISTS person 删除表
}
}

在实际项目开发中,当数据库表结构发生更新时,应该避免用户存放于数据库中的数据丢失。
三、使用SQLiteDatabase操作SQLite数据库
Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。execSQL()方法可以执行insert、delete、update和CREATE TABLE之类有更改行为的SQL语句; rawQuery()方法用于执行select语句。
execSQL()方法的使用例子:
复制代码 代码如下:

SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values('林计钦', 24)");
db.close();

执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“林计钦”这些参数值会由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句, 当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。 SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下:
复制代码 代码如下:

SQLiteDatabase db = ....;
db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4});
db.close();

execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。
SQLiteDatabase的rawQuery()用于执行select语句,使用例子如下:
复制代码 代码如下:

SQLiteDatabase db = ....;
Cursor cursor = db.rawQuery("select * from person", null);
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
String name = cursor.getString(1);//获取第二列的值
int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close();

rawQuery()方法的第一个参数为select语句;第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。带占位符参数的select语句使用例子如下:
复制代码 代码如下:

Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"%林计钦%", "4"});

Cursor是结果集游标,用于对结果集进行随机访问,如果大家熟悉jdbc, 其实Cursor与JDBC中的ResultSet作用很相似。使用moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true。另外Cursor 还有常用的moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true )、moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true )和moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true ) 。

除了前面给大家介绍的execSQL()和rawQuery()方法, SQLiteDatabase还专门提供了对应于添加、删除、更新、查询的操作方法: insert()、delete()、update()和query() 。这些方法实际上是给那些不太了解SQL语法的菜鸟使用的,对于熟悉SQL语法的程序员而言,直接使用execSQL()和rawQuery()方法执行SQL语句就能完成数据的添加、删除、更新、查询操作。

Ⅹ android怎么连接sqlite数据库

SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.

Android 开发中使用 SQLite 数据库
Activites 可以通过 Content Provider 或者 Service 访问一个数据库。下面会详细讲解如果创建数据库,添加数据和查询数据库。
创建数据库
Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,你只要继承 SQLiteOpenHelper 类,就可以轻松的创建数据库。SQLiteOpenHelper 类根据开发应用程序的需要,封装了创建和更新数据库使用的逻辑。SQLiteOpenHelper 的子类,至少需要实现三个方法:
构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:333
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:374
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:610
java用什么软件写 发布:2025-05-18 03:56:19 浏览:31
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:940
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:738
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:802
网卡访问 发布:2025-05-18 03:35:04 浏览:510
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371