A. 在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();
}
/**
B. android 怎么调用数据库方法
SQLite也支持SQL标准类型,VARCHAR、CHAR、BIGINT等。
创建数据库
Android 不自动提供数据库。在 Android 应用程序中使用 SQLite,必须自己创建数据库,然后创建表、索引,填充数据。Android 提供了 SQLiteOpenHelper 帮助你创建一个数据库,只要继承 SQLiteOpenHelper 类,就可以创建数据库。继承了SQLiteOpenHelper的子类,必须实现三个方法:
1、构造函数,调用父类 SQLiteOpenHelper 的构造函数。这个方法需要四个参数:上下文环境(例如,一个 Activity),数据库名字,一个可选的游标工厂(通常是 Null),一个代表你正在使用的数据库模型版本的整数。
2、onCreate()方法,它需要一个 SQLiteDatabase 对象作为参数,根据需要对这个对象填充表和初始化数据。
3、onUpgrage() 方法,它需要三个参数,一个 SQLiteDatabase 对象,一个旧的版本号和一个新的版本号,这样可以清楚如何把一个数据库从旧的模型转变到新的模型。
C. Android开发怎么查看和管理sqlite数据库
在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。
使用DDMS导出sqlite数据库。
1、首先打开android项目的调试模式,然后找到显示DDMS:
选择DDMS
2、切换到DDMS,显示FileExplorer窗口,找到/data/data/
然后找到程序包的文件夹,打开databases,就能看到sqlite数据库文件了。选择将其导出。
这样就把sqlite数据库文件以文件的方式导出来了,然后使用sqlite界面管理工具如sqliteadministrator、sqliteman或者firefox插件sqlitemanager等打开就可以了。
使用adb工具访问sqlite数据库
AndroidDebugBridge(ADB)是Android的一个通用调试工具,它可以更新设备或模拟器中的代码,可以管理预定端口,可以在设备上运行shell命令,我们知道android是基于linux内核,它的内部文件结构也是采用linux文件组织方式,因此访问它的文件结构需要使用shell。这次我们就会用shell来访问android应用中的sqlite数据库文件。
1、运行cmd,切换到android-sdk目录,运行adb.exe,加上参数shell,出现#号就代表进入了shell命令模式,注意adb要在Android模拟器运行时才能进入shell:
2、shell命令记住两个基本命令ls和cd,类似windows命令提示行中的dir和cd,代表列出当前目录下文件列表和进入到指定目录。了解闭手昌这两个命令之后,就可以找到data/data/项目包名/databases:
找到数据库文件:
接下来就是使用sqlite管理工具来进行轿扒操作了。键入sqlite3数据库名就进入了sqlite管理模式了。
在android的sdk中自带了sqlite3.exe,这是sqlite的官方管理工具,它是一个命令行工具。为了使用方便,将其路径注册到系统环境变量path中,即将;%Android_Home%加在Path中,这样只样运行sqlite3,就能直接打开sqlite管理工具了。
sqlite管理数据库篇
sqlite命令行工具默认是以;结束语句的。所以如果只是一行语句,要在末尾加;,或者在下一行中键入;,这样sqlite命令才会被执行。
sqlite常薯李用命令:
.tables--查看数据库的表列表
.exit--退出sqlite命令行