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

tjvv9vkg  于 2022-11-27  发布在  Android
关注(0)|答案(4)|浏览(144)

所有人,
我正在尝试将一个长文本输入到SQLite数据库的一个TEXT字段中。这个文本中有新的行(即它跨越了多个段落)。
如果我手动执行INSERT,就可以显示新行:

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

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

但如果我在CSV文件中有等效文本并尝试将其导入表中,我会收到一个错误,即预期的列数比存在的列数多(一旦遇到新行,程序就认为它是输入的结尾,因此缺少列)。
这是可能的吗?还是手动执行每个INSERT的唯一方法?

nvbavucw

nvbavucw1#

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

  • 逗号分隔字段
  • 双引号可用于对包含逗号的字段进行分组。
    *新行分隔记录

您需要转义/删除新行,或者使用其他更合适的文件格式。
下列(sed)正则表达式将“删除”不需要的换行符

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

z3yyvxxp2#

在此找到
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>

希望能有所帮助!

ajsxfq5m

ajsxfq5m3#

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

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

yhqotfr84#

尝试“echo -n”,或使用类似echo“file”的内容|tr '\n' ' '
祝你好运

相关问题