私のアプリケーションには、アセットフォルダにSQLiteデータベースがあります。ユーザーがアプリケーションを起動すると、データベースとテーブルも作成されます。特定のバージョンのHTC DESIREを使用したSQLiteのテーブルがありませんHD
これは、多くのデバイス(Nexus One、Htc Magic、SGS、X10 ...、さらにHtc Desire HD v2.2)でうまく動作します。 私のアプリケーションはAndroidのすべてのバージョンで動作します(私のデバイス(1.6,2.2,2.2.1 Htcマジック)とエミュレータ(v1.3からv2.3まで)でテスト済みです。
私はただ問題ありますコンパイル中に、::HTC DESIRE HDビデオv2.2.1 1.72.405.3
logcat:。
android.database.sqlite.SQLiteException:いいえ、そのような表:LISTEはアンドロイドでLISTE から_idを選択します。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2833) android.app.ActivityThread android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2179)android.osで でandroid.app.ActivityThread.access $ 2300(ActivityThread.java:136) で.handleLaunchActivity(ActivityThread.java:2854) 。 Handler.dispatchMessage(Handler.java:99)android.os.Looper.loop(Looper.java:143)の とandroid.app.ActivityThread.main(ActivityThread.java:5068) (java.lang.reflect)です。 Method.invokeNative(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:521) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858) at com .android.internal.os.ZygoteInit.main(ZygoteInit.java:616) at dalvik.system.NativeStart.main(ネイティブメソッド) 原因:android.database.sqlite.SQLiteException:そのようなテーブルがありません:LISTE:コンパイル中に:select LISTのIDを android.database.sqlite.SQLiteCompiledSql.native_compile(ネイティブメソッド) android.database.sqlite.SQLiteCompiledSql .compile(SQLiteCompiledSql.java:91) android.database.sqlite.SQLiteCompiledSql(SQLiteCompiledSql.java:64) android.database.sqlite.SQLiteProgram(SQLiteProgram.java:80) android.database.sqlite .SQLiteQuery。(SQLiteQuery.java:46) android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:53) でandroid.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1417)アンドロイドで ました。 database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1387) ... 11 more
私のアプリケーションはデータベースを作成しますが、アセットフォルダのファイルのテーブルはdata\data\packagename\databases\mydatabase
にコピーされません。
マイコード:
public void createDataBase() throws IOException{
boolean dbExist = checkDataBase();
if(dbExist){
//do nothing - database already exist
}else{
//By calling this method and empty database will be created into the default system path
//of your application so we are gonna be able to overwrite that database with our database.
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
private 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))!= -1){
if (length > 0){
myOutput.write(buffer, 0, length);
} }
//Close the streams
myOutput.flush();
myOutput.close();
myInput.close();
}
私はcopydatabase
機能に問題があると思いますが、私は表示されません。
このコードは、HTC DESIRE HD v2.2.1 1.72.405.3以外のすべてのデバイスで正常に動作します。
上記のバージョンのHTC Desireには、どのような問題がありますか?これはどのように救済できますか?
投稿されたコードはデータベースの作成を扱います。あなたのエラーは、データベース内のテーブルから** SELECT **ステートメントを処理します。 –
はい、ユーザーが最初のSQLリクエストを作成したときにデータベースが作成されるため、エラーはSELECT文を処理します。データベースは作成されますが、LISTEテーブルは含まれません。SELECTステートメントエラー – William