简体   繁体   English

android sqlite异常未找到列名

[英]android sqlite exception no column name found

I am trying insert values into sqlite database android, The following is ma code 我正在尝试将值插入sqlite数据库android,以下是ma代码

public class MySQLiteOpenHelper extends SQLiteOpenHelper
{
  public static final String COL_DATETIME = "date_time";    
  public static final String COL_IMEI = "imei";
  public static final String COL_CATEGORY = "category";
  public static final String COL_DESCRIPTION= "desc";
  public static final String COL_LAT = "locationx";
  public static final String COL_LONG = "locationy";

  public static final String DATABASE_NAME = "cmas";
  public static final String TABLE_NAME = "survey_details";

  public MySQLiteOpenHelper(Context paramContext, String paramString, SQLiteDatabase.CursorFactory paramCursorFactory, int paramInt)
  {
    super(paramContext, paramString, paramCursorFactory, paramInt);
  }

  public void onCreate(SQLiteDatabase paramSQLiteDatabase)
  {
    paramSQLiteDatabase.execSQL("CREATE TABLE survey_details(date_time TEXT,imei TEXT,category TEXT,locationx REAL,locationy REAL,desc TEXT);");
  }

  public void onUpgrade(SQLiteDatabase paramSQLiteDatabase, int paramInt1, int paramInt2)
  {
  }
}

In button listener i am doing like this: 在按钮侦听器中,我这样做:

ContentValues localContentValues = new ContentValues();
                  localContentValues.put("date_time","zzz");
                  localContentValues.put("imei","a");
                  localContentValues.put("category","b");
                  localContentValues.put("locationx",99.999);
                  localContentValues.put("locationy", 11.77);
                  localContentValues.put("desc", "c");
                  MainActivity.this.profile.insert("survey_details", "date_time", localContentValues);

But i am getting an exception like the following: 但是我遇到了如下异常:

04-21 16:54:51.036: E/SQLiteLog(953): (1) table survey_details has no column named description
04-21 16:54:51.056: E/SQLiteDatabase(953): Error inserting category=b locationx=99.999 locationy=11.77 date_time=zzz description=c imei=a
04-21 16:54:51.056: E/SQLiteDatabase(953): android.database.sqlite.SQLiteException: table survey_details has no column named description (code 1): , while compiling: INSERT INTO survey_details(category,locationx,locationy,date_time,description,imei) VALUES (?,?,?,?,?,?)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at com.example.cmas.MainActivity$4.onClick(MainActivity.java:251)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.view.View.performClick(View.java:4084)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.view.View$PerformClick.run(View.java:16966)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.os.Handler.handleCallback(Handler.java:615)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.os.Handler.dispatchMessage(Handler.java:92)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.os.Looper.loop(Looper.java:137)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at android.app.ActivityThread.main(ActivityThread.java:4745)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at java.lang.reflect.Method.invokeNative(Native Method)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at java.lang.reflect.Method.invoke(Method.java:511)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
04-21 16:54:51.056: E/SQLiteDatabase(953):  at dalvik.system.NativeStart.main(Native Method)

I tried without the field "desc", it is working without that.What should I do? 我尝试不使用“ desc”字段,但没有使用该字段。我该怎么办?

You can't use desc , because it's a reserved keyword (it's meant to be used with the ORDER BY clause): 您不能使用desc ,因为它是一个保留关键字(它应与ORDER BY子句一起使用):

public static final String COL_DESCRIPTION= "desc";

and

paramSQLiteDatabase.execSQL("CREATE TABLE survey_details(date_time TEXT,imei TEXT,category TEXT,locationx REAL,locationy REAL,desc TEXT);");

and

localContentValues.put("desc", "c");

use: 采用:

public static final String COL_DESCRIPTION= "description";

and

paramSQLiteDatabase.execSQL("CREATE TABLE survey_details(date_time TEXT,imei TEXT,category TEXT,locationx REAL,locationy REAL,description TEXT);");

and

localContentValues.put("description", "c");

'desc' is a SQLite 'reserved word'. “ desc”是SQLite的“保留字”。 Best course of action is to rename your column to something else. 最好的做法是将您的列重命名为其他名称。 More here: 更多内容:

https://sqlite.org/lang_keywords.html https://sqlite.org/lang_keywords.html

Another tip, best practice is to always use your static strings when talking to your database. 另一个技巧是,最佳做法是在与数据库对话时始终使用静态字符串。 You've already defined them so why not reuse them. 您已经定义了它们,为什么不重用它们。

localContentValues.put(COL_DESCRIPTION, "iliketurtles");

Change 更改

`localContentValues.put("desc", "c");`

to

localContentValues.put(COL_DESCRIPTION, "c");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM