【发布时间】:2019-07-31 23:27:07
【问题描述】:
我查看了以下内容,但没有发现任何与我的问题相匹配的内容(据我所知):
Android : Table has no column named "variable name" MySql Database error
Error compiling insert into: No column named ID
Android SQLite issue - table ... has no column named
https://sqlite.org/foreignkeys.html
我收到以下 SQLite 错误:
SQLiteDatabase: Error inserting zipCode=23456 address2= city=state address1=123 petName=qwerty phoneNumber=null vetName=zaw emailAddress=
android.database.sqlite.SQLiteException: table vets has no column named petName (code 1): , while compiling: INSERT INTO vets (zipCode,address2,city,address1,petName,phoneNumber,vetName,emailAddress) VALUES (?,?,?,?,?,?,?,?)
我感觉这与 VetTable 中的外键有关,但我的研究并没有帮助我理解发生了什么。
VetTable 定义如下:
public class VetTable {
public static final String TABLE_VETS = "vets";
public static final String VET_ID = "vetId";
public static final String PET_ID = "petId";
public static final String VET_NAME = "vetName";
public static final String ADDRESS1 = "address1";
public static final String ADDRESS2 = "address2";
public static final String CITY = "city";
public static final String STATE = "state";
public static final String ZIP_CODE = "zipCode";
public static final String PHONE_NUMBER = "phoneNumber";
public static final String EMAIL_ADDRESS = "emailAddress";
public static final String SQL_CREATE =
"CREATE TABLE " + TABLE_VETS + "(" +
VET_ID + " INTEGER PRIMARY KEY UNIQUE, " +
PET_ID + " INTEGER, " +
VET_NAME + " TEXT, " +
ADDRESS1 + " TEXT, " +
ADDRESS2 + " TEXT, " +
CITY + " TEXT, " +
STATE + " TEXT, " +
ZIP_CODE + " TEXT, " +
PHONE_NUMBER + " TEXT, " +
EMAIL_ADDRESS + " TEXT, " +
"FOREIGN KEY(" + PET_ID + ") " +
"REFERENCES pets(petId));";
public static final String SQL_DELETE =
"DROP TABLE" + TABLE_VETS;
}
来自DBHelper代码的相关代码如下:
public void addVetInfo(String name, String address1, String address2, String city, String state, String zip, String phone, String email){
try {
db = this.getWritableDatabase();
values.put(VET_NAME, name);
values.put(ADDRESS1, address1);
values.put(ADDRESS2, address2);
values.put(CITY, city);
values.put(CITY, state);
values.put(ZIP_CODE, zip);
values.put(PHONE_NUMBER, phone);
values.put(EMAIL_ADDRESS, email);
db.insert(TABLE_VETS, null, values);
} catch (SQLException e) {
e.printStackTrace();
}
}
可以看出,petName 不是 VetTable 的一部分,也从未包含在 VetTable 中,也不是 addVetInfo 中参数列表的一部分。那么,SQLite 做了什么让它认为 petName 应该是 VetTable 中的一列?
【问题讨论】:
-
有两个
put(CITY调用。无论如何,显示的代码并不是实际执行的代码。 -
CL,你是什么意思?执行了哪些我没有发布的代码?
-
CL,感谢您发现两个“CITY”电话!
-
CL,我刚刚将第二个“CITY”更改为“STATE”并且代码有效!我没有看到重复的列名和错误消息之间有任何联系。
-
实际执行的应用使用了
petName。这段代码没有。因此,您实际上并没有运行问题中的代码。