2017-09-02 1 views
0

Ich bin der folgenden this empfohlenen Leitfaden zum Erstellen einer SQLite-Datenbank mit vorinstallierten Daten; Ich kann jedoch nicht verstehen, wie die erforderliche Datenbankdatei (.db) erstellt wird.So importieren Sie eine SQL-Datenbankdatei

Ich habe die Software "DB Browser für SQLite" verwendet, um meine Datenbank zu schreiben, aber kann nur scheinen, die Datei als die Befehle zu speichern, um eine Datenbank zu erstellen (CREATE TABLE IF NOT EXISTS etc.).

Wie speichere ich meine Datei im erforderlichen .db-Format?

This Website-Lösung ist, warum ich denke, dass meine Datei im falschen Format ist.

Für Kontext, der Fehler ich erlebe ist wie folgt:

09-02 23:47:58.681 19704-19704/company.app W/SQLiteAssetHelper: copying database from assets... 
09-02 23:47:58.682 19704-19704/company.app W/SQLiteAssetHelper: database copy complete 
09-02 23:47:58.684 19704-19704/company.app E/SQLiteLog: (26) file is encrypted or is not a database 
09-02 23:47:58.684 19704-19704/company.app E/DefaultDatabaseErrorHandler: Corruption reported by sqlite on database: /data/user/0/company.app /databases/app .db 
09-02 23:47:58.684 19704-19704/company.app E/DefaultDatabaseErrorHandler: deleting the database file: /data/user/0/company.app /databases/app .db 
09-02 23:47:58.686 19704-19704/company.app E/SQLiteLog: (14) cannot open file at line 32504 of [bda77dda96] 
09-02 23:47:58.686 19704-19704/company.app E/SQLiteLog: (14) os_unix.c:32504: (2) open(/data/user/0/company.app /databases/app .db) - 
09-02 23:47:58.687 19704-19704/company.app E/SQLiteDatabase: Failed to open database '/data/user/0/company.app /databases/app .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:808) 
                      at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:796) 
                      at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:696) 
                      at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:671) 
                      at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.returnDatabase(SQLiteAssetHelper.java:408) 
                      at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.createOrOpenDatabase(SQLiteAssetHelper.java:401) 
                      at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:176) 
                      at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:254) 
                      at company.app .MyDatabase.randomiseItBro(MyDatabase.java:33) 
                      at company.app .MainActivity.randomise(MainActivity.java:55) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at android.view.View$DeclaredOnClickListener.onClick(View.java:4695) 
                      at android.view.View.performClick(View.java:5612) 
                      at android.view.View$PerformClick.run(View.java:22285) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6123) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 
09-02 23:47:58.688 19704-19704/company.app W/SQLiteAssetHelper: could not open database app .db - unknown error (code 14): Could not open database 
09-02 23:47:58.689 19704-19704/company.app D/AndroidRuntime: Shutting down VM 
09-02 23:47:58.689 19704-19704/company.app E/AndroidRuntime: FATAL EXCEPTION: main 
                     Process: company.app , PID: 19704 
                     java.lang.IllegalStateException: Could not execute method for android:onClick 
                      at android.view.View$DeclaredOnClickListener.onClick(View.java:4700) 
                      at android.view.View.performClick(View.java:5612) 
                      at android.view.View$PerformClick.run(View.java:22285) 
                      at android.os.Handler.handleCallback(Handler.java:751) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:154) 
                      at android.app.ActivityThread.main(ActivityThread.java:6123) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757) 
                     Caused by: java.lang.reflect.InvocationTargetException 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at android.view.View$DeclaredOnClickListener.onClick(View.java:4695) 
                      at android.view.View.performClick(View.java:5612)  
                      at android.view.View$PerformClick.run(View.java:22285)  
                      at android.os.Handler.handleCallback(Handler.java:751)  
                      at android.os.Handler.dispatchMessage(Handler.java:95)  
                      at android.os.Looper.loop(Looper.java:154)  
                      at android.app.ActivityThread.main(ActivityThread.java:6123)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)  
                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.database.sqlite.SQLiteDatabase.getVersion()' on a null object reference 
                      at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getWritableDatabase(SQLiteAssetHelper.java:178) 
                      at com.readystatesoftware.sqliteasset.SQLiteAssetHelper.getReadableDatabase(SQLiteAssetHelper.java:254) 
                      at company.app .MyDatabase.randomiseItBro(MyDatabase.java:33) 
                      at company.app .MainActivity.randomise(MainActivity.java:55) 
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at android.view.View$DeclaredOnClickListener.onClick(View.java:4695)  
                      at android.view.View.performClick(View.java:5612)  
                      at android.view.View$PerformClick.run(View.java:22285)  
                      at android.os.Handler.handleCallback(Handler.java:751)  
                      at android.os.Handler.dispatchMessage(Handler.java:95)  
                      at android.os.Looper.loop(Looper.java:154)  
                      at android.app.ActivityThread.main(ActivityThread.java:6123)  
                      at java.lang.reflect.Method.invoke(Native Method)  
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)  
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)  

