Java Android:表中没有名为“的列”;变量名";MySql数据库错误

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

当我尝试在我的数据库中放入一个新条目时,我得到了和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.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;