Android 2.3 Sqlite Проблемы с вставкой - PullRequest
0 голосов
/ 31 января 2011

У меня прямой вопрос, я думаю, что мне не хватает некоторого смысла.Мое тестовое приложение разворачивается на эмуляторе, в AVD с виртуальной SD-картой 30 мегабайт.Когда я вызываю следующее из моей основной деятельности:

DatabaseManager.Initialize(this);
DatabaseManager.getEntities();

Мое приложение вылетает, и отладчик говорит, что нет такой таблицы!Таблица ITEM создается в onCreate () моего помощника по базе данных, а правильно вызывается (пошаговая отладка).Что мне там не хватает?

менеджер баз данных

public class DatabaseManager {

public static final String ITEM_CONTACT = "CONT";
public static final String ITEM_FILE = "FILE";
public static final String ITEM_APP = "AAPP";
public static final String ITEM_OPT = "OPTS";


private static final String DATABASE_NAME = "androfast.sqlite3.db";
private static final Integer DATABASE_VERSION = 1;
private static final String TABLE_ITEM = "ITEM";
private static final String TABLE_KEYWORD = "KEYWORD";

private static final String DATABASE_SCHEMA_FILE = "schema.sql";

public static final String ITEM_COLUMN_ID = "id";
public static final String ITEM_COLUMN_NAME = "name";
public static final String ITEM_COLUMN_PACKAGE = "pkg";
public static final String ITEM_COLUMN_TYPE = "kind";
public static final String ITEM_COLUMN_PRIORITY = "karma";

public static final String KEYWORD_COLUMN_ID = "id";
public static final String KEYWORD_COLUMN_VALUE = "word";
public static final String KEYWORD_COLUMN_PRIORITY = "karma";

private static SQLiteDatabase dbSqlite;
private static DatabaseHelper dbHelper;
private static Context context;

public static void Initialize(Context ctx) throws IOException{
    context = ctx;
    InputStream is = ctx.getAssets().open(DATABASE_SCHEMA_FILE);
    BufferedReader r = new BufferedReader(new InputStreamReader(is));
    StringBuilder strQuery = new StringBuilder("");

    String s;

    while ((s = r.readLine()) != null){
        strQuery.append(s);
    }
    r.close();

    dbHelper = new DatabaseHelper(ctx, DATABASE_NAME,null, DATABASE_VERSION, strQuery.toString());
    dbSqlite = dbHelper.getWritableDatabase();
}

public static SQLiteDatabase getSqliteDatabase(){
    return dbSqlite;
}

public static void runQuery(String strQuery){
    dbSqlite.execSQL(strQuery);
}

public static List<Item> getEntities(){
    ArrayList<Item> items = new ArrayList<Item>();
    Cursor cursor;

    dbSqlite.execSQL("INSERT INTO ITEM (name, pkg, kind) VALUES('Don Coreleone', 'life.thug.jail', 'CONT')");
    dbSqlite.execSQL("INSERT INTO ITEM (name, pkg, kind) VALUES('slavery.png', 'life.thug.jail', 'FILE')");
    dbSqlite.execSQL("INSERT INTO ITEM (name, pkg, kind) VALUES('Alcatraz', 'life.thug.jail', 'AAPP')");
    dbSqlite.execSQL("INSERT INTO ITEM (name, pkg, kind) VALUES('BLUETOOTH', 'life.thug.jail', 'OPTS')");
    dbSqlite.execSQL("INSERT INTO ITEM (name, pkg, kind) VALUES('Che Guevara', 'life.thug.jail', 'CONT')");

    cursor = dbSqlite.query(TABLE_ITEM, null,null,null,null,null,null);

    if (cursor.moveToFirst()){
        do{
            Log.d("APP/DB", cursor.getString(cursor.getColumnIndex(ITEM_COLUMN_NAME)));
        }while(cursor.moveToNext());
    }

    cursor.close();

    return items;
}

}

помощник базы данных

public class DatabaseHelper extends SQLiteOpenHelper
{
private static final String LOG_TAG = "SQLiteOpenHelper";
private String dbCreateQuery;

public DatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, String dbCreate) {
    super(context, name, factory, version);
    dbCreateQuery = dbCreate;
}

@Override
public SQLiteDatabase getWritableDatabase() {
    return super.getWritableDatabase();    //To change body of overridden methods use File | Settings | File Templates.
}

@Override
public SQLiteDatabase getReadableDatabase() {
    return super.getReadableDatabase();    //To change body of overridden methods use File | Settings | File Templates.
}

@Override
public void close() {
    super.close();    //To change body of overridden methods use File | Settings | File Templates.
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
    sqLiteDatabase.execSQL(dbCreateQuery);
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
    Log.w(LOG_TAG,"Upgrading database from version " + i + " to version " + i1);
    // No need to do drops of tables, these must be included in the schema.sql file
    onCreate(sqLiteDatabase);
}

@Override
public void onOpen(SQLiteDatabase db) {
    super.onOpen(db);
}
}

Спасибо за ваши указанияребята

С уважением,

Милуд Б.

1 Ответ

0 голосов
/ 07 февраля 2011

Я получил проблему!

Все в следующем утверждении:

* public void execSQL (String sql)

Так как: API уровня 1 Выполнить single SQL-оператор, который не является запросом.Например, CREATE TABLE, DELETE, INSERT и т. Д. Несколько операторов, разделенных точкой с запятой , не поддерживаются .Принимает блокировку записи *

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