Java Android:表中没有名为“的列”;变量名";MySql数据库错误
当我尝试在我的数据库中放入一个新条目时,我得到了和belowe显示的一样的错误。我在里面搜索了好几个小时,但我没能发现哪里出了问题。任何输入都会很棒 这是来自LogCat的错误Java Android:表中没有名为“的列”;变量名";MySql数据库错误,java,android,sqlite,Java,Android,Sqlite,当我尝试在我的数据库中放入一个新条目时,我得到了和belowe显示的一样的错误。我在里面搜索了好几个小时,但我没能发现哪里出了问题。任何输入都会很棒 这是来自LogCat的错误 02-27 23:02:51.451: E/SQLiteLog(6777): (1) table dager has no column named brutto 02-27 23:02:51.451: E/SQLiteDatabase(6777): Error inserting brutto=0 date=21.03
02-27 23:02:51.451: E/SQLiteLog(6777): (1) table dager has no column named brutto
02-27 23:02:51.451: E/SQLiteDatabase(6777): Error inserting brutto=0 date=21.03.2013
hours=4
02-27 23:02:51.451: E/SQLiteDatabase(6777): android.database.sqlite.SQLiteException:
table dager has no column named brutto (code 1): , while compiling: INSERT INTO
dager(brutto,date,hours) VALUES (?,?,?)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at
android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1467)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1339)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at com.adev.timelonn.DatabaseHandler.addDay(DatabaseHandler.java:79)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at com.adev.timelonn.AddHours.onClick(AddHours.java:99)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.view.View.performClick(View.java:4084)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.view.View$PerformClick.run(View.java:16966)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.os.Handler.handleCallback(Handler.java:615)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.os.Handler.dispatchMessage(Handler.java:92)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.os.Looper.loop(Looper.java:137)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at android.app.ActivityThread.main(ActivityThread.java:4931)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at java.lang.reflect.Method.invokeNative(Native Method)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at java.lang.reflect.Method.invoke(Method.java:511)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558)
02-27 23:02:51.451: E/SQLiteDatabase(6777): at dalvik.system.NativeStart.main(Native
Method)
这就是我在数据库中添加新条目的方式
// # Makes a new object of newday.
AddNewDay newday = new AddNewDay ();
newday._date = "21.03.2013";
newday._id = 1;
newday._hours = 4;
newday._ubtillegg = 1500;
// # Open databse connection and writes new day.
DatabaseHandler connect = new DatabaseHandler (this);
connect.addDay(newday);
// # Updates the dblist with entries.
GlobalVariables.dblist = connect.getAllContacts();
我不确定,但可能您忘记了查询中“ub”和“brutto”字段之前的“,” 字符串CREATE_DAY_TABLE=“CREATE TABLE”+TABLE_DAYS+”(“ +键ID+“整数主键”+“键日期+”文本 +按键时间+“整数主键”+“整数主键”+“整数主键”+“整数主键”+“整数主键”+”;
db.execSQL(创建日表) 所以基本上我找到了解决办法。我仍然不知道这有多愚蠢。而且很明显我的数据库工作超敏感材料!我的问题是我忘记了最后一个“整数值”中的空白。因此,我编写了
“INTEGER”
,而不是“INTEGER”
,这给了我一行名为“bruttoINTEGER”
,而不是“brutto”。所以一个空白就是错误。我将createTable函数重写为:
public void onCreate(SQLiteDatabase db) {
String CREATE_DAY_TABLE = "CREATE TABLE " + TABLE_DAYS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT," + KEY_HOURS + " INTEGER, "
+ KEY_UB + " INTEGER," + KEY_BRUTTO + " INTEGER" + ");";
db.execSQL(CREATE_DAY_TABLE);
}
我同意上面的因扎内的观点。这个问题主要是由语法引起的。例如,以前我的代码是正确的。这是:
String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_MESSAGEADDRESS
+ " TEXT," + COLUMN_MESSAGEBODY + " TEXT " + ")";
the above code was running correct but i added another column and it started causing the mentioned error. below is the erroneous code:
String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_MESSAGEADDRESS
+ " TEXT," + COLUMN_MESSAGEBODY + " TEXT" + COLUMN_MESSAGETIME + " LONG" + ")";
as you can see, when i added the new column i forgot to include a comma after type TEXT. this means that when this code is executed, there will be syntax error as the compiler will read the last part as:
COLUMN_MESSAGEBODY TEXTCOLUMN_MESSAGETIME LONG
as opposed to:
COLUMN_MESSAGEBODY TEXT, COLUMN_MESSAGETIME LONG
solution: ensure that your syntax is correct and you heed to spaces and commas.
更改版本对我来说效果很好您在CREATE_DAY_表格字符串中遗漏了一些逗号。而且,如果没有它们,您就不会有一个名为“brutto”的列。乍一看,您在几个小时后和ub(至少)之后似乎需要它们。此外,您可以通过shell连接到DB并四处查看,这可能会有所帮助(将表结构转储到那里,或者导出它并使用类似SQLite Manager的工具)。哦,修复了这些问题。更新问题。没有更改任何内容,但我认为它修复了可能的错误号2.:)修复数据后是否清除了数据?很可能您的数据库没有重新创建。在一个
CREATE TABLE
cf中不能有多个PRIMARY KEY
子句。如果您“不确定”,请不要发布答案,尤其是如果您所做的只是复制注释。谢谢您的建议。但不幸的是,这并没有改变任何事情。它似乎与将变量传递给列有关。或者创建列字段键。是的,对不起,是我的错,不是副本,我加上“,”我在最后一列声明后有一个逗号(万岁,复制粘贴错误)——————————谢谢先生。。你真让我震惊,我是多么愚蠢,就为了一个小小的空间,我浪费了1个小时。。你救了我的命。。。我只是想找个人踢我的屁股。。我怎么会这么愚蠢。。。干杯1> 从设备上卸载,然后再次运行。或者2>在“DatabaseHandler”类中更改版本
public void onCreate(SQLiteDatabase db) {
String CREATE_DAY_TABLE = "CREATE TABLE " + TABLE_DAYS + "("
+ KEY_ID + " INTEGER PRIMARY KEY," + KEY_DATE + " TEXT," + KEY_HOURS + " INTEGER, "
+ KEY_UB + " INTEGER," + KEY_BRUTTO + " INTEGER" + ");";
db.execSQL(CREATE_DAY_TABLE);
}
String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_MESSAGEADDRESS
+ " TEXT," + COLUMN_MESSAGEBODY + " TEXT " + ")";
the above code was running correct but i added another column and it started causing the mentioned error. below is the erroneous code:
String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY," + COLUMN_MESSAGEADDRESS
+ " TEXT," + COLUMN_MESSAGEBODY + " TEXT" + COLUMN_MESSAGETIME + " LONG" + ")";
as you can see, when i added the new column i forgot to include a comma after type TEXT. this means that when this code is executed, there will be syntax error as the compiler will read the last part as:
COLUMN_MESSAGEBODY TEXTCOLUMN_MESSAGETIME LONG
as opposed to:
COLUMN_MESSAGEBODY TEXT, COLUMN_MESSAGETIME LONG
solution: ensure that your syntax is correct and you heed to spaces and commas.
private static final int VERSION = 4;