2010-09-09 31 views
6

Tüm dan veritabanına satırsonu ile bir dizi eklemekSQLite - csv dosyasına

Bir METİN alanında bir SQLite veritabanına uzun metin girişi, enjekte çalışıyorum. Bu metinde, içinde yeni çizgiler var (yani çoklu paragraflara dayanıyor).

ben elle INSERT yaparsanız göstermek için yeni satırlar alabilirsiniz:

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

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

ama CSV dosyası eşdeğer metin var ve bunu tabloya .import çalışırsanız, ben olsun Var olandan daha fazla sütun beklediğiyle ilgili bir hata (yeni satırla karşılaşılır ulaşmaz, program bunun girdinin sonu olduğunu ve bu nedenle eksik sütunlar olduğunu varsayar).

Bu mümkün mü? Veya her INSERT'i manuel olarak yapmanın tek yolu nedir?

cevap

4

Senin sorunun csv biçimi şöyledir:: sqlite içeren değeri desteklemez o uygulama içinde ise

+0

İyi nokta, ve gerçekten soruyu okumak için teşekkür ederim. Bence CSV yapmak istediklerim için uygun değil. – I82Much

+1

"Resmi" 'metin/csv' tanımı (RFC 4180), alanlar içinde satır sonlarına izin vermez. Ne yazık ki, her uygulama onları desteklemiyor. Ve CSV'nin SQL tabloları için uygun olmamanın başka nedenleri de var; büyük bir tanesi de '' 've 'NULL' arasında ayrım yapmanın bir yolu olmaması. – dan04

+0

Önceden reddettim, ancak sqlite'ın csv desteğinin sınırlı olduğunu netleştirmek için düzenledikten sonra bir yükseltmeye geçtim. @ Dan04 dediği gibi, csv sütun değerleri yeni satırlar içerebilir ve bunu destekleyen birçok araç vardır. –

3

Sadece basit googling bana sonucu

http://www.mail-archive.com/[email protected]/msg43557.html

verdi yapabilirsiniz Evet:

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> 

yardımcı olur Umut!

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

Bu, '...' ile tüm '' yerine '' değiştirmem gerekiyor mu? – karim

0

, en azından sabit değildir, bu değerler için, bir parametreli/hazırlanan ifadesi kullanırsınız yeni satırların. sqlite lehçesinde

:

  • virgüller ayrı alanlar

  • Çift tırnak grubuna virgül içeren bir alan kullanılabilir.

  • Yeni hatlar kayıtları Ya da başka daha uygun dosya biçimini kullanın,/kaçış yeni çizgileri kaldırmak veya gerekir

sınırlandırır. |

istenmeyen çizgi "delete" olacaktır aşağıdaki (sed) düzenli Expresion

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

Teşekkürler ama bir uygulama içinde değil. – I82Much

-1

"echo -n" deneyin veya yankı "dosyası" gibi bir şey kullanmak beslemeleri tr '\ n' ''

Saygılar.

İlgili konular