2013-09-06 2 views
4

У меня проблема при вводе данных из CSV. Часть CSV работает, но вставка возвращает следующую ошибку. В основном это говорит о том, что колонки не существует. Ниже приведен код, а также код базы данных.SQLite insert Нет такой ошибки столбца на android

09-06 17:52:22.725: E/AndroidRuntime(19168): FATAL EXCEPTION: main 

09-06 17:52:22.725: E/AndroidRuntime(19168): android.database.sqlite. 
SQLiteException: no such column: Ananas (code 1): , while compiling: 
INSERT INTO food (name, sacharides, glycemia, category1) VALUES  
(Ananas, 13, 45,1) 

09-06 17:52:22.725: E/AndroidRuntime(19168):  
at android.database.sqlite.SQLiteConnection.nativePrepareStatement 
(Native Method) 

Вот код, который терпит неудачу.

  FoodDatabase myHelper = new FoodDatabase(getApplicationContext()); 
      myDatabase = myHelper.getReadableDatabase(); 

      String[] nextLine; 
      try { 
       while ((nextLine = reader.readNext()) != null) { 
        // nextLine[] is an array of values from the line 
        System.out.println(nextLine[0]+ " " + nextLine[1] 
          +" "+ nextLine[2]); 

        String sql = "INSERT INTO food (name, sacharides, glycemia, category1) " + 
          "VALUES (" + nextLine[0] + ", " + nextLine[1] + ", " + nextLine[2]+ "," + nextLine[3] +")"; 
       // myDatabase.rawQuery(sql, null); 
        myDatabase.execSQL(sql); 
       } 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

Здесь как выглядит база данных.

public class FoodDatabase extends SQLiteOpenHelper { 

    public static final String TABLE_FOOD = "food"; 
    public static final String COLUMN_ID = "id"; 
    public static final String COLUMN_NAME = "name"; 
    public static final String COLUMN_SACHARIDES = "sacharides"; 
    public static final String COLUMN_SACHARIDESPORTION = "sacharides_per_portion"; 
    public static final String COLUMN_PORTIONSIZE = "portion_size"; 
    public static final String COLUMN_GLYCEMIA = "glycemia"; 
    public static final String COLUMN_CATEGORY1 = "category1"; 
    public static final String COLUMN_CATEGORY2 = "category2"; 
    public static final String COLUMN_CATEGORY3 = "category3"; 




    private static final String DATABASE_NAME = "tables.db"; 
    private static final int DATABASE_VERSION = 1; 

    // Database creation sql statement 
    private static final String DATABASE_CREATE = "create table " 
     + TABLE_FOOD + "(" + COLUMN_ID 
     + " integer primary key autoincrement, " + COLUMN_NAME 
     + " text," + COLUMN_SACHARIDES 
     + " real," + COLUMN_PORTIONSIZE 
     + " integer," + COLUMN_SACHARIDESPORTION 
     + " real," + COLUMN_GLYCEMIA 
     + " integer,"+ COLUMN_CATEGORY1 
     + " integer," +COLUMN_CATEGORY2 
     + " integer," +COLUMN_CATEGORY3 
     + " integer);"; 

    public FoodDatabase(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

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

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w(FoodDatabase.class.getName(), 
     "Upgrading database from version " + oldVersion + " to " 
      + newVersion + ", which will destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_FOOD); 
    onCreate(db); 
    } 

ответ

13

Я не уверен, но, возможно, придется иметь одиночные кавычки '' вокруг строк внутри VALUES. Try:

String sql = "INSERT INTO food (name, sacharides, glycemia, category1) " + 
          "VALUES ('" + nextLine[0] + "', '" + nextLine[1] + "', '" + nextLine[2]+ "', '" + nextLine[3] +"')"; 
+0

он сделал трюк, спасибо – totpiko

+0

Рад, что это помогло. :) –

+0

на самом деле проблема, кажется, глубже работает, когда я убираю гликемию, но когда я добавляю 4 вещи сразу, это провалится независимо от того, как я меняю позиции и т. Д. – totpiko

1

В моем случае,

, к сожалению, имя таблицы несовпадающими. : ^) отдыха. и продолжаем!

Смежные вопросы