В Android, текстовое поле sqlite извлекается с использованием getBlob, а не getString - PullRequest
1 голос
/ 05 февраля 2011

Я пытаюсь создать приложение для Android с предварительно заполненной базой данных. Узнав о том, как это сделать, я наткнулся на статью http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/, которая в основном берет существующую базу данных sqlite и направляет ее в нужное место на устройстве Android. Данные, с которыми я работал, были обработаны в ruby, поэтому я взял гем sqlite и создал базу данных примерно так.

db = SQLite3::Database.new( "cards.db" )
db.execute("CREATE TABLE android_metadata (locale TEXT DEFAULT \"en_US\")")
db.execute("INSERT INTO android_metadata VALUES (\"en_US\")")

db.execute("
  CREATE TABLE #{@@card_table_name} (
  _id INTEGER PRIMARY KEY,
  name TEXT UNIQUE
  )")

cards.each do |card|
  begin
    db.execute("INSERT INTO #{@card_table_name} (_id, name) VALUES (?, ?)",
               card.id, card.name)
  rescue => e
    puts "#{card.name} (#{card.id})"
    puts e
  end
end

Когда я захожу в базу данных, как из сценария ruby, так и из использования adb и проверки базы данных на эмуляторе, я получаю это для схемы.

sqlite> .schema
CREATE TABLE Cards (
  _id INTEGER PRIMARY KEY,
  name TEXT UNIQUE
  );

Однако, когда я извлекаю данные обратно в мое приложение, getString не может обработать имя, в частности, этот блок попадает в предложение исключения и успешно печатает имя в этом блоке

Cursor cursor = myDataBase.query("Cards", new String[] {"_id", "name"}, null, null, null, null, null, "5");
while (cursor.moveToNext()) {
    try {
        cards.add(new Card(cursor.getInt(0), new String(cursor.getString(1))));
    } catch (Exception e) {
        byte[] blob = cursor.getBlob(1);
        String translated = new String(blob);
        Log.i(MagicApp.TAG, "DB retrival blew up on " + cursor.getInt(0) + ", " + blob + " : " + translated);
        e.printStackTrace();
    }
}

Я могу с этим справиться, но, похоже, мне не следовало этого делать. Кто-нибудь еще сталкивался с этим или знает, что я делаю не так?

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