2012-03-14 4 views
1

私のsqldatabaseで作業していますが、 "KEY_NAME"のコードの上にカラムが明確に定義されているにもかかわらず、私のプログラムでこのようなカラムがないというエラーが表示されるため、移動できません。私はもうコードを投稿する必要があります私に教えてくださいありがとう! 私は自分のデータベースを掲載しています。 ** SQLデータベース列エラー、または存在しません。

* ****最近logcat情報 3月14日01:24:54.285:E /データベース(26073)を:android.database.sqlite.SQLiteException:テーブルPeopleTableには列がありませんperson_name::コンパイル中に:INSERT INTO PeopleTable(persons_hotness、persons_name)VALUES(?,?);


public class HotOrNot { 
    public static final String KEY_ROWID = "_id"; 
    public static final String KEY_NAME = "persons_name"; 
    public static final String KEY_HOTNESS = "persons_hotness"; 

    private static final String DATABASE_NAME = "HotOrNotDB"; 
    private static final String DATABASE_TABLE = "PeopleTable"; 
    private static final int DATABASE_VERSION = 1; 

    private DbHelper ourHelper; 
    private final Context ourContext; 
    private SQLiteDatabase ourDatabase; 

    private static class DbHelper extends SQLiteOpenHelper { 
     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub 
      db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
        + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME 
        + " TEXT NOT NULL, " + KEY_HOTNESS + " TEXT NOT NULL);"); 

      // String sql = String.format("create table %s " 
      // + "(%s int primary key, %s int, %s text, %s text)", 
      // DATABASE_TABLE, KEY_ROWID, KEY_NAME, KEY_HOTNESS); 
      // db.execSQL(sql); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE); 
      onCreate(db); 
     } 
    } 

    public HotOrNot(Context c) { 
     ourContext = c; 
    } 

    public HotOrNot open() throws SQLException { 
     ourHelper = new DbHelper(ourContext); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 

    public void close() { 
     ourHelper.close(); 
    } 

    public long createEntry(String name, String hotness) { 
     // TODO Auto-generated method stub 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_NAME, name); 
     cv.put(KEY_HOTNESS, hotness); 
     return ourDatabase.insert(DATABASE_TABLE, null, cv); 
    } 

    public String getData() { 
     // TODO Auto-generated method stub 
     String[] columns = new String[] { KEY_ROWID, KEY_NAME, KEY_HOTNESS }; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, 
       null, null); 
     String result = ""; 
     int iRow = c.getColumnIndex(KEY_ROWID); 
     int iName = c.getColumnIndex(KEY_NAME); 
     int iHotness = c.getColumnIndex(KEY_HOTNESS); 

     for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
      result = result + c.getString(iRow) + " " + c.getString(iName) 
        + " " + c.getString(iHotness) + "\n"; 
     } 
     return result; 
    } 
} 
+0

まだ有効な答えを探しています:\ –

答えて

2

+ KEY_NAME ++ "KEY_NAME" +(二重引用符なし)を交換してみてください。この行はpublic void onCreate(SQLiteDatabase db)

+0

スピーディーな応答と良い検索をお寄せいただきありがとうございますが、私はまだ類似したlogcatエラーが出ます。私のタイプミスを探していますが、何も見つかりません –

+0

データベースを再度作成します。アンインストールし、アプリケーションをインストールします。 – dira

2

内にあるこの

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
      + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME 
      + " TEXT NOT NULL, " + KEY_HOTNESS + " TEXT NOT NULL);"); 
+0

+1既存のコードでは、変数KEY_NAMEの内容ではなく、「KEY_NAME」という名前の列を持つテーブルが作成されていました。 –

3

db.execSQL( "CREATE TABLE" を+ DATABASE_TABLE + "(" + KEY_ROWID + "INTEGER PRIMARY KEY AUTOINCREMENT、KEY_NAMEテキストであなたのdb.execSQLクエリを置き換えますNULLでない、 "+ KEY_HOTNESS +" TEXT NOT NULL); ");

上記の変更を試してください。問題はKEY_NAMEの前にスペースが追加されている可能性があります。 #

+0

それは動作しませんでした:( –

関連する問題