Как использовать созданную базу данных SQLite в приложениях SQLite Manager в моей программе Android
Поскольку я работаю со многими таблицами в своем приложении для Android, я решил создать базу данных (БД) в менеджерах SQLite (таких как плагин Firefox или Navicat для SQLite). Я закончил создавать их и экспортировать файл.sql! но я не знаю, как использовать этот файл! Конечно, я нашел пост об этом, чтобы поместить БД (на рутированный телефон) в...data/data/{имя вашего пакета}/ ..etc, но я не понимаю, что делать после этого шага!! (Я знаю код для введения БД только в приложение для Android!!)
Может кто-нибудь сказать мне шаг за шагом, как использовать мои созданные БД с этими методами в моем приложении??-
Это хороший способ использовать эти менеджеры SQLite или, несмотря на сложность создания нескольких таблиц в Android с кодами, вы предпочитаете это???
Какая основная разница между sqlite 2 и 3? Поддерживаются ли они другой версией Android или только обновлениями для Sqlite?
Редактировать: после копирования дБ в папку сборщика и использования кода для его копирования:
03-16 11: 32: 20.370: I / SqliteDatabaseCpp (3999): возвращается sqlite: код ошибки = 14, msg = не удается открыть файл в строке 27712 из [8609a15dfa], db=/data/data/com.androidhive.xmlparsing/database /surveyydb.sqlite 03-16 11:32:20.370: I/SqliteDatabaseCpp(3999): sqlite вернул: код ошибки = 14, msg = os_unix.c: open() в строке 27712 - "" errno=2 path=/data/data/com.androidhive.xmlparsing/database /surveyydb.sqlite, db=/data/data/com.androidhive.xmlparsing/database /surveyydb.sqlite 03-16 11:32:20.370: E/SqliteDatabaseCpp(3999): sqlite3_open_v2("/data/data/com.androidhive.xmlparsing/database /surveyydb.sqlite", &handle, 1, NULL) завершился ошибкой 03-16 11:32:20.380: E/SQLiteDatabase(3999): не удалось открыть базу данных. закрывая это. 03-16 11:32:20.380: E/SQLiteDatabase(3999): android.database.sqlite.SQLiteCantOpenDatabaseException: невозможно открыть файл базы данных 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.database.sqlite.SQLiteDatabase.dbopen(собственный метод) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:932) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в базе данных.AssetDatabaseHelper.checkExist(AssetDatabaseHelper.java:55) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в базе данных -16 11: 32: 20.380: E / SQLiteDatabase (3999): в android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.app.ActivityThread. executeLaunchActivity(ActivityThread.java:1782) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1834) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.app.ActivityThread.access $ 500 (ActivityThread.java:122) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в android.app.ActivityThread $ H.handleMessage(ActivityThread. Java: 1027) 03-16 11:32:20.380: E/SQLiteDatabase(3999): at android.os.Handler.dispatchMessage(Handler.java:99) 03-16 11:32:20.380: E/SQLiteDatabase(3999): at android.os.Looper.loop (Looper.java:132) 03-16 11:32:20.380: E/SQLiteDatabase(3999): at android.app.ActivityThread.main (ActivityThread.java:4126) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в java.lang.reflect.Method.invokeNative(собственный метод) 03-16 11: 32: 20.380: E / SQL iteDatabase (3999): в java.lang.reflect.Method.invoke (Method.java:491) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 03-16 11:32:20.380: E/SQLiteDatabase(3999): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 03-16 11:32:20.380: E/SQLiteDatabase(3999): в dalvik.system.NativeStart.main(собственный метод) 03-16 11:32:20.380: W/System.err(3999): android.database.sqlite.SQLiteCantOpenDatabaseException: невозможно открыть файл базы данных 03-16 11:32:20.380: W/System.err(3999): atroid.database.sqlite.SQLiteDatabase.dbopen (собственный метод) 03-16 11: 32: 20.380: W / System.err (3999): в android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983) 03-16 11:32:20.380: W/System.err(3999): в android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956) 03-16 11:32:20.380: W/System.err(3999): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:932) 03-16 11:32:20.380: W/System.err(3999): в базе данных.AssetDatabaseHelper.checkExist(AssetDatabaseHelper.java:55) 03-16 11:32:20.380: W/System.err(3999): в базе данных.AssetDatabaseHelper.importIfNotExist(AssetDatabaseHelper.java:81) 03-16 11:32:20.380: W/System.err(3999): at com.androidhive.xmlparsing.AndroidXMLParsingActivity.onCreate(AndroidXMLParsingActivity.java:78) 03-16 11:32:20.380: W/System.err(3999): на android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1050) 03-16 11:32:20.380: W/System.err(3999): на android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1782) 03-16 11:32:20.380: W/System.err(3999): на android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1834) 03-16 11:32:20.380: W/System.err(3999): на android.app.ActivityThread.access$500(ActivityThread.java:122) 03-16 11:32:20.380: W/System.err(3999): на android.app.ActivityThread$H.handleMessage(ActivityThread.java:1027) 03-16 11:32:20.380: W/System.err(3999): на android.os.Handler.dispatchMessage(Handler.java:99) 03-16 11:32:20.380: W/System.err(3999): на android.os.Looper.loop(Looper.java:132) 03-16 11:32:20.380: W/System.err(3999): на android.app.ActivityThread.main(ActivityThread.java:4126) 03-16 11:32:20.380: W/System.err(3999): на java.lang.reflect.Method.invokeNative(собственный метод) 03-16 11:32:20.380: W/System.err(3999): at java.lang.reflect.Method.invoke(Method.java:491) 03-16 11:32:20.380: W/System.err(3999): на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844) 03-16 11:32:20.380: W/System.err(3999): на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 03-16 11:32:20.380: W/System.err(3999): at dalvik.system.NativeStart.main(собственный метод)
Я использовал этот код:
public class AssetDatabaseHelper extends SQLiteOpenHelper{
private String dbName;
private String db_path;
private Context context;
/**
* A helpe r class to import db files.
*
* @param context
* base/app context
* @param dbName
* The name of the db in asset folder .
*/
public AssetDatabaseHelper(Context context, String dbName) {
super(context, dbName, null, 1);
this.dbName = dbName;
this.context = context;
db_path = "/data/data/" + context.getPackageName() + "/databases/";
}
/**
* 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
*/
public boolean checkExist() {
SQLiteDatabase checkDB = null;
try {
String myPath = db_path + dbName;
checkDB = SQLiteDatabase.openDatabase(myPath, null,
SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
e.printStackTrace();
} catch (Exception ep) {
ep.printStackTrace();
}
if (checkDB != null) {
checkDB.close();
}
return checkDB != null ? true : false;
}
/**
* Creates a empty database on the system and rewrites it with your own
* database.
* */
public void importIfNotExist() throws IOException {
boolean dbExist = checkExist();
if (dbExist) {
// do nothing - database already exist
} else {
this.getReadableDatabase();
try {
copyDatabase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
/**
* Creates copies the database from asset to the new database location.
* */
private void copyDatabase() throws IOException {
InputStream is = context.getAssets().open(dbName);
OutputStream os = new FileOutputStream(db_path + dbName);
byte[] buffer = new byte[4096];
int length;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.flush();
os.close();
is.close();
this.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Обновление 2: DB SCRIPTS:
CREATE TABLE "**" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "**" TEXT, "****" INTEGER); CREATE TABLE "***" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "***" INTEGER UNIQUE, "***" TEXT); CREATE TABLE "**" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "***" INTEGER UNIQUE, "**" INTEGER, "**" INTEGER, "**" TEXT, "impGender" TEXT, "* * "TEXT," *** "INTEGER," *** "DATETIME DEFAULT CURRENT_TIMESTAMP); CREATE TABLE "**" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "**" TEXT); CREATE TABLE "**" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "***" INTEGER UNIQUE, "***" TEXT, "srQType" INTEGER, "***" INTEGER, "**" BOOL, "**" FLOAT, "**" FLOAT, "**" INTEGER, "**" UNIQUE); CREATE TABLE "*" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "**" INTEGER NOT NULL UNIQUE, "***" INTEGER, "**" INTEGER, "**" INTEGER, "**" INTEGER, "**" ТЕКСТ, "**" ТЕКСТ); CREATE TABLE "**" ("_id" INTEGER PRIMARY KEY, "***" TEXT); CREATE TABLE "**" ("_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "**" TEXT, "srDesc" TEXT, "***" INTEGER, "**" DATETIME, "**" DATETIME, "****" INTEGER, "srCode" INTEGER); CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'en_US');
И в конце:
new AssetDatabaseHelper(this , "surveydb.sqlite").importIfNotExist();
в чем проблема?
Вы можете мне помочь?
1 ответ
- Sqlite 3 поддерживается в Android.
- Вам НЕ нужен рутированный телефон для использования импортированной базы данных
Шаги для использования импортированной базы данных:
- Дамп вашей базы данных в папку /assets.
- Добавьте код из git hub здесь
Импортируйте свою базу данных, выполнив код ниже.
AssetDatabaseHelper dbHelper = new AssetDatabaseHelper( getBaseContext(), YOUR_DATABASE_NAME); try { dbHelper.importIfNotExist(); } catch (IOException e) { e.printStackTrace(); }