我在Android中使用SQLite数据库看到的所有教程都是自己创建数据库的。这似乎是一个要求。是不是可以使用SQLite工作台创建数据库,并将其安装在Android应用程序文件夹中的正确位置?
答案 0 :(得分:2)
IT是可能的。
只需创建您的SQLite数据库并将其放在资产文件夹中。
首次启动应用时,只需检查数据库是否存在,如果不存在则创建数据库。
public String DB_PATH = null;
public final static String DB_NAME = "mye.db"; //take note this is in your asset folder
private static final int DB_VERSION = 1;
private SQLiteDatabase myDatabase;
private Context myContext = null;
public DBAdapter(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.myContext = context;
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
}
/**
* Creates a empty database on the system and rewrites it with your own
* database.
* */
public void createDataBase() throws IOException {
this.getReadableDatabase();
try {
copyDatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
/**
* Copy DB from ASSETS
*/
public void copyDatabase() throws IOException {
// Open your local db as the input stream
InputStream myInput = myContext.getAssets().open(DB_NAME);
// Path to the just created empty db
String outFileName = DB_PATH + DB_NAME;
// Open the empty db as the output stream
OutputStream myOutput = new FileOutputStream(outFileName);
// transfer bytes from the inputfile to the outputfile
byte[] buffer = new byte[1024];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
// Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
/**
* Opens Database . Method is synhcronized
* @throws SQLException
*/
public synchronized void openDatabase() throws SQLException {
String dbPath = DB_PATH + DB_NAME;
myDatabase = SQLiteDatabase.openDatabase(dbPath, null,
SQLiteDatabase.OPEN_READWRITE);
}
/**
* Closes database.
* Method is synchronized for protection
*/
@Override
public synchronized void close() {
if (myDatabase != null) {
myDatabase.close();
}
super.close();
}
/**
* Check if the database exists
*
* @param cntx
* @return true / false
*/
public boolean checkDatabase(Context cntx) {
File dbFile = cntx.getDatabasePath(DB_NAME);
// Log.e("zeus", "Check db returns : " + dbFile.exists());
return dbFile.exists();
}
在扩展应用程序的主要活动或类中,只需获取DBAdapter的实例并检查数据库是否存在。
mDBAdapter = new DBAdapter(getApplicationContext());
if (!mDBAdapter.checkDatabase(getApplicationContext())) {
try {
mDBAdapter.createDataBase();
} catch (IOException e) {
e.printStackTrace();
}
}
答案 1 :(得分:0)
是不是可以使用SQLite工作台创建数据库,并将其安装在Android应用程序文件夹中的正确位置?
欢迎您这样做,using SQLiteAssetHelper
作为打包和部署数据库的方法。
但通常情况下,只有在您要使用应用程序打包的重要数据时才会这样做。