2013-03-05 4 views
0

Я пытаюсь изучить SQLite, пробовав основные вещи и (как и ожидалось), это действительно не работает.«таблица * не имеет столбца с именем *» error, SQLite

Я попытался создать другую БД (другой файл), но ошибка остается прежней.

03-05 17:20:18.989: D/myLogs(1323): --- Insert in mytable: --- 
03-05 17:20:18.999: E/SQLiteLog(1323): (1) table mytable has no column named date 
03-05 17:20:19.199: E/SQLiteDatabase(1323): Error inserting time=asd date=asd glucose=adf 
03-05 17:20:19.199: E/SQLiteDatabase(1323): android.database.sqlite.SQLiteException: table mytable has no column named date (code 1): , while compiling: INSERT INTO mytable(time,date,glucose) VALUES (?,?,?) 

здесь выход LogCat: http://s15.postimage.org/soak9ifbf/androidlog.png (не может добавлять изображения, должны дать вам ссылку)

В принципе, он говорит, что нет столбца с именем «дата»

Вот код:

package com.example.prototype2; 



import android.os.Bundle; 
import android.app.Activity; 
import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.support.v4.app.NavUtils; 

public class AddGlucose extends Activity implements OnClickListener { 

final String LOG_TAG = "myLogs"; 

Button btnAdd, btnRead, btnClear; 
    EditText etGlucose, etTime, etDate; 

    DBHelper dbHelper; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_add_glucose); 
    // Show the Up button in the action bar. 
    setupActionBar(); 

    btnAdd = (Button) findViewById(R.id.btnAdd); 
    btnAdd.setOnClickListener(this); 

    btnRead = (Button) findViewById(R.id.btnRead); 
    btnRead.setOnClickListener(this); 

    btnClear = (Button) findViewById(R.id.btnClear); 
    btnClear.setOnClickListener(this); 

    etGlucose = (EditText) findViewById(R.id.etGlucose); 
    etTime = (EditText) findViewById(R.id.etTime); 
    etDate = (EditText) findViewById(R.id.etDate); 
    dbHelper = new DBHelper(this); 
} 

/** 
* Set up the {@link android.app.ActionBar}. 
*/ 
private void setupActionBar() { 

    getActionBar().setDisplayHomeAsUpEnabled(true); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.add_glucose, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     // This ID represents the Home or Up button. In the case of this 
     // activity, the Up button is shown. Use NavUtils to allow users 
     // to navigate up one level in the application structure. For 
     // more details, see the Navigation pattern on Android Design: 
     // 
     // http://developer.android.com/design/patterns/navigation.html#up-vs-back 
     // 
     NavUtils.navigateUpFromSameTask(this); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    ContentValues cv = new ContentValues(); 
    String glucose = etGlucose.getText().toString(); 
    String time = etTime.getText().toString(); 
    String date = etDate.getText().toString(); 

    SQLiteDatabase db = dbHelper.getWritableDatabase(); 

    switch (v.getId()) { 
    case R.id.btnAdd: 
     Log.d(LOG_TAG, "--- Insert in mytable: ---"); 

     cv.put("glucose", glucose); 
     cv.put("time", time); 
     cv.put("date", date); 
    long rowID = db.insert("mytable", null, cv); 
     Log.d(LOG_TAG, "row inserted, ID = " + rowID); 
     break; 

    case R.id.btnRead: 
     Log.d(LOG_TAG, "--- Rows in mytable: ---"); 
     Cursor c = db.query("mytable", null, null, null, null, null, null, null); 
     if (c.moveToFirst()) { 
      int idColIndex = c.getColumnIndex("id"); 
      int glucoseColIndex = c.getColumnIndex("glucose"); 
      int timeColIndex = c.getColumnIndex("time"); 
      int dateColIndex = c.getColumnIndex("date"); 

      do {  

       Log.d(LOG_TAG, 
         "ID = " + c.getInt(idColIndex) + 
         ", glucose = " + c.getString(glucoseColIndex) + 
         ", time = " + c.getString(timeColIndex) + ", date = " + c.getString(dateColIndex)); 
      } while (c.moveToNext()); 
     } else 
      Log.d(LOG_TAG, "0 rows"); 
     c.close(); 
     break; 

case R.id.btnClear: 
     Log.d(LOG_TAG, "--- Clear mytable: ---"); 

     int clearCount = db.delete("mytable", null, null); 
     Log.d(LOG_TAG, "deleted rows count = " + clearCount); 
     break; 
    } 
    dbHelper.close(); 
    } 

class DBHelper extends SQLiteOpenHelper { 

     public DBHelper(Context context) { 

      super(context, "mytable", null, 1); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      Log.d(LOG_TAG, "--- onCreate database ---"); 
      // создаем таблицу с полями 
      db.execSQL("create table mytable (" 
       + "id integer primary key autoincrement," 
       + "glucose text," 
       + "time text" + "date text" + ");"); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

     } 
     } 

} 
+1

Пожалуйста, разместите вывод logcat как текст в своем вопросе. – harpun

+0

03-05 17: 20: 18.989 : D/myLogs (1323): --- Вставить в таблицу: --- 03-05 17: 20: 18.999: E/SQLiteLog (1323): (1) таблица mytable не имеет столбца с именем date 03-05 17 : 20: 19.199: E/SQLiteDatabase (1323): Ошибка ввода времени = asd date = asd glucose = adf 03-05 17: 20: 19.199: E/SQLiteDatabase (1323): android.database.sqlite.SQLiteException: таблица mytable не имеет столбца с именем date (код 1): при компиляции: INSERT INTO mytable (время, дата, глюкоза) VALUES (?,?,?) –

ответ

5

ошибка как раз говорит, что таблица mytable не содержит требуемый столбец date. Никакой магии, кроме этого.

Вы должны снова и снова создать таблицу и убедиться, что она имеет правильные столбцы. Обратите внимание, что ваш метод onCreate содержит ошибку. A , отсутствует после time text. Таким образом, ваша таблица DB даже не создается в этом методе, поскольку SQL недействителен.

Попробуйте создать таблицу в onCreate() со следующим кодом:

 db.execSQL("create table mytable (" 
      + "id integer primary key autoincrement," 
      + "glucose text," 
      + "time text," // added a ',' 
      + "date text" + ");"); 
+0

стыдно за меня, я смотрел на него целую вечность и не замечал, что –

+0

Я тебя люблю, ты Верно. Ты мой спасатель –

+0

@ МихаилСтепанов, ты желанный :) – harpun

0

Только добавление , будет делать трюк create table SQL не удалось создать таблицу таким образом, он использует предыдущую версию таблицы

0

У меня была эта ошибка, когда я был на 100% уверен, что моя таблица содержала этот столбец. После нескольких попыток ВСЕГДА я мог, я проверил таблицу и обнаружил, что у меня все еще были имена старых столбцов, которые я изменил, внося изменения в мой код и эти столбцы имена не совпадали с именами столбцов в моем коде. Я удалил приложение на своем устройстве и переустановил его, и проблема была решена.

0

проверить, что ваши столбцы соответствуют заклинанию и вставляются в запрос. Также проверьте правильность вставки двоеточия и запятые (,) и (").

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