android - Android:E/SQLiteDatabase:插入错误;android.database.sqlite.SQLiteException:没有这样的列
问题描述
朋友们!我正在尝试从 xml 文件填充一个简单的数据库,但在标题中收到错误,并且如日志中所写,列中的值以错误的顺序放置。
我不明白,问题出在哪里,所以我请求你的帮助。代码如下。非常感谢。
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<cards>
<record path="R.mipmap.ot1" woman = "wfew" man = "qwe"/>
<record path="R.mipmap.ot2" woman = "rewr" man = "dwd"/>
</cards>
DBhelper 类:
class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "myDB", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
Log.d(LOG_TAG, "--- onCreate database ---");
db.execSQL("create table mytable ("
+ "id integer primary key autoincrement,"
+ "path text,"
+ "woman text," + "man text" + ");");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
向数据库添加数据:
Resources res = this.getResources();
ContentValues values = new ContentValues();
XmlResourceParser _xml = res.getXml(R.xml.cardslist);
try {
int eventType = _xml.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if ((eventType == XmlPullParser.START_TAG)
&& (_xml.getName().equals("record"))) {
String path = _xml.getAttributeValue(0);
String woman = _xml.getAttributeValue(1);
String man = _xml.getAttributeValue(2);
values.put("path", path);
values.put("woman", woman);
values.put("man", man);
db.insert("mytable", null, values);
Log.d(LOG_TAG, "success");
}
eventType = _xml.next();
}
}
// Catch errors
catch (XmlPullParserException e) {
Log.e("Test", e.getMessage(), e);
} catch (IOException e) {
Log.e("Test", e.getMessage(), e);
} finally {
// Close the xml file
_xml.close();
}
dbHelper.close();
}
来自日志的错误:
E/SQLiteLog: (1) table mytable has no column named man
E/SQLiteDatabase: Error inserting path=dwd woman=R.mipmap.ot2 man=rewr
android.database.sqlite.SQLiteException: table mytable has no column named man (code 1): , while compiling: INSERT INTO mytable(path,woman,man) VALUES (?,?,?)
解决方案
- 添加
CREATE TABLE IF NOT EXISTS
- 删除多个
;
试试这种方式,只是纠正你的execSQL
陈述。
String sqlStatement = "CREATE TABLE IF NOT EXISTS mytable( id INTEGER PRIMARY KEY AUTOINCREMENT, path TEXT, woman TEXT, man TEXT)";
db.execSQL(sqlStatement);
笔记
如果同样的问题来了,那么你需要修改
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// ALTER TABLE LOGIC
}
推荐阅读
- mysql - MySQL Workbench -> 没有足够的权限查看客户端连接
- mysql - 具有相同数据库的 MySQL 多用户
- python - 合并两个不重叠的熊猫数据框列
- tensorflow - 在 Keras 层中重新采样时间序列
- html - Flexbox 布局问题 - Flipcard
- c - 这个C是什么意思?int (*f)(int, int)
- python - Twitter 流 API:“连接中断:IncompleteRead”
- python - 优先队列检查每个孩子的值
- python - 在同一行打印一个字符串并调用一个类方法(包含“输入”)
- amazon-web-services - 使用 Trivy 和 AWS Security Hub 进行容器漏洞扫描