开发者

SQLite - inserting a string with newlines into database from csv file

All,

I am trying to inject a long text entry into a SQLite database, in a TEXT field. This text has new lines in it (i.e. it spans multiple paragraphs).

I can get the new lines to show up if I do the INSERT manually:

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

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

but if I have the equivalent text in a CSV file and attempt to .import it into the table, I get an error that it's expecting more columns than exist (as soon as the new line is encountered, the program assumes it's the end of the input and thus it's missing columns).

Is this possible? Or is the only way to manually d开发者_Go百科o each INSERT?


Your problem is the csv format: sqlite doesn't support values containing newlines.

In the sqlite dialect:

  • Commas separate fields

  • Double quotes can be used to group a field which contains commas.

  • New lines delimit records

You either need to escape/remove your new lines, or, use some other more suitable file format.

The following (sed) regular expresion will "delete" unwanted line feeds

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


found here

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

Yes you can:

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>

Hope it helps!


If it's within the application, I would use a parameterized / prepared statement, at least for those values that are not constant:

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


Try "echo -n", or use something like echo "file" | tr '\n' ' '

Regards.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