[英]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.