Antwort

1

Wenn Sie die „Neue Datenbank“ Symbolleiste auf die Schaltfläche klicken, können Sie eine SQLite-Datenbank-Datei erstellen. Wenn Sie Tabellen und Artikel erstellen und dann auf die Schaltfläche "Änderungen schreiben" klicken, aktualisieren Sie diese Datenbankdatei. Sobald Sie die Datenbank-Datei auf die gewünschte Weise haben, das ist die Datei, die Sie in Ihrem assets/ für die Verwendung von SQLiteAssetHelper enthalten.

Die Linux-Edition von DB Browser für SQLite wendet standardmäßig keine Dateierweiterung auf die Datei an. Sie möchten die .db beim Erstellen der Datenbankdatei selbst hinzufügen oder nach dem Erstellen umbenennen.

+0

Ich habe das versucht, aber weiterhin Fehler bekommen. Meine Recherchen haben mich dazu gebracht zu glauben, dass meine Datenbankdatei im falschen Format ist; Wollen Sie sagen, dass die Datei in der Form 'CREATE TABLE' usw. erscheinen soll? –

+0

@TomJames: Nein. Wenn Sie den Anweisungen folgen, die ich umrissen habe, erhalten Sie eine SQLite-Datenbankdatei, die von SQLite-Clients neben DB Browser für SQLite verwendet werden kann (z. B. 'sqlite3'-Befehlszeilentool). In Bezug auf Ihre Stack-Trace, vollständig deinstallieren Sie die App, dann versuchen Sie es erneut zu installieren und zu starten. Außerdem scheinen FWIW, Ihre 'applicationId' und der Datenbankdateiname Leerzeichen zu enthalten, obwohl ich vermute, dass dies ein Artefakt dafür ist, wie Sie das Material zu Ihrer Frage gepostet haben. – CommonsWare

+0

Ich verstehe jetzt, Sie haben meine Frage gelöst. Danke, dass Sie geduldig sind. und ja, das war nur ich hastig über die Bewerbung und Firmennamen. –

0

Sie eine Datei erstellen kann wie eine myfunc.js Datei oder index.html, aber dieses ist mydb.sql mit den Codes. Regelmäßige Word-Datei ab:

CREATE DATABASE activedb; CREATE TABLE table_name ( column1 datatype, column2 datatype, column3 datatype, .... );

dann können Sie verwenden database_name < mydb.sql Ich denke, das ist, was Sie zu tun versuchen. Ich bin nicht sicher.

0

Wenn Sie kümmern richtig in Ihrer Anwendung nehmen werden, um die Datenbank aus dem Vermögen zu Ihrer Datenbank-Verzeichnis zu übertragen, werden Sie dann wahrscheinlich eine der beiden folgenden Anforderungen fehlen:

  1. die Primärschlüssel Bedürfnisse zu benennen _id
  2. die Datenbank benötigt eine spezielle Tabelle, die Sie craete benötigen: CREATE TABLE android_metadata (_id INTEGER PRIMARY KEY, locale TEXT)
Verwandte Themen