首页 > 解决方案 > 将 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)

标签: androidsqlite

解决方案


单引号'在这里是个问题。这些会生成无效的 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); // 在此处检查文档以获取正确的参数

推荐阅读