SQLite - 从csv文件将带有换行符的字符串插入数据库

时间:2010-09-09 00:23:01

标签: android database string sqlite

所有

我正在尝试在TEXT字段中的SQLite数据库中注入一个长文本条目。该文本中有新行(即它跨越多个段落)。

如果我手动执行INSERT,我可以显示新行:

INSERT INTO "LOGENTRY" VALUES(5,40,'PLACE','line1
line2

line4
',1283990533315,'4A','TEXT','',NULL);

但如果我在CSV文件中有相同的文本并尝试将其导入到表中,我会得到一个错误,它预计会有更多列存在(遇到新行时,程序会认为它是输入的结尾,因此它缺少列。)

这可能吗?或者是手动执行每个INSERT的唯一方法吗?

4 个答案:

答案 0 :(得分:5)

您的问题是csv格式:sqlite不支持包含换行符的值。

在sqlite方言中:

  • 逗号分隔字段

  • 双引号可用于对包含逗号的字段进行分组。

  • 新行分隔记录

您需要转义/删除新行,或使用其他更合适的文件格式。

以下(sed)常规表达将“删除”不需要的换行符

s/\(,"[^",]*\)$/\1\1/g

答案 1 :(得分:3)

只是简单的谷歌搜索给了我结果

http://www.mail-archive.com/sqlite-users@sqlite.org/msg43557.html

是的,你可以:

SQLite version 3.6.14.2
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table x ( a );
sqlite> INSERT INTO x VALUES('line1
   ...> line2');
sqlite> SELECT a FROM x;
line1
line2
sqlite> SELECT hex(a) FROM x;
6C696E65310A6C696E6532
sqlite>

希望它有所帮助!

答案 2 :(得分:0)

如果它在应用程序中,我将使用参数化/预准备语句,至少对于那些不是常数的值:

db.execSQL("INSERT INTO LOGENTRY " +
    "VALUES(?, ?, ?, ?, ?, ?, ?, '', NULL)", 
    new Object[]{5, 40, place, text, num, x, t2});

答案 3 :(得分:-1)

尝试“echo -n”,或使用echo“file”|之类的东西tr'\ n'''

的问候。