2012-04-24 22 views
1

データベースクラスを作成しているうちに、このようなテーブルエラーが発生していませんでした。 logcatはそのようなテーブルはないと言いました。私はいくつかの方法で解決しようとしていますが、残念ながらまだエラーがあります。以下は、コードおよびエラーであるアンドロイドテーブルのエラーがありません

android.database.sqlite.SQLiteExceptionある:コンパイル中、:SELECT * 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 

} 

tbl_categoryからのそのようなテーブル:tbl_category }

+0

このテーブルを作成したコードをチェックしてください.. "tbl_category" ..そのコードに何らかの問題があると思われます..間違った名前..おそらく.. – 5hssba

+0

こんにちは、私はすでにダブルチェックテーブル名とテーブル名です正しい。何か案は ? –

答えて

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); 
関連する問題