0

我是开发新手,我在 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 看了很多遍这里没有这样的专栏,但看起来他们中的很多人都在使用不同的语法,我不太明白,因为我对此仍然是全新的。

任何帮助表示赞赏。

4

4 回答 4

0

如果您在更改 CREATE TABLE 语句之前已运行该示例,则说明该表已经创建。

因为该表已经存在,它不会使用新列执行 CREATE TABLE 并且因为这些列不存在,所以您在 INSERT INTO 语句中遇到了该错误。

你有几个选择:

  • 清除应用数据,以便删除数据库
  • 执行 DROP TABLE nncdjiftable 删除表
  • 执行 ALTER TABLE ADD COLUMN 语句以添加缺少的列。

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

于 2013-08-25T07:57:07.553 回答
0

您需要将变量提供给 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代码;所以我可以确认您的变量中确实有有效值。

于 2013-08-25T07:57:45.470 回答
0

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

,date03 VARCHAR);");

在第二个

, date03)");

注意; 后)在报价单中。

于 2013-08-25T07:58:42.950 回答
0

我不确定你是否没有发布一些相关的代码,但看起来你没有给你的变量一个值......例如 customerName = "customerName"...... 等等。

于 2013-08-25T08:00:08.633 回答