Chỉ cần sử dụng:
SQLiteDatabase.openDatabase(DB_FULL_PATH, null, SQLiteDatabase.OPEN_READONLY);
nơi DB_FULL_PATH có thể là một đường dẫn đến sdcard của bạn, giống như /sdcard/mydatabase.db
Edit:
Đây là những gì tôi gọi trong ứng dụng của tôi để truy cập cơ sở dữ liệu ....
private static DBUtil dbHelper = null;
public void openDatabase() {
if(dbHelper == null) {
dbHelper = new DBUtil(this.context);
dbHelper.openDataBase(SQLiteDatabase.OPEN_READWRITE);
}
}
public void closeDatabase() {
if(dbHelper != null) {
dbHelper.close();
dbHelper = null;
}
}
... và đây là lớp trợ giúp db tôi đang sử dụng, trong thực tế mở rộng SQLiteOpenHelper, vì vậy bạn sẽ vẫn có mọi thứ bạn muốn từ lớp này.
package com.myapp.android.db;
import android.content.Context;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import com.myapp.android.MyApp;
import java.io.IOException;
/**
* Standard database utility class.
*
* TODO: Refactor.
*/
public class DBUtil extends SQLiteOpenHelper {
/**
* Database directory.
*
* <p>
* Example: "/sdcard/myapp/db/"
* </p>
*/
public static String DB_DIRECTORY = null;
/**
* Name of the database file.
*
* <p>
* Example: "mydatabase.db"
* </p>
*
*/
public static String DB_NAME = null;
/**
* Full absolute path of the database.
*
* <p>
* Example: "/sdcard/myapp/db/mydatabase.db"
* </p>
*/
public static String DB_FULL_PATH = null;
static {
DB_DIRECTORY = MyApp.DATA_REPOSITORY_URI + "/myapp/db/";
DB_NAME = "mydatabase.db";
DB_FULL_PATH = DB_DIRECTORY + DB_NAME;
}
private SQLiteDatabase myDataBase;
/**
* Constructor Takes and keeps a reference of the passed context in order to
* access to the application assets and resources.
*
* @param context
*/
public DBUtil(Context context) {
super(context, DB_NAME, null, 1);
try {
this.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
}
/**
* Creates a empty database on the system and rewrites it with your own
* database.
* */
public void createDataBase() throws IOException {
if (!checkDataBase()) this.getWritableDatabase();
}
/**
* Check if the database already exist to avoid re-copying the file each
* time you open the application.
*
* @return true if it exists, false if it doesn't
*/
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
// database does't exist yet.
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
public void openDataBase(int mode) throws SQLException {
try {
myDataBase = SQLiteDatabase.openDatabase(DB_FULL_PATH, null, mode);
} catch(IllegalStateException e) {
// Sometimes, esp. after application upgrade, the database will be non-closed, raising a IllegalStateException
// below. Try to avoid by simply opening it again.
Log.d(MyApp.APP, "Database non-closed. Reopening.");
myDataBase = SQLiteDatabase.openDatabase(DB_FULL_PATH, null, mode);
}
}
public void openDataBase() throws SQLException {
openDataBase(SQLiteDatabase.OPEN_READWRITE);
}
public SQLiteDatabase getDb() {
return myDataBase;
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Nguồn
2010-08-09 01:43:41
Tôi không chắc chắn điều này có thể được sử dụng cùng với SQLiteOpenHelper. Thật không may tôi không phải ở nơi làm việc của tôi ngay bây giờ và không thể kiểm tra. Sẽ bỏ phiếu nếu nó đơn giản như vậy, mặc dù. – GJTorikian
Tự hỏi, tại sao bạn cần SQLiteOpenHelper một cách rõ ràng? –
Nó có một loạt các phương pháp trợ giúp để tạo cơ sở dữ liệu và nâng cấp cơ sở dữ liệu. Tôi không quen thuộc với một cách đơn giản hơn để xử lý những hành động đó. – GJTorikian