日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库

發布時間:2024/8/23 Android 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本問題已經有最佳答案,請猛點這里訪問。

在這里,我想使用我預先填充的SQLite數據庫到我的Android應用程序。 因此,首次運行時,它會自動從assets文件夾中復制數據庫,并在我的Android應用程序中將其用作數據庫。

到目前為止,我已經做了這些事:

public class DatabaseHelper extends SQLiteOpenHelper {

public static final String MyVillageSoftware ="MyVillageSoftware";

public static final String table_Question ="table_question";

private static final String DATABASE_PATH="/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/";

private static final String DATABASE_NAME="question.db";

//TOL for transaction Coloumn

SQLiteDatabase db;

Context context;

private static final String TAG = DatabaseHelper.class.getSimpleName();

public DatabaseHelper(Context context) {

super(context, DATABASE_NAME, null, 1);

this.context=context;

}

@Override

public void onCreate(SQLiteDatabase db) {

}

public void createDatabase(){

createDB();

}

public void createDB(){

boolean dbExist = DBExist();

if(!dbExist){

this.getReadableDatabase();

copyDBFromResource();

}

}

private boolean DBExist(){

SQLiteDatabase db = null;

try{

String databasePath = DATABASE_PATH+DATABASE_NAME;

db=SQLiteDatabase.openDatabase(databasePath, null,

SQLiteDatabase.OPEN_READWRITE);

db.setLocale(Locale.getDefault());

db.setLockingEnabled(true);

db.setVersion(1);

}catch(SQLiteException e){

Log.e("SqlHelper","Database nda ada babi");

}

if(db != null){

db.close();

}return db != null ? true : false;

}

private void copyDBFromResource(){

InputStream inStream=null;

OutputStream outStream = null;

String dbFilePath=DATABASE_PATH+DATABASE_NAME;

try{

inStream=context.getAssets().open(DATABASE_NAME);

outStream=new FileOutputStream(dbFilePath);

byte[] buffer = new byte[1024];

int length;

while((length=inStream.read(buffer))>0){

outStream.write(buffer, 0 , length);

}

outStream.flush();

outStream.close();

inStream.close();

}catch (IOException e){

throw new Error("Problem cuk");

}

}

public List getAllCategory() {

List AllCategoryList = new ArrayList();

List AllCategIdList = new ArrayList();

String selectQuery ="SELECT * FROM" + table_Question;

SQLiteDatabase db = this.getReadableDatabase();

Cursor cursor = db.rawQuery(selectQuery, null);

if (cursor.moveToFirst()) {

do {

String Id = cursor.getString(0);

String A = cursor.getString(1);

String B = cursor.getString(2);

String C = cursor.getString(3);

String D = cursor.getString(4);

String aExplain = cursor.getString(5);

String bExplain = cursor.getString(6);

String cExplain = cursor.getString(7);

String dExplain = cursor.getString(8);

} while (cursor.moveToNext());

}

cursor.close();

db.close();

return AllCategoryList;

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

db.execSQL("DROP TABLE IF EXISTS" + table_Question);

onCreate(db);

}

}

但我得到一個這樣的錯誤信息:

10-28 07:18:38.988 2425-2425/gook.psikologikarakter E/SQLiteLog﹕ (14) cannot open file at line 30046 of [9491ba7d73]

10-28 07:18:38.988 2425-2425/gook.psikologikarakter E/SQLiteLog﹕ (14) os_unix.c:30046: (2) open(/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/question.db) -

10-28 07:18:38.989 2425-2425/gook.psikologikarakter E/SQLiteDatabase﹕ Failed to open database '/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/question.db'.

android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)

at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)

at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)

at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)

at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)

at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)

at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)

at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)

at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)

at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)

at gook.psikologikarakter.DatabaseHelper.DBExist(DatabaseHelper.java:65)

at gook.psikologikarakter.DatabaseHelper.createDB(DatabaseHelper.java:52)

at gook.psikologikarakter.DatabaseHelper.createDatabase(DatabaseHelper.java:48)

at gook.psikologikarakter.MainActivity.onCreate(MainActivity.java:59)

at android.app.Activity.performCreate(Activity.java:5990)

at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)

at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)

at android.app.ActivityThread.access$800(ActivityThread.java:151)

at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)

at android.os.Handler.dispatchMessage(Handler.java:102)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5257)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

我不知道到底發生了什么,但我想我無法打開數據庫文件。 但我不知道該怎么辦。 請高手幫幫我。

謝謝你。

您不能使用assets文件夾中的數據庫。您希望在首次運行時將數據庫復制到/ data / data / YOUR_PACKAGE / databases /。這將有所幫助:stackoverflow.com/questions/513084/…

是的先生,我的意思是,所以我的問題是如何在第一次啟動應用程序時將數據庫從assets文件夾復制到data / data / your_package / databases /?

我的朋友就像復制你使用java的任何其他文件一樣簡單。以下是專門針對您的案例:stackoverflow.com/a/20592481/1371041

但是我在這個先生上得到了錯誤:private String DATABASE_PATH = context.getApplicationInfo()。dataDir +"/ databases /";我收到錯誤"非法轉發參考"

@ChallengeAccepted謝謝先生,它運作良好

很高興解決了你的問題。至于"非法前向引用"你確定它是在構造函數中嗎?你做了什么來解決你的錯誤?

我使用另一個模式代碼來做那個先生。我使用此代碼先生,private void copyDatabase(File dbFile)拋出IOException {InputStream is = context.getAssets()。open(DATABASE_NAME); OutputStream os = new FileOutputStream(dbFile); byte [] buffer = new byte [1024]; while(is.read(buffer)> 0){os.write(buffer); os.flush(); os.close(); is.close(); }

private static final String DATABASE_PATH="/Users/ever_ncn/Documents/Project/PsikologiKarakter/app/src/main/assets/";

這是本地文件系統上的路徑,而不是運行時設備上文件的路徑。 使用getResources().getAssets().openFile(...)獲取文件的InputStream。

代碼就像這先生一樣?。context.getResources()getAssets()中openFile(DATABASE_NAME)。 但我在openFile()上遇到錯誤;

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的android studio sqlitedatabase,在SQLite数据库Android Studio上使用预填充数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。