2011-07-25 23 views
0

私のアプリで使用してAndroidで返されます使用する既存のsqliteデータベースを使用して、データベースのテーブルのすべてのレコードをリストする必要があります。私はそれに6つのテーブルを持っています。"そのようなテーブルの例外はありません" SQLite

私のSQLiteデータベースのファイル名は次のとおりです。私の資産フォルダに保存されているfestival.sqlite

私は次のコードを使用してレコードをコピーして一覧表示します。しかし、私はこのコードを実行している間、そのようなテーブルの例外を取得します。私はテーブルを持っているsqliteファイルで知っている。

テーブルからレコードを取得する方法。私を助けてください。 私のコード:私は次のメソッドを呼び出す別のアクティビティで

public class main extends SQLiteOpenHelper { 

//The Android's default system path of your application database. 
private static String DB_PATH = "/data/data/com.sql.test/databases/"; 
private static String DB_NAME = "festival"; 
private SQLiteDatabase myDataBase; 
private final Context myContext; 

public main(Context context) { 

    super(context, DB_NAME, null, 1); 
    this.myContext = context; 
} 

public void createDataBase() throws IOException{ 
    boolean dbExist = checkDataBase(); 
    if(dbExist){ 
     //do nothing - database already exist 
     Log.e("database", "database exist"); 
    }else{ 
     Log.e("database","not exist"); 
     this.getReadableDatabase().close(); 
     try { 
      copyDataBase(); 

     } catch (IOException e) { 
      //throw new Error("Error copying database"); 
      Log.e("exception-1",e.getMessage()); 
      Log.e("exception-1", "Error copying database"); 
     } 
    } 
} 
private boolean checkDataBase(){ 
    SQLiteDatabase checkDB = null; 
    try{ 
     String myPath = DB_PATH + DB_NAME; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); 
    }catch(SQLiteException e){ 
    } 
    if(checkDB != null){ 
     checkDB.close(); 
    } 
    return checkDB != null ? true : false; 
} 

private void copyDataBase() throws IOException{ 
    InputStream myInput = myContext.getAssets().open(DB_NAME); 
    String outFileName = DB_PATH + DB_NAME; 
    OutputStream myOutput = new FileOutputStream(outFileName); 
    byte[] buffer = new byte[618496]; 
    int length; 
    while ((length = myInput.read(buffer))>0){ 
     myOutput.write(buffer, 0, length); 
    } 
    //Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 

} 
public void openDataBase() throws SQLException{ 
    //Open the database 
    String myPath = DB_PATH + DB_NAME; 
    myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE); 
    myDataBase.setVersion(1); 
    myDataBase.setLocale(Locale.getDefault()); 
    myDataBase.setLockingEnabled(true); 
    try{ 
     Cursor cx = myDataBase.rawQuery("SELECT * FROM events" , null); 
     if (cx != null) { 
      if (cx.moveToFirst()) { 
       do { 
       Log.e("ID",String.valueOf(cx.getInt(0))); 
       }while (cx.moveToNext()); 
      } 
     } 
    myDataBase.close(); 
    } 
    catch(Exception e){ 
     Log.e("exception-table", e.getMessage()); 
    } 


} 
public synchronized void close() { 
    if(myDataBase != null) 
     myDataBase.close(); 
    super.close(); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 

} 

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

   main myDbHelper = new main(this); 
    try { 
     myDbHelper.createDataBase(); 
    } catch (IOException ioe) { 
     Log.e("ex-2",ioe.getMessage()); 
    // throw new Error("Unable to create database"); 
    } 


    try { 
     myDbHelper.openDataBase(); 
    }catch(SQLException sqle){ 
    // throw sqle; 
    Log.e("exception",sqle.getMessage()); 
    } 

私のログの猫:

07-25 10:33:30.748: ERROR/Database(823): sqlite3_open_v2("/data/data/com.sql.test/databases/festival", &handle, 1, NULL) failed 
07-25 10:33:30.748: ERROR/database(823): not exist 
07-25 10:33:30.917: ERROR/exception-1(823): festival 
07-25 10:33:30.917: ERROR/exception-1(823): Error copying database 
07-25 10:33:30.998: ERROR/exception-table(823): no such table: events: , while compiling: SELECT * FROM events 
+0

でテーブル名をチェックし、あなたは、Androidのコードでそれを使用する前に、データベース内のandroid_metadataテーブルを追加しましたか? –

+0

私はmeta_dataテーブルの作成やhttp://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/comment-page-1/のように私のコードですべての変更を加えました。しかし、私は同じエラーが表示されます私のログの猫を参照してください –

答えて

0

あなたがandroid_metadataテーブルを追加していない場合は、ちょうどこれを追加し、それは動作しますcomplie。詳細については、

、これは非常に良いチュートリアルです

http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/

+0

私は私のコードでは、meta_dataテーブルを作成し、http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-androidのようにすべての変更を加えた-applications/comment-page-1 /。しかし、私は同じエラーが表示されます私のログの猫を参照してください –

+0

今、あなたのアプリケーションフォルダ内のDDMSに行くと、festival.sqliteを削除し、新しいfestival.sqlite(メタデータテーブルを持つ)をコピーします。またはassetフォルダ内のfestival1.sqliteに名前を変更するとcomplie.itは動作します –

0

資産からデータベースをコピーするには次のリンクを参照してください。また、ケース

http://huuah.com/using-sqlite-from-your-android-app/ または

sencitive http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/comment-page-1/

+0

私はmeta_dataテーブルを作成するように、そしてhttp://www.reigndesign.com/blog/using-your-own- sqlite-database-in-android-applications /コメントページ-1 /しかし、私は同じエラーが私のログ猫を参照してください –

関連する問題