连真实手机后建立的sqlite建立数据库数据库存放在什么文件夹下面

当前位置:
& Swift - 操作SQLite数据库(引用SQLite3库)
Swift - 操作SQLite数据库(引用SQLite3库)
发布:hangge
阅读:23714
SQLite轻量级数据库在移动应用中使用非常普遍,但是目前的库是C编写的,为了方便使用,对SQLite相关的操作用Swift进行了封装。这个封装代码使用了一个开源项目SQLiteDB,地址是:
重要事项(日):SQLiteBD原作者最后只更新到Swift1.2便停止,说后面不会再更新了,如果使用Xcode7便会报错。我这里在其基础上进行了修改,使其支持Swift2.0。
重要事项(日):SQLiteBD原作者又继续更新了,现在已经完美支持Swift2.0。所以大家可以直接使用,本文使用样例也已同步更新。
重要事项(日):SQLiteBD库已经升级至Swift3,本文使用样例也已同步更新。
下面通过一个样例展示SQlite数据库连接,创建表,查询数据,插入数据等操作。&
1,当输入用户名和手机号,点击保存即可将数据存入数据库&
2,下次启动,自动从数据库中载入初始化信息
操作步骤:
1,在 Build Phases -& Link Binary With Libraries 中点击加号,添加 libsqlite3.0.tbd 到项目中来
2,创建连接头文件Bridging-Header.h
#import "sqlite3.h"
#import &time.h&
3,在项目编译属性里引用头文件
4,导入SQLiteDB的代码(SQLiteDB.swift、SQLTable.swift),代码结构如下:
5,ViewController.swift代码
import UIKit
class ViewController: UIViewController {
var db:SQLiteDB!
@IBOutlet var txtUname: UITextField!
@IBOutlet var txtMobile: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
//获取数据库实例
db = SQLiteDB.shared
//打开数据库
_ = db.openDB()
//如果表还不存在则创建表(其中uid为自增主键)
let result = db.execute(sql: "create table if not exists t_user(uid integer primary key,uname varchar(20),mobile varchar(20))")
print(result)
//如果有数据则加载
initUser()
//点击保存
@IBAction func saveClicked(_ sender: AnyObject) {
saveUser()
//从SQLite加载数据
func initUser() {
let data = db.query(sql: "select * from t_user")
if data.count & 0 {
//获取最后一行数据显示
let user = data[data.count - 1]
txtUname.text = user["uname"] as? String
txtMobile.text = user["mobile"] as? String
//保存数据到SQLite
func saveUser() {
let uname = self.txtUname.text!
let mobile = self.txtMobile.text!
//插入数据库,这里用到了esc字符编码函数,其实是调用bridge.m实现的
let sql = "insert into t_user(uname,mobile) values('\(uname)','\(mobile)')"
print("sql: \(sql)")
//通过封装的方法执行sql
let result = db.execute(sql: sql)
print(result)
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
老代码下载(只支持Swift1.2):
老代码下载(个人修改的支持Swift2.0):
老代码下载(官方支持Swift2):&
最新代码下载(Swift3):
常见问题汇总:
(1)为什么发布程序运行后,会报数据库不存在错误
具体错误信息:“SQLiteDB - failed to copy writable version of DB!
Error - The file “data.db” couldn’t be opened because there is no such file.”
解决办法:你需要在 “工程” -& “Build Phases” -& “Copy Bundle Resources” 中把这个数据库添加进来。这样才能将其随同程序一起部署到手机上。
(2)execute()方法执行后的返回值表示什么
execute() 方法可以用来执行任何非查询的 SQL 语句(INSERT、DELETE、UPDATE、CREATE 等等),其执行后返回的是一个 CInt 类型的值。
返回 0 表示执行失败
返回非 0 表示执行成功 & &(一般是1。如果是 INSERT 命令的话返回的是新插入记录的 ID。DELETE、UPDATE比较特殊,返回的是操作影响的记录数,但如果一条记录都没影响,返回的也是 1。)
(3)如何保存Data数据,比如将图片保存到数据库中?
参考我的另一篇文章:本节引言:
本节我们继续来学习Android数据存储与访问的第三种方式:SQLite数据库,和其他的SQL数据库不同,
我们并不需要在手机上另外安装一个数据库软件,Android系统已经集成了这个数据库,我们无需像
使用其他数据库软件(Oracle,MSSQL,MySql等)又要安装,然后完成相关配置,又要改端口之类的!
引言就说这么多,接下来我们来学习下这个东西~
1.基本概念
1)SQLite是什么?为什么要用SQLite?SQLite有什么特点?
答:下面请听小猪娓娓道来:
①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用,
不仅支持标准SQL语法,还遵循ACID(数据库事务)原则,无需账号,使用起来非常方便!
②前面我们学习了使用文件与SharedPreference来保存数据,但是在很多情况下,
文件并不一定是有效的,如多线程并发访问是相关的;app要处理可能变化的复杂数据结构等等!
比如银行的存钱与取钱!使用前两者就会显得很无力或者繁琐,数据库的出现可以解决这种问题,
而Android又给我们提供了这样一个轻量级的SQLite,为何不用?
③SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象)
虽然只有五种,但是对于varchar,char等其他数据类型都是可以保存的;因为SQLite有个最大的特点:
你可以各种数据类型的数据保存到任何字段中而不用关心字段声明的数据类型是什么,比如你
可以在Integer类型的字段中存放字符串,当然除了声明为主键INTEGER PRIMARY
KEY的字段只能够存储64位整数! 另外, SQLite 在解析CREATE TABLE 语句时,
会忽略 CREATE TABLE 语句中跟在字段名后面的数据类型信息如下面语句会忽略 name字段的类型信息:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))
小结下特点:
SQlite通过文件来保存数据库,一个文件就是一个数据库,数据库中又包含多个表格,表格里又有
多条记录,每个记录由多个字段构成,每个字段有对应的值,每个值我们可以指定类型,也可以不指定
类型(主键除外)
PS:对了,Android内置的SQLite是SQLite 3版本的~
2)几个相关的类:
嘿嘿,学习一些新东西的时候,最不喜欢的莫过于遇到一些新名词,是吧,我们先来说下几个
我们在使用数据库时用到的三个类:
SQLiteOpenHelper:抽象类,我们通过继承该类,然后重写数据库创建以及更新的方法,
我们还可以通过该类的对象获得数据库实例,或者关闭数据库!
SQLiteDatabase:数据库访问类:我们可以通过该类的对象来对数据库做一些增删改查的操作
Cursor:游标,有点类似于JDBC里的resultset,结果集!可以简单理解为指向数据库中某
一个记录的指针!
2.使用SQLiteOpenHelper类创建数据库与版本管理
对于涉及数据库的app,我们不可能手动地去给他创建数据库文件,所以需要在第一次启用app
的时候就创建好数据库表;而当我们的应用进行升级需要修改数据库表的结构时,这个时候就需要
对数据库表进行更新了;对于这两个操作,安卓给我们提供了SQLiteOpenHelper的两个方法,
onCreate( )与onUpgrade( )来实现
方法解析:
onCreate(database):首次使用软件时生成数据库表
onUpgrade(database,oldVersion,newVersion):在数据库的版本发生变化时会被调用,
一般在软件升级时才需改变版本号,而数据库的版本是由程序员控制的,假设数据库现在的
版本是1,由于业务的变更,修改了数据库表结构,这时候就需要升级软件,升级软件时希望
更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2
或者其他与旧版本号不同的数字即可!
代码示例:
public class MyDBOpenHelper extends SQLiteOpenHelper {
public MyDBOpenHelper(Context context, String name, CursorFactory factory,
int version) {super(context, "my.db", null, 1); }
//数据库第一次创建时被调用
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person(personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20))");
//软件版本号发生改变时调用
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL");
代码解析:
上述代码第一次启动应用,我们会创建这个my.db的文件,并且会执行onCreate()里的方法,
创建一个Person的表,他又两个字段,主键personId和name字段;接着如我我们修改db的版本
号,那么下次启动就会调用onUpgrade()里的方法,往表中再插入一个字段!另外这里是插入
一个字段,所以数据不会丢失,如果是重建表的话,表中的数据会全部丢失,下一节我们会
来教大家如何解决这个问题!
流程小结:
Step 1:自定义一个类继承SQLiteOpenHelper类
Step 2:在该类的构造方法的super中设置好要创建的数据库名,版本号
Step 3:重写onCreate( )方法创建表结构
Step 4:重写onUpgrade( )方法定义版本号发生改变后执行的操作
3.如何查看我们生成的db文件
当我们调用上面的MyDBOpenhelper的对象的getWritableDatabase()就会在下述目录下创建我们的db
数据库文件:
我们发现数据库有两个,前者是我们创建的数据库,而后者则是为了能让数据库支持事务而产生的
临时的日志文件!一般的大小是0字节!
而在File Explorer里我们确是打不开文件的,连txt都打不开,何况是.db!
所以下面给大家两条路选:
1.先导出来,然后用SQLite的图形化工具查看
2.配置adb环境变量后,通过adb shell来查看(命令行,装比利器)!
嗯,接着给大家演示上述两种方法,选自己喜欢的一种就可以了~~
方法1:使用SQLite图形化工具查看db文件
这类软件有很多,笔者用的是SQLite Expert Professional,当然你也可以使用其他工具
又需要的可以下载:
把我们的db文件导出到电脑桌面,打开SQLiteExpert,界面如下:
别问我怎么玩,导入db后自己慢慢玩,用法很简单,不懂百度~
至于方法二,本来是想试试的,后来发现sqlite命令找不到,试了几次就算了,
后面用到在细扣,有兴趣可以找下郭霖的《第一行代码——Android》按着流程图试试!
这里只贴前面的一部分,命令部分自己看书!
方法2:adb shell命令行带你装逼带你飞
1.配置SDK环境变量:
右键我的电脑 ——> 高级系统设置 -> 环境变量 -> 新建系统变量 -> 把SDK的platform-tools路径拷贝下:
比如笔者的:C:\Software\Coding\android-sdks-as\platform-tools
确定,然后再找到Path的环境变量,编辑,然后在结尾加上:%SDK_HOME%;
然后打开命令行,输入adb,唰唰唰一堆东西,就说明配置成功了!
——————重点——————:
在执行后续命令行指令之前,针对你的测试的机器可能有几种:
1.原生模拟器:那行,你跳过这里,继续往下
2.Genymotion模拟器:没戏,Genymotion Shell执行不了下述命令
3.真机(已root):那么你打开File Explorer看看data/data/目录下有东西没?没么?
下面提供一个方法,就是先装个RE文件管理器,然后授予RE Root权限,接着来到根目录:
然后长按data目录,会弹出这样的对话框:
接着等他慢慢修改权限,修改完毕后,我们再次打开DDMS的File Explorer,我们可以看到:
好的,可以看到data/data里的东西了!
——————————————————————
2.进入adb shell,接着键入下述指令,来到我们app的databases目录下:
接着依次输入下述指令:
sqlite3 my.db :打开数据库文件
.table 查看数据库中有哪些表
接着你直接输入数据库语句就可以了,比如查询:Select * from person
.schema:查看建表语句
.quit:退出数据库的编辑
.exit:退出设备控制台
...因为system/bin/sh sqlite3: not found,这个问题,后面Sqlite命令的都用不了,
要看效果图就自行查询郭大侠的书吧~而下面我们还是先导出db文件,然后用图形化的
数据库工具来查看!
4.使用Android提供的API操作SQLite
假如你没学过数据库相关的语法,或者你懒,不想写数据库语法,就可以使用Android给我们
提供的操作数据库的一些API方法,下面我们写个简单的例子来掩饰下这些API的用法!
代码示例:
运行效果图:
实现代码:
布局过于简单,就四个Button,就不贴了,直接贴MainActivity.java的代码:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Context mC
private Button btn_
private Button btn_
private Button btn_
private Button btn_
private SQLiteD
private MyDBOpenHelper myDBH
private StringB
private int i = 1;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = MainActivity.
myDBHelper = new MyDBOpenHelper(mContext, "my.db", null, 1);
bindViews();
private void bindViews() {
btn_insert = (Button) findViewById(R.id.btn_insert);
btn_query = (Button) findViewById(R.id.btn_query);
btn_update = (Button) findViewById(R.id.btn_update);
btn_delete = (Button) findViewById(R.id.btn_delete);
btn_query.setOnClickListener(this);
btn_insert.setOnClickListener(this);
btn_update.setOnClickListener(this);
btn_delete.setOnClickListener(this);
public void onClick(View v) {
db = myDBHelper.getWritableDatabase();
switch (v.getId()) {
case R.id.btn_insert:
ContentValues values1 = new ContentValues();
values1.put("name", "呵呵~" + i);
//参数依次是:表名,强行插入null值得数据列的列名,一行记录的数据
db.insert("person", null, values1);
Toast.makeText(mContext, "插入完毕~", Toast.LENGTH_SHORT).show();
case R.id.btn_query:
sb = new StringBuilder();
//参数依次是:表名,列名,where约束条件,where中占位符提供具体的值,指定group by的列,进一步约束
//指定查询结果的排序方式
Cursor cursor = db.query("person", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
int pid = cursor.getInt(cursor.getColumnIndex("personid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
sb.append("id:" + pid + ":" + name + "\n");
} while (cursor.moveToNext());
cursor.close();
Toast.makeText(mContext, sb.toString(), Toast.LENGTH_SHORT).show();
case R.id.btn_update:
ContentValues values2 = new ContentValues();
values2.put("name", "嘻嘻~");
//参数依次是表名,修改后的值,where条件,以及约束,如果不指定三四两个参数,会更改所有行
db.update("person", values2, "name = ?", new String[]{"呵呵~2"});
case R.id.btn_delete:
//参数依次是表名,以及where条件与约束
db.delete("person", "personid = ?", new String[]{"3"});
5.使用SQL语句操作数据库
当然,你可能已经学过SQL,会写相关的SQL语句,而且不想用Android提供的这些API,
你可以直接使用SQLiteDatabase给我们提供的相关方法:
execSQL(SQL,Object[]):使用带占位符的SQL语句,这个是执行修改数据库内容的sql语句用的
rawQuery(SQL,Object[]):使用带占位符的SQL查询操作
另外前面忘了介绍下Curosr这个东西以及相关属性,这里补充下:
——Cursor对象有点类似于JDBC中的ResultSet,结果集!使用差不多,提供一下方法移动查询结果的记录指针:
move(offset):指定向上或者向下移动的行数,整数表示向下移动;负数表示向上移动!
moveToFirst():指针移动到第一行,成功返回true,也说明有数据
moveToLast():指针移动到最后一样,成功返回
moveToNext():指针移动到下一行,成功返回true,表明还有元素!
moveToPrevious():移动到上一条记录
getCount( )获得总得数据条数
isFirst():是否为第一条记录
isLast():是否为最后一项
moveToPosition(int):移动到指定行
使用代码示例:
1.插入数据:
public void save(Person p)
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("INSERT INTO person(name,phone) values(?,?)",
new String[]{p.getName(),p.getPhone()});
2.删除数据:
public void delete(Integer id)
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("DELETE FROM person WHERE personid = ?",
new String[]{id});
3.修改数据:
public void update(Person p)
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
db.execSQL("UPDATE person SET name = ?,phone = ? WHERE personid = ?",
new String[]{p.getName(),p.getPhone(),p.getId()});
4.查询数据:
public Person find(Integer id)
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor =
db.rawQuery("SELECT * FROM person WHERE personid = ?",
new String[]{id.toString()});
//存在数据才返回true
if(cursor.moveToFirst())
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
return new Person(personid,name,phone);
cursor.close();
5.数据分页:
public List&Person& getScrollData(int offset,int maxResult)
List&Person& person = new ArrayList&Person&();
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor =
db.rawQuery("SELECT * FROM person ORDER BY personid ASC LIMIT= ?,?",
new String[]{String.valueOf(offset),String.valueOf(maxResult)});
while(cursor.moveToNext())
int personid = cursor.getInt(cursor.getColumnIndex("personid"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
person.add(new Person(personid,name,phone)) ;
cursor.close();
6.查询记录数:
public long getCount()
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
Cursor cursor =
db.rawQuery("SELECT COUNT (*) FROM person",null);
cursor.moveToFirst();
long result = cursor.getLong(0);
cursor.close();
PS:除了上面获取条数的方法外还可以使用cursor.getCount()方法获得数据的条数,
但是SQL语句要改改!比如SELECT * FROM
本节小结:
本节给大家介绍了Android内置SQLite的基本用法,还是比较简单的,下一节再来研究点稍微
高级一点的东西,SQLite事务,应用更新数据库里数据怎么处理,以及数据库存储大二进制文件
的方法!好的,本节就到这里~
6.3.1 数据存储与访问之——初见SQLite数据库
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
记住登录状态
重复输入密码主题 : sqlite3数据库存放在模拟器的什么位置
级别: 骑士
UID: 75277
可可豆: 2884 CB
威望: 2113 点
在线时间: 1029(时)
发自: Web Page
sqlite3数据库存放在模拟器的什么位置&&&
想问下sqlite3数据库存放在模拟器的什么位置
级别: 骑士
UID: 75277
可可豆: 2884 CB
威望: 2113 点
在线时间: 1029(时)
发自: Web Page
那个document文件夹在哪个位置
级别: 圣骑士
可可豆: 1702 CB
威望: 1682 点
在线时间: 300(时)
发自: Web Page
和你开始设置的路径有关。默认可能是document下。
My Twitter:@ChinaBing一个游走移动的屌丝男
级别: 侠客
可可豆: 709 CB
威望: 709 点
在线时间: 1131(时)
发自: Web Page
代码说话:NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];//取得数据库文件data.db在模拟器/真机上的真实路径NSString *realPath = [documentPath stringByAppendingPathComponent:@&data.db&];NSLog(@&数据库所在路径:%@&, realPath);NSFileManager *fileManager = [NSFileManager defaultManager];//判断文件是否存在if (![fileManager fileExistsAtPath:realPath]) {    NSError *    NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@&data& ofType:@&db&];        //NSLog(@&本地数据库还没创建,从用应用内拷贝一份到本地:%@&, sourcePath);    if (![fileManager copyItemAtPath:sourcePath toPath:realPath error:&error]) {        NSLog(@&%@&,[error localizedDescription]);    }}
级别: 圣骑士
可可豆: 1702 CB
威望: 1682 点
在线时间: 300(时)
发自: Web Page
&&&&NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];这个是你设置的sqlite的路径,是可以改变的。你可以选择别的下面。doucment的东西会在链接iTunes的时候进行同步的。
My Twitter:@ChinaBing一个游走移动的屌丝男
级别: 侠客
可可豆: 709 CB
威望: 709 点
在线时间: 1131(时)
发自: Web Page
回 4楼(bingwa) 的帖子
这个还真没注意,谢谢bingwa的指点~
级别: 骑士
UID: 75277
可可豆: 2884 CB
威望: 2113 点
在线时间: 1029(时)
发自: Web Page
晓得了,晓得啦,谢谢各位大神了
级别: 新手上路
可可豆: 1 CB
威望: 1 点
在线时间: 0(时)
发自: Web Page
默认路径:/Users/用户名/Library/Application Support/iPhone Simulator/模拟器版本/Applications/APP串/Documents如:/Users/selectersky/Library/Application Support/iPhone Simulator/5.0/Applications/440FB51A-74D1-4ECA-BDF6-C8EF1B36D915/Documents
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版SQLite数据库文件保存位置在哪的???_百度知道
SQLite数据库文件保存位置在哪的???
很多资料只说到保存在这个路径下面:&#47如题???还是在本地硬盘的???我是在本地搭建的环境学习android开发的;data/data/your.app.package/databases/your-db-name这个路径在内存中
我有更好的答案
android的数据库是保存在虚拟AVD设备中的吧。(就是你给AVD分配的那块空间里)你用adb连接上AVD设备,在从相应的路径里取出数据库文件。
采纳率:71%
但是你所做的任何修改都会被保存在上述的 镜像文件中。如果你想不打开虚拟机就找到你的数据库文件,可以尝试用 ultraiso 等能够处理镜像文件的工具打开这个文件,我没有试过。不过这样做貌似是没有什么意义的、当虚拟机载入这个镜像中的信息并成功启动后你要找的 sqlite数据库 文件,默认情况下存储在这个位置C:\Documents and Settings\Administrator\;userdata.img这个镜像文件中,不知道这样说你能不能理解。虚拟机,被称为虚拟机就是因为它利用了你当前计算机的硬件资源,模拟出来一个 目的主机,一般情况下你是不能也不应该通过除了虚拟机本身的方式来读取或修改存储在它内部的数据的。
到安卓巴士网站查看回答详情&&gt,你可以理解为你的SQLite数据库文件被读入到了内存中,所以实质上你的数据库文件还是存放在硬盘中的;你的虚拟机名字;avd&#92.android&#92.avd&#47
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【转】android SQLite数据库存储数据 - fangfang的个人空间 - 51Testing软件测试网 51Testing软件测试网-中国软件测试人的精神家园
我的测试人生........
【转】android SQLite数据库存储数据
& 12:25:29
/ 个人分类:
简介  SQLite是轻量级嵌入式引擎,它支持&&语言,并且只利用很少的内存就有很好的性能。&集成了 SQLite 数据库 Android 在运行时(run-time)集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite 数据库。  对于熟悉 SQL 的开发人员来时,在 Android 开发中使用 SQLite 相当简单。但是,由于 JDBC 会消耗太多的系统资源,所以 JDBC 对于这种内存受限设备来说并不合适。因此,Android 提供了一些新的 API 来使用 SQLite 数据库,Android 开发中,程序员需要学使用这些 API。  数据库存储在 data/& 项目文件夹 &/databases/ 下。 Android 开发中使用 SQLite 数据库 Activites 可以通过 Content Provider 或者 Service 访问一个数据库。  创建数据库  创建数据库只要自定义一个类继承SQLiteOpenHelper即可。在SQLiteOpenHelper 的子类,至少需要实现三个方法:  1 构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。  2 onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。  3 onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样你就可以清楚如何把一个数据库从旧的模型转变到新的模型。(Android中数据库升级使用SQLiteOpenHelper类onUpgrade方法说明)  下面示例代码展示了如何继承 SQLiteOpenHelper 创建数据库:public class DBHelper extends SQLiteOpenHelper {// 数据库名称public static final String DBNAME = "crius.db";// 数据库版本public static final int VERSION = 2;public DBHelper(Context c, String dbName) {super(c, DBNAME, null, VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO 创建数据库后,创建表db.execSQL("create table if not exists draftbox(pkid integer primary key autoincrement,formcode varchar(20),date datetime,summary varchar(100), context text, imagefolder varchar(50)) ");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO 更改数据库版本的操作}@Overridepublic void onOpen(SQLiteDatabase db) {super.onOpen(db);// TODO 每次成功打开数据库后首先被执行}}对数据库表进行操作  接下来讨论具体如何插入数据、查询数据、删除数据等等。调用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 实例,具体调用那个方法,取决于你是否需要改变数据库的内容。有两种方法可以对数据库表进行操作:使用execSQL方法执行SQL语句;使用insert、delete、update和query方法,把SQL语句的一部分作为参数。  插入数据:  使用SQLiteDatabase.insert()方法来插入数据:public voidinsert(int formCode, String summary, String context, String folder) {Log.i("SQLite", "----insert----");ContentValues values = new ContentValues();values.put("formcode", formCode);values.put("date", (new TaskDate()).toString());values.put("summary", summary);values.put("context", context);values.put("imagefolder", folder);SQLiteDatabase db = getWritableDatabase();db.beginTransaction();try {&& db.insert("draftbox",null, values);db.setTransactionSuccessful();&&&& } catch (Exception e) {} finally {db.endTransaction();}db.close();}  使用SQLiteDatabase.execSQL()方法来插入数据:public int insert(Person person) {
&&&&Log.i("SQLite", "----insert----");&
&&& SQLiteDatabase db = getWritableDatabase();
&&&&db.beginTransaction();
&&&&try {&
&&&&&&& db.execSQL("insert into " + "draftbox"
&&&&&&&&&&&&&&&& + " values(?, ?, ?, ?)", new Object[] { person.formCode,
&&&&&&&&&&&&&&&& person.summary, person.context, person.folder});
&&&&&&&& db.setTransactionSuccessful();
&&&&} catch (Exception e) {
&&&&&&&& return 0;
&&&&} finally {
&&&&&&&& db.endTransaction();
&&&&db.close();
&&&&return 1;
}&  删除数据:  使用SQLiteDatabase.delete()方法来删除数据(删除所有数据db.delete(&表名&, null, null)):public int delete(Person person) {Log.e("SQLite", "----delete----");SQLiteDatabase db = dbHelper.getWritableDatabase();db.beginTransaction();try {db.delete(Person.TABLENAME , "id"+ "=?", new String[] { person.id});db.setTransactionSuccessful();} catch (Exception e) {return 0;} finally {db.endTransaction();}db.close();return 1;}  使用SQLiteDatabase.execSQL()方法来删除数据:public int delete(Person person) {Log.e("SQLite", "----delete----");SQLiteDatabase db = dbHelper.getWritableDatabase();db.beginTransaction();try {db.execSQL("delete from " + Person.TABLENAME + " where id = ?",new Object[] { person.id });db.setTransactionSuccessful();} catch (Exception e) {return 0;} finally {db.endTransaction();}db.close();return 1;}修改数据:  使用SQLiteDatabase.update()方法来修改数据:public int update(Person person) {&&&&& Log.e("SQLite", "----update----");&&&&& ContentValues values = new ContentValues();&&&& values.put("formcode", person.formCode);&&&& values.put("summary", person.summary);&&&& values.put("context", person.context);&&&& values.put("imagefolder", person.folder);&&&& SQLiteDatabase db = dbHelper.getWritableDatabase();&&&&& db.beginTransaction();&&&&& try {&&&&&&&&& db.update(Person.TABLENAME, values , "id" + "=?",new String[] {person.id});&&&&&&&& db.setTransactionSuccessful();&&&&& } catch (Exception e) {&&&&&&&&& return 0;&&&&& } finally {&&&&&&&&& db.endTransaction();&&&&& }&&&&& db.close();&&&&& return 1;&}&  使用SQLiteDatabase.execSQL()方法来修改数据:public int update(Person person) {&&&&& Log.e("SQLite", "----update----");&&&&& SQLiteDatabase db = dbHelper.getWritableDatabase();&&&&& db.beginTransaction();&&&&& try {&&&&&&&&&& db.execSQL("update " + Person.TABLENAME&&&&&&&&&&&&&&&&&&& + " set formCode=?, summary=?, context=? where id=?", new Object[] {&&&&&&&&&&&&&&&&&&& person.formCode,person.summary, person.context, person.id});&&&&&&&&&& db.setTransactionSuccessful();&&&&& } catch (Exception e) {&&&&&&&&&& return 0;&&&&& } finally {&&&&&&&&&& db.endTransaction();&&&&& }&&&&& db.close();&&&&& return 1;&}&  查询数据:  使用SQLiteDatabase.rawQuery()方法来查询数据:  Cursor c=db.rawQuery( "SELECT formCode,summary,context,imagefolder FROM draftbox WHERE id=? ", person.id);  使用SQLiteDatabase.query()方法来查询数据:/***&* @param table 表名* @param columns 列名字符串数组* @param selection 筛选条件* @param selectionArgs 筛选条件参数数组* @param groupBy 分组字段* @param having&* @param orderBy 排序字段* @return Cursor对象*/public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy); Cursor c=db.query("draftbox" , columns, selection, selectionArgs,groupBy, having, orderBy);不管你如何执行查询,都会返回一个 Cursor,这是 Android 的 SQLite 数据库游标,Cursor 是每行的集合。  使用 moveToFirst() 定位第一行。  你必须知道每一列的名称。  你必须知道每一列的数据类型。  Cursor 是一个随机的数据源。  所有的数据都是通过下标取得。  关于 Cursor 的重要方法:  close()  关闭游标,释放资源  copyStringToBuffer(int columnIndex, CharArrayBuffer buffer)  在缓冲区中检索请求的列的文本,将将其存储  getColumnCount()  返回所有列的总数  getColumnIndex(String columnName)  返回指定列的名称,如果不存在返回-1  getColumnIndexOrThrow(String columnName)  从零开始返回指定列名称,如果不存在将抛出IllegalArgumentException 异常。  getColumnName(int columnIndex)  从给定的索引返回列名  getColumnNames()  返回一个字符串数组的列名  getCount()  返回Cursor 中的行数  moveToFirst()  光标到第一行  moveToLast()  移动光标到最后一行  moveToNext()  移动光标到下一行  moveToPosition(int position)  移动光标到一个绝对的位置  moveToPrevious()  移动光标到上一行  现在让我们看看如何循环 Cursor 取出我们需要的数据:Cursor result=db.rawQuery("SELECT pkid, date, context FROM draftbox",null);result.moveToFirst();&while (!result.isAfterLast()) {&&&&& int id=result.getInt(0);&&&&& String date=result.getString(1);&&&&& //通过字段字取值&&&& String context=result.getString(result.getColumnIndex("context"));&&&&& result.moveToNext();&}result.close();&&  SQLite 数据库管理工具  在 Android 中使用 SQLite 数据库管理工具 在其他数据库上作开发,一般都使用工具来检查和处理数据库的内容,而不是仅仅使用数据库的 API。  使用 Android 模拟器,有两种可供选择的方法来管理数据库。  首先,模拟器绑定了 sqlite3 控制台程序,可以使用 adb
命令来调用他。只要你进入了模拟器的 shell,在数据库的路径执行 sqlite3 命令就可以了。  数据库文件一般存放在: /data/data/&项目文件夹&/databases/&数据库名&如果你喜欢使用更友好的工具,你可以把数据库拷贝到你的开发机上,使用 SQLite-aware 客户端来操作它。这样的话,你在一个数据库的拷贝上操作,如果你想要你的修改能反映到设备上,你需要把数据库备份回去。  把数据库从设备上考出来,你可以使用 adb pull 命令(或者在 IDE 上做相应操作)。  存储一个修改过的数据库到设备上,使用 adb push 命令。 一个最方便的 SQLite 客户端是 FireFox SQLite Manager 扩展,它可以跨所有平台使用。

我要回帖

更多关于 sqlite数据库下载 的文章

 

随机推荐