2016-07-10 3 views
1

Обычно, когда эта проблема возникает, это из-за недостающих котировок. Но этот столбец INTEGER, и я пытаюсь поместить в него целочисленное значение. Тем не менее, эта ошибка выскакивает:SQLiteException: no такой столбец: 1 (код 1):

android.database.sqlite.SQLiteException: no such column: 1 (code 1): , while compiling: INSERT INTO Artista (id, nome) VALUES (1, '19')

Мой код:

String CREATE_TABLE_ORIGEM = 
      "CREATE TABLE Origem" + 
      "(" + 
       "id INTEGER PRIMARY KEY, " + 
       "nome TEXT" + 
      ")"; 

    String CREATE_TABLE_ARTISTA = 
      "CREATE TABLE Artista" + 
      "(" + 
       "id INTEGER PRIMARY KEY, " + 
       "nome TEXT" + 
      ")"; 

    db.execSQL(CREATE_TABLE_ORIGEM); 
    db.execSQL(CREATE_TABLE_ARTISTA); 

    String INSERT_ORIGEM = "INSERT INTO Origem (id, nome)"; 
    String INSERT_ARTISTA = "INSERT INTO Artista (id, nome)"; 

    String line; 
    try{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(myContext.getAssets().open("origem.txt"), "UTF-8")); 
     try { 
      while ((line = reader.readLine()) != null) 
       db.execSQL(INSERT_ORIGEM + " VALUES (" + line + ")"); 
     } catch(Exception e) { 
      throw new RuntimeException(e); 
     } finally { 
      reader.close(); 
     } 

     reader = new BufferedReader(new InputStreamReader(myContext.getAssets().open("artista.txt"), "UTF-8")); 
     try { 
      while ((line = reader.readLine()) != null) 
       db.execSQL(INSERT_ARTISTA + " VALUES (" + line + ")"); 
     } catch(Exception e) { 
      throw new RuntimeException(e); 
     } finally { 
      reader.close(); 
     } 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 

И это те txts я использую для заполнения таблицы:
origem.txt: http://pastebin.com/Vk2wHnm5
Артиста. txt: http://pastebin.com/wfWSbvfR

Самое забавное: стол Origem имеет одинаковый формат, но у меня нет никаких ошибок;

ответ

1

Ваш текстовый файл содержит невидимый символ управления в начале (вероятно, символ порядка байтов UTF-8). Убери это.

+0

Фактически, порядок байтов UTF-8 вставлен читателем как-то. Я добавил дополнительную строку в файл и сделал первый вызов readLine(), прежде чем вставлять элементы в базу данных – Lucas

0

Я помог кому-то с аналогичной проблемой некоторое время назад. check my answer и посмотреть, могут ли предложения быть полезными для вас.

Короче говоря, если вы внесли изменения DDL в течение долгого времени, вы можете работать с более старой версией схемы, чем вы осознаете:

  • , если вы можете, потянуть вниз копию БД с помощью DDMS и проверить схему, или
  • попробуйте удалить и повторно установить приложение с нуля, чтобы обеспечить вам самую последнюю версию схемы

надеюсь, что это помогает в некотором роде.

-1

Вы можете попытаться очистить данные своего приложения непосредственно с вашего AVD или реального устройства, чтобы «обновить» ваши таблицы.

  • Перейти в Настройки -> Приложения -> Ваше приложение -> Хранение -> Очистить данные.
Смежные вопросы