2012-04-24 92 views
1

當我創建一個數據庫類時,我被困在沒有這樣的表錯誤的中間。 logcat說沒有這樣的表。我一直試圖用幾種方式解決,不幸的是仍然有一個錯誤。以下均代碼和錯誤是android沒有這樣的表錯誤

android.database.sqlite.SQLiteException:沒有這樣的表:tbl_category:,在編譯:SELECT * FROM tbl_category WHERE IDX = 1

public class DatabaseManager extends SQLiteOpenHelper { 
private SQLiteDatabase db; 
private static Context myContext; 
public static final String DB_NAME = "ykko.db"; 

public static final String name = "name"; 
public static String DB_PATH = "/data/data/com.bit.ykko/databases/"; 

public DatabaseManager(Context context) { 
    super(context, DB_NAME, null, 1); 
    DatabaseManager.myContext = context; 
} 

public void createDataBase() throws IOException { 
    boolean dbExit = checkDataBase(); 

    if (dbExit) { 

    } else { 
     this.getReadableDatabase().getPath(); 

     try { 

      copyDataBase(); 

     } catch (IOException e) { 
      // throw new RuntimeException(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 

private boolean checkDataBase() { 
    SQLiteDatabase checkDb = null; 

    try { 
     String myPath = DB_PATH + DB_NAME; 
     Log.v("Path", myPath); 
     checkDb = SQLiteDatabase.openDatabase(myPath, null, 
       SQLiteDatabase.OPEN_READONLY); 
    } catch (SQLException e) { 

    } 

    if (checkDb != null) { 
     checkDb.close(); 
    } 
    return checkDb != null ? true : false; 
} 

public void copyDataBase() throws IOException { 

    InputStream databaseInput = null; 
    String outFileName = DB_PATH + DB_NAME; 
    OutputStream databaseOutput = new FileOutputStream(outFileName); 

    byte[] buffer = new byte[1024]; 
    int length; 

    databaseInput = myContext.getAssets().open("ykko.sqlite"); 
    while ((length = databaseInput.read(buffer)) > 0) { 
     databaseOutput.write(buffer, 0, length); 
     databaseOutput.flush(); 
    } 
    databaseInput.close(); 

    databaseOutput.flush(); 
    databaseOutput.close(); 
} 

public void openDatabase() throws SQLiteException { 

    String myPath = DB_PATH + DB_NAME; 
    db = SQLiteDatabase.openDatabase(myPath, null, 
      SQLiteDatabase.OPEN_READWRITE); 

} 

public ArrayList<ChineseInfo> getCatByIdx(int idx) { 
    ArrayList<ChineseInfo> list = new ArrayList<ChineseInfo>(); 

    String query = "SELECT * FROM tbl_category WHERE idx = " + idx; 

    Cursor c = this.db.rawQuery(query, null); 

    if (c.moveToFirst()) { 
     do { 
      ChineseInfo ch = new ChineseInfo(); 
      ch.idx = c.getInt(0); 
      ch.name = c.getString(1); 
      ch.mm_name = c.getString(2); 
      list.add(ch); 

     } while (c.moveToNext()); 
    } 
    if (c != null && !c.isClosed()) { 
     c.close(); 
    } 
    return list; 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // TODO Auto-generated method stub 

} 

}

+0

檢查您創建此表的代碼..「tbl_category」..我認爲在代碼中有一些問題..喜歡錯誤的名字..可能.. – 5hssba 2012-04-24 10:56:47

+0

嗨raju,我已經雙重檢查表名和表名是正確。有任何想法嗎 ? – 2012-04-24 11:10:46

回答

0

此問題已得到修復由我自己。該錯誤只發生在仿真器上。它在真實設備上工作正常。

0

爲什麼你在內存中創建數據庫,然後複製粘貼它?如果你想有SD卡上的數據庫,只需從一開始創建SD卡數據庫:

File sdpath = Environment.getExternalStorageDirectory(); 
String dbPath = sdpath.getAbsolutePath() + "/my_dir/mydb.sqlitedb"; 
SQLiteDatabase database = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.CREATE_IF_NECESSARY); 

我希望它能幫助。

0

你可以嘗試下面的東西。

private dbhelper mydbhelper; 
    public static SQLiteDatabase myDataBase; 

... 

     public Cursor getData(int Id){ 
      return myDataBase.query("tbl_category", new String[]{"_id", "column1", "column2", "column3",}, 
        "_id" + " = " + Id, null, null, null, null);} 

在你的活動然後調用像下面

  Cursor cursor = mydbhelper.getData(Id);