⑴ 如何用sqlite3
sqlite的安装
1. 首先是下载sqlite,可以该页面下载:http://www.sqlite.org/download.html
当前的最新版本为:sqlite-shell-win32-x86-3070701.zip这个是windows下sqlite的命令行管理工具,用它可以管理sqlite数据库文件
同时最好把文档也下载下来,里面包含了详细的sqlite的使用说明:sqlite-doc-3070701.zip
2.
sqlite无需任何配置和安装,只要将下载下来的shell文件解压到任何你觉得合适的地方,然后将其加入到path环境变量就可以了(加入path环
境变量是为了直接在命令行使用sqlite3,不加的话需要详细的指定sqlite3的路径,如d:/sqlite/sqlite3)。
3. 验证一下是否安装成功。
要想掌握一个软件的使用,最好的方式是使用软件自带的帮助和文档,而不是一直利用google。文档和帮助一般包含了该软件所有的用法,毕竟那是有软件的开发者所写的,他对软件是最了解的。
首先来看一下sqlite的帮助:
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中的命令)
接下来从上到下介绍所有命令的使用:
.backup ?DB? FILE
将数据库文件备份到指定的文件中,默认(在不指定数据库名时)会备份main数据库)
备份生成的文件打开后
.l ON|OFF
设置在遇到错误时就停止sqlite工具的执行,默认时是OFF的。
.databases
列出(当前数据库文件中)附加的所有数据库的名字和文件
.mp ?TABLE1? ?TABLE2? ...
将数据库打印为sql文本格式。如果?TABLE1?指定了,就只打印出名字中包含了TABLE1的数据表。
.echo ON|OFF
在显示的结果前是否显示输入的命令
注意:这个是以column模式显示了,后面会讲到如何将显示方式设置为column
.exit
不解释,退出程序
.explain ?ON|OFF?
开启或关闭适合于的输出模式。不指定ON或OFF时,默认为ON。
.genfkey ?OPTIONS?
OPTIONS有如下几个值:
--no-drop:不删除旧的外键触发器
--ignore-error:忽略表的外键错误
--exec:立即执行生成的sql语句
这个应该是设置在违反外键约束时,sqlite如何做。具体的没尝试。
.headers ON|OFF
是否显示表头
.mode MODE ?TABLE?
设置输出模式,当?TABLE?指定时,就是该输出模式只应该在该表的输出上
.header on时的各输出模式
.header off时的各输出模式
.help
显示帮助
.import FILE TABLE
读取文件中的数据插入到指定表中
注意这里的分隔符.separator是\t,所以data.txt中是以tab分隔的,默认的是,(此时就是2,yuan2,2)
indices ?TABLE?
显示指定表的所有索引。表没指定时,显示所有索引。
.load FILE ?ENTRY?
加载一个外部库文件
.log FILE|off
开启或关闭日志功能。
关闭:.log off
开启,并将日志输出到标准输出流:.log stdout
开启,并将日志输出到标准错误六:.log stderr
开启,并将日志输出到指定文件:.log d:/sqlite3/log.txt
nullvalue STRING
值为NULL时,显示的字符串。默认为""
.output FILENAME
将所有的输出都输出到指定文件
.output stdout
将所有的输出都输出到标准输出流(默认就是),就是输出到控制台上
.prompt MAIN CONTINUE
替换标准的提示。未尝试
.quit
不解释,同.exit,退出程序。
.read FILENAME
执行指定文件中的sql语句
.restore ?DB? FILE
从备份文件中还原数据库。默认是还原main数据库。
1. 首先我们先备份的main数据库
2. 然后将数据删除
3. 然后在还原main数据库,看数据是否还原成功
.schema ?TABLE?
显示指定表的创建语句。表未指定时,显示所有表的创建语句。
因为之前创建了索引,所以包含索引创建语句。
.separator STRING
设置输出模式.mode和导入数据.import的分隔符。
.show
显示当前的设置。
.tables ?TABLE?
列出所有表名。
.timeout MS
只在指定的毫秒内尝试打开锁定的表,而不是一直尝试打开。
.width NUM1 NUM2 ...
设置.mode column中每个列的宽度。每个列默认的宽度是10个字符,过长时会被截断。
第一列设为1个字符,第二列设为0表示保持不变,第三类不设置也是保持不变
.timer ON|OFF
是否开启cpu耗时度量。
⑵ android系统sqlite数据库文件怎么打开
工具/原料
SQLite Expert Professional
方法/步骤
安装SQLite Expert Professional 可以在网上下载,我下载的是试用版,没有找注册码,但是试用不影响使用,反正用几次查看到数据库操作没有错误就不用这个工具了。当然也可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。先介绍使用DDMS导出sqlite数据库的操作和使用adb工具访问sqlite数据库。
首先打开android项目的调试模式,然后找到显示DDMS
切换到DDMS,显示File Explorer窗口,找到/data/data/ 如下图1 ,
然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了。选择将其导出。如下图2.
这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如SQLite Expert Professional可以打开该数据库了。其他 sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager也可以打开该数据库。
使用adb工具访问sqlite数据库
Android Debug Bridge(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管理模式了。
如下图
设置sqlite环境变量:
在android的sdk中自带了sqlite3.exe,这是sqlite的官方管理工具,它是一个命令行工具。为了使用方便,将其路径注册到系 统环境变量path中,即将;%Android_Home%加在Path中,这样只样运行sqlite3,就能直接打开sqlite管理工具了。
如下图:
使用sqlite管理数据库:
sqlite命令行工具默认是以;结束语句的。所以如果只是一行语句,要在末尾加;,或者在下一行中键入;,这样sqlite命令才会被执行。
sqlite常用命令:
.tables--查看数据库的表列表
.exit--退出sqlite命令行
其他命令可随时.help查看帮助。sql命令可直接在此命令行上执行即可:
如下图:
⑶ 开发SQLite数据库有哪些常用的管理工具
然后找到自己用的程序包的文件夹,打开databases,就看到sqlite数据库文件了,然后到处就可以了。步骤上面标注好了,1,2,3。这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如sqlite
administrator、sqlite
man或者firefox插件sqlite
manager等打开就可以了。
⑷ 如何使用sqlite 数据库文件
在我几个Android应用中,我需要访问已有的数据库。这些数据库往往很大,甚至超过asset文件大约1兆字节的限制。而且在新的版本中数据库需要更新。我在网上,特别是StackOverflow看了一些文章,并做了一些试验,觉得下面的代码能基本上满足我的需求。
其主要思路是:
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) {
⑸ 怎么使用SQLiteStudio来管理Sqlite数据库
下载sqliteStudio,解压,如图,打开sqliteStudio.exe
即可使用
打开,如图
新建数据库,点击database-add
database
输入数据库名,点击OK
点击数据名,在Table
右击,然后create
a
table
设置数据库的如图所示,大家可以详细的了解了。
⑹ 如何设置sqlite
您好!很高兴为你解答此类问题,具体方法请看以下:
1.SQLite简介
SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mysql、PostgreSQL这两款开源世界着名的数据库管理系统来讲,它的处理速度比他们都快。
2.SQLite的特点:
轻量级
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态 库,就可以享受它的全部功能。
而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。
不需要"安装"
SQLite的核心引擎本身不依赖第三方的软件,使用它也不需要"安装"。有点类似那种绿色软件。
单一文件
数据库中所有的信息(比如表、视图等)都包含在一个文件内。这个文件可以自由复制到其它目录或其它机器上。
跨平台/可移植性
除了主流操作系统 windows,linux之后,SQLite还支持其它一些不常用的操作系统。
弱类型的字段
同一列中的数据可以是不同类型
开源
3.SQLite数据类型
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:
NULL: 这个值为空值
VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。
CHAR(n):长度固定为n的字串,n不能超过 254。
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改 变格式。
DATA :包含了 年份、月份、日期。
TIME: 包含了 小时、分钟、秒。
二.SQLiteDatabase的介绍
Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面是SQLiteDatabase的常用方法。
SQLiteDatabase的常用方法
方法名称
方法表示含义
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)
打开或创建数据库
insert(String table,String nullColumnHack,ContentValues values)
插入一条记录
delete(String table,String whereClause,String[] whereArgs)
删除一条记录
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)
查询一条记录
update(String table,ContentValues values,String whereClause,String[] whereArgs)
修改记录
execSQL(String sql)
执行一条SQL语句
close()
关闭数据库
Google公司命名这些方法的名称都是非常形象的。例如openOrCreateDatabase,我们从字面英文含义就能看出这是个打开或创建数据库的方法
1、打开或者创建数据库
在Android 中使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库。
它会自动去检测是否存在这个数据库,如果存在则打开,不存在则创建一个数据库;创建成功则返回一个SQLiteDatabase对象,否则抛出异常FileNotFoundException。
下面是创建名为“stu.db”数据库的代码:
openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)
参数1 数据库创建的路径
参数2 一般设置为null就可以了
eg: db=SQLiteDatabase.openOrCreateDatabase("/data/data/com.ling.db/databases/stu.db",null);
2、创建表
创建一张表的步骤很简单:
编写创建表的SQL语句
调用SQLiteDatabase的execSQL()方法来执行SQL语句
下面的代码创建了一张用户表,属性列为:id(主键并且自动增加)、sname(学生姓名)、snumber(学号)
View Code
3、插入数据
ContentValues 是一种存储的机制,常用于数据库的操作。只能存储基本类型。
插入数据有两种方法:
①SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法,
参数1 表名称,
参数2 空列的默认值
参数3 ContentValues类型的一个封装了列名称和列值的Map;
View Code
②编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行
View Code
4、删除数据
删除数据也有两种方法:
①调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法
参数1 表名称
参数2 删除条件
参数3 删除条件值数组
View Code
②编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。
View Code
5、修改数据
修改数据有两种方法:
①调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法
参数1 表名称
参数2 跟行列ContentValues类型的键值对Key-Value
参数3 更新条件(where字句)
参数4 更新条件数组
View Code
②编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。
View Code
6、查询数据
在Android中查询数据是通过Cursor类来实现的,当我们使用SQLiteDatabase.query()方法时,会得到一个Cursor对象,Cursor指向的就是每一条数据。它提供了很多有关查询的方法,具体方法如下:
public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
各个参数的意义说明:
参数table:表名称
参数columns:列名称数组
参数selection:条件字句,相当于where
参数selectionArgs:条件字句,参数数组
参数groupBy:分组列
参数having:分组条件
参数orderBy:排序列
参数limit:分页查询限制
参数Cursor:返回值,相当于结果集ResultSet
Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
Cursor游标常用方法
方法名称
方法描述
getCount()
获得总的数据项数
isFirst()
判断是否第一条记录
isLast()
判断是否最后一条记录
moveToFirst()
移动到第一条记录
moveToLast()
移动到最后一条记录
move(int offset)
移动到指定记录
moveToNext()
移动到下一条记录
moveToPrevious()
移动到上一条记录
getColumnIndexOrThrow(String columnName)
根据列名称获得列索引
getInt(int columnIndex)
获得指定列索引的int类型值
getString(int columnIndex)
获得指定列缩影的String类型值
下面就是用Cursor来查询数据库中的数据,具体代码如下:
View Code
7、删除指定表
编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行
View Code
三. SQLiteOpenHelper
该类是SQLiteDatabase一个辅助类。这个类主要生成一 个数据库,并对数据库的版本进行管理。
当在程序当中调用这个类的方法getWritableDatabase()或者 getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。
SQLiteOpenHelper 是一个抽象类,我们通常需要继承它,并且实现里面的3个函数:
1.onCreate(SQLiteDatabase)
在数据库第一次生成的时候会调用这个方法,也就是说,只有在创建数据库的时候才会调用,当然也有一些其它的情况,一般我们在这个方法里边生成数据库表。
2. onUpgrade(SQLiteDatabase,int,int)
当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。
3. onOpen(SQLiteDatabase):
这是当打开数据库时的回调函数,一般在程序中不是很常使用。
写了这么多,改用用实际例子来说明上面的内容了。
下面这个操作数据库的实例实现了创建数据库,创建表以及数据库的增删改查的操作。
该实例有两个类:
com.ling.testSQLite 调试类
com.ling.testSQLiteDb 数据库辅助类
SQLiteActivity.java
View Code
StuDBHelper.java
View Code
main.xml
View Code
程序运行的效果图:
使用adb命令查看数据库:
1.在命令行窗口输入adb shell回车,就进入了Linux命令行,现在就可以使用Linux的命令了。
2.ls回车,显示所有的东西,其中有个data。
3.cd data回车,再ls回车,cd data回车,ls回车后就会看到很多的com................,那就是系统上的应用程序包名,找到你数据库程序的包名,然后进入。
4.进去后在查看所有,会看到有databases,进入databases,显示所有就会发现你的数据库名字,这里使用的是"stu_db"。
5.sqlite3 stu_db回车就进入了你的数据库了,然后“.schema”就会看到该应用程序的所有表及建表语句。
6.之后就可以使用标准的SQL语句查看刚才生成的数据库及对数据执行增删改查了。
注:ls,cd等命令都是linux的基本命令,不了解的同学可以看看有关这方面的资料。
下面介绍几个在SQLite中常用到的adb命令:
查看
.database 显示数据库信息;
.tables 显示表名称;
.schema 命令可以查看创建数据表时的SQL命令;
.schema table_name 查看创建表table_name时的SQL的命令;
插入记录
insert into table_name values (field1, field2, field3...);
查询
select * from table_name;查看table_name表中所有记录;
select * from table_name where field1='xxxxx'; 查询符合指定条件的记录;
删除
drop table_name; 删除表;
drop index_name; 删除索引;
-------------------------------------------查询,插入,删除等操作数据库的语句记得不要漏了;----------------------------------------
# sqlite3 stu_db
sqlite3 stu_db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .schema
.schema
CREATE TABLE android_metadata (locale TEXT);
CREATE TABLE stu_table(id int,sname varchar(20),sage int,ssex varchar(10)); --->创建的表
sqlite> select * from stu_table;
select * from stu_table;
1|xiaoming|21|male
sqlite>
插入数据
sqlite> insert into stu_table values(2,'xiaohong',20,'female');
插入的数据记得要和表中的属性一一对应
insert into stu_table values(2,'xiaohong',20,'female');
sqlite> select * from stu_table;
select * from stu_table;
1|xiaoming|21|male
2|xiaohong|20|female --------------> 插入的数据
sqlite>
当点击修改数据的按钮时候
sqlite> select * from stu_table;
select * from stu_table;
1|xiaoming|23|male -------------->年龄被修改为23
2|xiaohong|20|female
sqlite>
当点击删除数据的按钮
sqlite> select * from stu_table;
select * from stu_table;
1|xiaoming|23|male id=2的数据已经被删除
总之,我们可以在代码中执行数据库的增删改查,也可以在adb命令行下实现。不过因为SQLite没有客户端,不能直接的查看数据库变化后的信息,所以常用adb命令行查看数据库改变后的信息。
前面用到的数据库,表都是自己在代码中创建,下面介绍如何使用外部已有的数据库的方法:
先用SQLite管理工具,sqliteadmin 具体操作很简单,在这里我就不详细介绍的了,但有一个地方时候很值得注意的,就是用sqliteadmin创建数据库的时候,数据库保存的路径不能是中文路径,中文路径会出现下面的错误提示:
我在sqliteadmin 创建好数据库StuDB,:
将创建好的数据库在DDMS中点击导入到data/data/程序的包名/
⑺ Android开发怎么查看和管理sqlite数据库
1 打开android项目的调试模式,然后找到显示DDMS
2 选择DDMS
切换到DDMS,显示File Explorer窗口,找到/data/data/
啰嗦一句,你可能在你自己的eclipse没找到,File Explorer ,如果找不到的话,就去网上下载,"easyExplorer",放在eclipse的plugins目录下:就OK了,重启一下。
3 然后找到自己用的程序包的文件夹,打开databases,就看到sqlite数据库文件了,然后到处就可以了。步骤上面标注好了,1,2,3。这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如sqlite administrator、sqlite man或者firefox插件sqlite manager等打开就可以了。
4 说一下另外一种方法,运行cmd,切换到android-sdk目录,运行adb.exe,加上参数shell,出现#号就代表进入了shell命令模式,注意adb要在Android模拟器运行时才能进入shell:(必须要用root权限,如果不是root权限,去查询别的资料,一般都是root权限。OK了)
⑻ 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();
}
DataBase();
}
catch (IOException e) {
Log.e("DB", e.getMessage());
throw new Error("Error ingdatabase");
}
}
}
/**
* 检查数据库是否已存在,以避免重复复制。
* @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 voidDataBase() 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();
}
/**
* 打开数据库。
* */
private voidopenDataBase(int flags) throws SQLException{
//Open the database
String myPath = DB_PATH + DB_NAME;
m_database =SQLiteDatabase.openDatabase(myPath, null, flags);
}
/**
* 关闭数据库。
* */
@Override
public synchronizedvoid close() {
if (m_database != null)
m_database.close();
super.close();
}
}
@Override
public voidonCreate(SQLiteDatabase db) {
// 不需做任何事
}
/**
* 在数据库版本提高时,删除原有数据库。
* */
@Override
public voidonUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
m_context.deleteDatabase(DB_NAME);
}
}
⑼ sqlite数据库怎么打开
1、打开程序后,可以看到程序左边的“数据库列表”。展开可以查看到所有打开过的数据库。