正文
一、准备
1.1 准备目录
在Android项目工程res下新建raw文件夹,在这个文件夹里面的文件不会被编译压缩。
1.2 准备数据库
新建或拷贝一个数据库,然后打开,依次执行以下两条SQL语句:
CREATE
TABLE
"android_metadata" ("locale"
TEXT
DEFAULT
'
zh_CN
'
)
INSERT
INTO
"android_metadata"
VALUES
(
'
zh_CN
'
)
这个表用途不太清楚,但是如果用Android sqlite API创建一个数据库的话,会默认带上这个表,而且少了还不行,会报错。
二、实现代码
/**
* 是否完成初始化
*/
private
static
boolean
isInit
=
false
;
/**
* 初始化数据库
*
@param
context
*/
synchronized
public
static
void
init(Context context)
{
if
(isInit)
return
;
//
输出路径
String outFileName
=
DATABASE_PATH
+
DATABASE_NAME;
//
检测是否已经创建
File dir
=
new
File(outFileName);
if
(dir.exists())
return
;
//
检测/创建数据库的文件夹
dir
=
new
File(DATABASE_PATH);
if
(
!
dir.exists())
dir.mkdir();
InputStream input
=
null
;
OutputStream output
=
null
;
//
从资源中读取数据库流
input
=
context.getResources().openRawResource(R.raw.db);
try
{
output
=
new
FileOutputStream(outFileName);
//
拷贝到输出流
byte
[] buffer
=
new
byte
[
2048
];
int
length;
while
((length
=
input.read(buffer))
>
0
) {
output.write(buffer,
0
, length);
}
}
catch
(FileNotFoundException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
finally
{
//
关闭输出流
try
{
output.flush();
output.close();
}
catch
(IOException e) {
}
//
关闭输入流
try
{
input.close();
}
catch
(IOException e) {
}
}
isInit
=
true
;
}
代码说明:
a). 在主窗口(Activity)中调用一次即可,随后直接用SQLiteDatabase.openDatabase操作使用即可。
本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582243,如需转载请自行联系原作者