Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLite insert No such column error on android

I have problem when inserting data from CSV. The CSV part works but the insert returns following error. Basically it says that there does not exist the column. Below this is the code and also the code of the database.

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)

Here is the code which fails.

            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();
            }

Here goes how the database looks.

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);
  }
like image 934
totpiko Avatar asked Sep 06 '13 16:09

totpiko


2 Answers

I am not sure but you might need to have single quotes '' around the strings inside VALUES. Try:

String sql = "INSERT INTO food (name, sacharides, glycemia, category1) " +
                            "VALUES ('" + nextLine[0] + "', '" + nextLine[1] + "', '"  + nextLine[2]+ "', '" + nextLine[3] +"' )";
like image 53
Shobhit Puri Avatar answered Sep 22 '22 16:09

Shobhit Puri


In my case,

unfortunately table name is mismatched. :^) take a rest. and going on!

like image 36
Kernelzero Avatar answered Sep 22 '22 16:09

Kernelzero