android怎么连接sqlite数据库?

android怎么连接sqlite数据库?,第1张

用SQLiteOpenHelper 类中的 getWritableDatabase()和getReadableDatabase()方法可以获得数据库的引用。拿到数据库的引用就可以对数据库进行相应的增删改查 *** 作了。

详细 *** 作可以参考这个网址:

http://www.open-open.com/lib/view/open1325160000889.html

其主要思路是:

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()

}

copyDataBase()

}

catch (IOException e) {

Log.e("DB", e.getMessage())

throw new Error("Error copyingdatabase")

}

}

}

/**

* 检查数据库是否已存在,以避免重复复制。

* @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 voidcopyDataBase() 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 = 1i <= DB_SPLIT_COUNTi++){

// 打开分解的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()

}

/**

因为数据变化都是在模拟器的系统里面,相当于在另一台机器上,但是因为是模拟器,实际上还是可以通过方法访问到的。具体方法如下:1.先把adb放到环境变量中adb程序在sdk的platform-tools中,把这个目录加到path中,这样就可以在命令行中运行adb�0�22.连接到模拟器$ adb -s emulator-5554 shell�0�23.连接到sqlite# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db�0�24.执行想要的 *** 作,查看数据.help可以看 *** 作帮助


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6686308.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-26
下一篇 2023-03-26

发表评论

登录后才能评论

评论列表(0条)

保存