Java Android:在SQLite中没有这样的列

Java Android:在SQLite中没有这样的列,java,android,sqlite,Java,Android,Sqlite,我是一个全新的开发人员,我在android中遇到了以下错误: 08-24 23:55:15.744: E/AndroidRuntime(29803): Caused by: android.database.sqlite.SQLiteException: no such column: customerName (code 1): , while compiling: INSERT INTO nncdjiftable (customerName, timeShift, date01, vendo

我是一个全新的开发人员,我在android中遇到了以下错误:

08-24 23:55:15.744: E/AndroidRuntime(29803): Caused by: android.database.sqlite.SQLiteException: no such column: customerName (code 1): , while compiling: INSERT INTO nncdjiftable (customerName, timeShift, date01, vendorGameThemePT, managerSignature, managerDate, jackpotAmount, lessTaxesWithheld, cashierSignature, taxRate, slotAttendantSignature, totalAmountPaid, slotSupervisorMODSignature, customerSignature, date03) VALUES (customerName, timeShift, date01, vendorGameThemePT, managerSignature, managerDate, jackpotAmount, lessTaxesWithheld, cashierSignature, taxRate, slotAttendantSignature, totalAmountPaid, slotSupervisorMODSignature, customerSignature, date03)
这是我的代码:

nncdjifdb.execSQL("CREATE TABLE IF NOT EXISTS nncdjiftable(customerName VARCHAR,timeShift VARCHAR,date01 VARCHAR,vendorGameThemePT VARCHAR,managerSignature VARCHAR,managerDate VARCHAR,jackpotAmount VARCHAR,lessTaxesWithheld VARCHAR,cashier VARCHAR,taxRate VARCHAR,slotAttendant VARCHAR,totalAmountPaid VARCHAR,slotSupervisorMOD VARCHAR,customerSignature VARCHAR,date03 VARCHAR);");

nncdjifdb.execSQL("INSERT INTO nncdjiftable (customerName, timeShift, date01, vendorGameThemePT, managerSignature, managerDate, jackpotAmount, lessTaxesWithheld, cashierSignature, taxRate, slotAttendantSignature, totalAmountPaid, slotSupervisorMODSignature, customerSignature, date03) VALUES (customerName, timeShift, date01, vendorGameThemePT, managerSignature, managerDate, jackpotAmount, lessTaxesWithheld, cashierSignature, taxRate, slotAttendantSignature, totalAmountPaid, slotSupervisorMODSignature, customerSignature, date03)");
我一直在使用一个教程来做这件事,在一些地方遇到了问题,它使用了特定的语法,所以我不得不修改它,但似乎我破坏了它更多,我在这里查看了很多使用SQLITE的地方没有这样的专栏,但看起来他们中的很多人都使用了不同的语法,我不太明白,因为我还是个新手


非常感谢您的帮助。

如果您在更改CREATETABLE语句之前已经运行了该示例,那么在更改CREATETABLE语句之前,该表已经生成

因为该表已经存在,所以它不会使用新列执行CREATE table,并且因为这些列不存在,所以在INSERT INTO语句中会出现该错误

您有两个选择:

  • 清除应用程序数据,以便删除数据库
  • 执行DROP TABLE nncdjiftable以删除该表
  • 执行ALTERTABLEADDCOLUMN语句以添加缺少的列

前两个是最简单的,但是会丢失数据库/表中的数据。

您需要向INSERT语句提供变量。请参见下面您应该使用的模式:

nncdjifdb.execSQL("INSERT INTO nncdjiftable 
(customerName, timeShift, date01, vendorGameThemePT, managerSignature, managerDate, jackpotAmount, lessTaxesWithheld, cashierSignature, taxRate, slotAttendantSignature, totalAmountPaid, slotSupervisorMODSignature, customerSignature, date03) 
VALUES ('"+someVariable+"',"+...+")");
使用execSQL时,字符串中的分号是可选的


另外,我在Java代码被取下之前看到了它;因此,我可以确认您的变量中确实存在有效值。

我不确定SQL,但如果您在first.execSQL中注意到,它以

,date03 VARCHAR);”

第二个

,日期为“”)


注意after)在报价中。

我不确定您是否发布了一些相关代码,但看起来您没有为变量指定值……例如。customerName=“customerName”。。。等等。

只发布SQL代码和插入并创建表的块。该错误意味着列名不匹配在java类中找不到错误,发布SQL代码只是为了清除错误,我需要使用值(“+customerName”、“+timeShift”)等等?是的,这是一种模式;省略号“…”继续。所以,是的,您需要执行aVariable+“,”+aVariable2模式,直到您的所有变量都表示为columns@user2714974实际上,看看新的模式,它更正确。逗号需要在双引号内,字符串需要在双引号内用单引号括起来。(见上文)请为该查询使用准备好的语句,否则您将完全接受SQL注入。(有一个一直这样做的习惯是好的)是的,说得好。OP:如果SQL注入是一种风险,请参考这一点——它们都是定义好的,为了清晰起见,我只需剪裁代码。