Я продолжаю получать ошибку SQLException с этим - PullRequest
0 голосов
/ 03 июля 2011

07-03 01: 52: 08.037: ОШИБКА / AndroidRuntime (627): java.lang.RuntimeException: невозможно запустить действие ComponentInfo {com.fttech.books / com.fttech.books.viewBooks}: android.database.sqlite.SQLiteException: такого столбца нет: author: при компиляции: SELECT book, author, isbn, рейтинг FROM collection

КОД:

public class booksDbAdapter {


private static final String DATABASE_NAME = " data";
private static final String DATABASE_TABLE = "collection";
private static final int DATABASE_VERSION = 1;

public static final String KEY_BOOK = "book";
public static final String KEY_AUTHOR = "author";
public static final String KEY_ISBN = "isbn";
public static final String KEY_RATING = "rating";
public static final String KEY_ROWID = "_id";

private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;


private static final String DATABASE_CREATE = 
        " create table " +  DATABASE_TABLE  + " ("
        + KEY_ROWID + " integer primary key autoincrement,  "
        + KEY_AUTHOR + " text not null, "
        + KEY_BOOK + " text not null, "
        + KEY_ISBN + " text not null, "
        + KEY_RATING + " text not null);";

private final Context mCtx;


public booksDbAdapter (Context ctx){
    this.mCtx = ctx;



        }

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


        }

        @Override
        public void onCreate(SQLiteDatabase db) {
        db.execSQL(DATABASE_CREATE);


        }

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

            mDbHelper =  new DatabaseHelper(mCtx);
            mDb = mDbHelper.getWritableDatabase();
            return this;
        }
        public void close(){
            mDbHelper.close();
        }

        public long createBook(String book, String author, String isbn, String rating){
            ContentValues initialValues = new ContentValues();
            initialValues.put(KEY_BOOK, book);
            initialValues.put(KEY_AUTHOR, author);
            initialValues.put(KEY_ISBN, isbn);
            initialValues.put(KEY_RATING, rating);

            return mDb.insert(DATABASE_TABLE, null, initialValues);

        }
        public boolean deleteBook(long rowId){
            return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;

        }
        public Cursor fetchAllBooks(){          
            return mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_AUTHOR, KEY_ISBN, KEY_RATING}, null, null, null, null, null);
        }
        public Cursor fetchBook(long rowId) throws SQLException{
            Cursor mCursor = 
            mDb.query(DATABASE_TABLE, new String[]{KEY_BOOK, KEY_AUTHOR, KEY_ISBN, KEY_RATING}, KEY_ROWID + "=" +
                        rowId, null, null, null, null);

            if(mCursor != null){
                mCursor.moveToFirst();
            }
            return mCursor;

        }
        public boolean updateBook(long rowId, String book, String author, String isbn, String rating){
            ContentValues args = new ContentValues();
            args.put(KEY_BOOK, book);
            args.put(KEY_AUTHOR, author);
            args.put(KEY_ISBN, isbn);
            args.put(KEY_RATING, rating);
            return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)> 0;


        }

}

Ответы [ 2 ]

0 голосов
/ 03 июля 2011

Действительно ли в вашей таблице есть автор столбца?я предполагаю, что вы добавили этот столбец после создания таблицы с помощью db.execSQL(DATABASE_CREATE);

ваша проблема в том, что у вас нет кода внутри onUpgrade(), поэтому при добавлении нового столбца он не добавляется, поскольку создание базы данных будетприводит к ошибке, что-то вроде «база данных уже существует»

Вам необходимо добавить код в onUpgrade (), который по крайней мере удалит все таблицы, а затем создаст заново.или лучше запустить таблицу изменения и т. д.

, затем вам нужно увеличить int DATABASE_VERSION, чтобы выполнялся onUpgrade ().И, наконец, ваш новый столбец «автор» будет добавлен в таблицу.

Конечно, вы также можете проверить, существует ли столбец, подключившись к вашей базе данных через командную строку

надеюсь, что это поможет

Вот код, который я использую, который может помочь в создании / обновлении.Очевидно, константы создания моей таблицы специфичны для меня ...

Редактировать: ... также у вас нет попыток / ловить вокруг вашей таблицы создания.Я уверен, что если добавить это, вы обнаружите, что команда создания таблицы не выполняется, так как она получает «таблица уже существует и т. Д.»

...
DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    try {
        db.execSQL(CREATE_TABLE_SITE);  
        db.execSQL(CREATE_TABLE_SITE_USER);
        db.execSQL(CREATE_TABLE_ARTICLE);
        db.execSQL(CREATE_TABLE_USER);
    } catch (Exception e) {
        Log.e("dbAdapter", e.getMessage().toString());
    }
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
            + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS user");
    db.execSQL("DROP TABLE IF EXISTS site");
    db.execSQL("DROP TABLE IF EXISTS site_user");
    db.execSQL("DROP TABLE IF EXISTS article");
    onCreate(db); 
}
...
0 голосов
/ 03 июля 2011

Я предлагаю вам запустить .dump базу данных sqlite через командную строку и проверить ее.Затем запустите ваши запросы через командную строку.Если все это работает, поищите опечатки.Также было бы полезно выяснить, какой метод имеет неправильный запрос, чтобы можно было сузить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...