Android Studio中SQLite插入示例数据报错:SQL语句书写有误?
问题分析与解决方案
嘿,这个问题太常见了——你遇到的确实是SQL语句书写规则的问题,核心错误就是字符串值没加单引号!
错误原因
在SQL语法里,字符串类型的字段值必须用单引号(')包裹起来。你写的VALUES (ikan,nyao)里,ikan和nyao没有加单引号,SQL解析器会把它们当成列名或者数据库对象名,而不是你要插入的文本内容,这就导致数据库找不到对应的列,直接抛出错误。
修正后的代码
只需要给插入的字符串值加上单引号即可:
@Override public void onCreate(SQLiteDatabase db) { String createTable = "CREATE TABLE "+TABLE+" (id INTEGER PRIMARY KEY AUTOINCREMENT, indo TEXT, tdr TEXT)"; db.execSQL(createTable); // 给字符串值添加单引号,让SQL解析器识别为文本 db.execSQL("INSERT INTO "+TABLE+" (indo,tdr) VALUES ('ikan','nyao')"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE); onCreate(db); }
更推荐的写法(避免手动拼接SQL的坑)
手动拼接SQL很容易犯引号、拼写错误,还存在SQL注入风险,Android官方更推荐用ContentValues来插入数据,代码更安全也更易维护:
@Override public void onCreate(SQLiteDatabase db) { String createTable = "CREATE TABLE "+TABLE+" (id INTEGER PRIMARY KEY AUTOINCREMENT, indo TEXT, tdr TEXT)"; db.execSQL(createTable); // 使用ContentValues封装数据,自动处理字符串格式 ContentValues values = new ContentValues(); values.put("indo", "ikan"); values.put("tdr", "nyao"); // insert方法会自动生成正确的SQL语句 db.insert(TABLE, null, values); }
内容的提问来源于stack exchange,提问作者Arjun Nurdin
相关产品推荐
相关产品推荐

