размещенный ниже код, с которым у меня проблемы. Я сузил вопрос до заявления cursor = db.rawQuery()
.
Почему утверждение неверно? Настройка базы данных кажется правильной, но я не могу запросить ее. Я пробовал и db.query()
и db.rawQuery()
.
Поскольку приложение просто падает при запуске на физическом устройстве (Motorola Atrix, который я использую для тестирования), возможно ли, что некоторые модели не поставляются с SQLite?
public class Database {
private static final String ID_DATE = "id_date";
private static final String ROUND = "round";
private static final String CATEGORY = "category";
private static final String VALUE = "value";
private static final String ANSWER = "answer";
private static final String QUESTION = "question";
private static final String DB_NAME = "database.db";
private static final String DB_TABLE = "clues";
private static final String DB_PATH = "/data/data/es.foo.bar/databases/" + DB_NAME;
private static final int DB_VERSION = 1;
private static class DatabaseHelper extends SQLiteOpenHelper {
private Context c = null;
DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.c = context;
}
public void onCreate(SQLiteDatabase db) {
try {
InputStream is = c.getAssets().open(DB_NAME);
OutputStream os = new FileOutputStream(DB_PATH);
byte[] buffer = new byte[1024];
while (is.read(buffer) > 0) {
os.write(buffer);
}
os.flush();
os.close();
is.close();
} catch (java.io.IOException ex) { }
}
public void onUpgrade(SQLiteDatabase db, int old_v, int new_v) {
}
}
private final Context context;
private DatabaseHelper helpme;
private SQLiteDatabase db = null;
public Database(Context c) {
this.context = c;
}
public Database open() throws SQLException {
helpme = new DatabaseHelper(context);
db = helpme.getWritableDatabase();
return this;
}
public void close() { helpme.close(); }
public boolean askfordata() {
Cursor cursor = null;
cursor = db.rawQuery("select * from clues where question match \'foo\'", null);
if (cursor != null) {
return true;
}
return false;
}
}
и основное (и единственное) действие для приложения:
public class Main extends Activity {
Database db = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView hw = (TextView) findViewById(R.id.helloworld);
db = new Database(this);
db.open();
if (db != null) {
if (db.askfordata()) hw.setText("Worked.");
}
}
public void onDestroy() {
db.close();
super.onDestroy();
}
}
Выход ADB logcat:
01-20 23:35:27.183 22155 22155 E AndroidRuntime: FATAL EXCEPTION: main
01-20 23:35:27.183 22155 22155 E AndroidRuntime: java.lang.RuntimeException:
Unable to start activity ComponentInfo{es.foo.bar/es.foo.bar.Main}:
android.database.sqlite.SQLiteException:
no such table: clues: , while compiling: select * from clues where question match 'foo'
Значит ли это, что мой стол никогда не создавался? Я переместил свой стол из папки /assets/
в нужное место методом onCreate
. Я могу использовать sqlite3
для просмотра файла .db
на моем компьютере и перечисления там таблиц. Это показывает все мои таблицы:
clues clues_content clues_segdir clues_segments
Примечание: я пропустил import
с, чтобы сэкономить место. Заранее спасибо за любые идеи.