android - 将 CSV 文件导入 SQLite
问题描述
我正在尝试将 CSV 文件导入我的 SQLite 数据库,但出现以下错误。
文件.csv
EMP0003|sample|S@mple|SATO|TEST|destination|00008888|ST0001|EMP0003|East Location|0000001XABC ----> 这是我的 csv 文件,但它只转到 E'|'M'|'P'| '0'|'0'|'0'|'3'|'|'|'s'|'a'|'m' 不是所有文本
String columns = "employee_num, username, password, firstname, lastname, address, contact, van, salesman_code, station_code, machine_id";
String str1 = "INSERT INTO " + tableName + " (" + columns + ") values(" ;
String str2 = ");";
mydb.beginTransaction();
while ((line = buffer.readLine()) !=null ) {
StringBuilder sb = new StringBuilder(str1);
String[] str = line.split("'|' ");
sb.append("'" + str[0] + "'|'");
sb.append(str[1]+ "'|'");
sb.append(str[2]+ "'|'");
sb.append(str[3]+ "'|'");
sb.append(str[4]+ "'|'");
sb.append(str[5]+ "'|'");
sb.append(str[6]+ "'|'");
sb.append(str[7]+ "'|'");
sb.append(str[8]+ "'|'");
sb.append(str[9]+ "'|'");
sb.append(str[10]+ "'|'");
sb.append(str[11].replace("'", "") + "'");
mydb.execSQL(sb.toString());
}
错误
Error : E/SQLiteLog: (1) near "'m'": syntax error
/ W/System.err: android.database.sqlite.SQLiteException: near "'m'": syntax error (code 1): , while compiling: INSERT INTO tbl_user (employee_num, username, password, firstname, lastname, address, contact, van, salesman_code, station_code, machine_id) values('','E'|'M'|'P'|'0'|'0'|'0'|'3'|'|'|'s'|'a'|'m'
/ W/System.err: at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
/ W/System.err: at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
/ W/System.err: at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
/ W/System.err: at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
/ W/System.err: at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
/ W/System.err: at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
/ W/System.err: at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1677)
W/System.err: at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608)
解决方案
单引号'
在这里是个问题。这些会生成无效的 SQL 查询。您应该为此使用 ContentValues 或编译语句,而不是编写原始 SQL 查询。
String sql = "INSERT INTO " + tableName + " (name, description) VALUES (?, ?)"; SQLiteStatement stmt = db.compileStatement(sql); stmt.bindString(1, "值"); stmt.execute();
ContentValues 值 = 新 ContentValues(); 长 retvalue = 0; values.put("_id", id_here); values.put("文本", your_text_here); db.insert("table",null, values); // 在此处检查文档以获取正确的参数
推荐阅读
- jekyll - 构建后不需要的 _posts 结构
- css - 如何使用 CSSTransition 延迟渲染数组中的每个项目?
- eclipse - 日食光子屏幕渲染问题
- javascript - React - 异步等待异步问题
- jquery - 为什么我们不能在循环中使用 async:true?
- python - 为什么当我使用“end”或“\n”或“”(空格)语句时会有所不同?
- json - Spark 将嵌套的 json 拆分为行
- excel - Excel 自定义功能不适用于工作表
- r - 在 R 中有效地绘制数亿个点
- javascript - Babel throwing Cannot read property 'bindings' of null 错误