Hallo zusammen,
ich möchte ein CSV - File mittels Java importieren (habe hierfür Apache commons csv benutzt) und dann in einer Datenbank speichern (Datenbank mittels postgresql.jar verbunden) soweit so gut. Allerdings hat das CSV - File leere Felder, die bei einem fixen SQL Insert Statement von Postgre abgewiesen werden. Meine Idee war nun anhand der Header/Value Paare jeweils pro Zeile zu überprüfen ob Feld leer ist und dann aus den vollen Feldern jeweils ein SQL Insert Statement zu generieren. Sprich "INSERT INTO DATENBANK (?,?,?) VALUES (?,?,?);",("Header1", "Header2", "Header4"), (Value1, Value2, Value4);. Ich verstehe das ein derartiges Vorgehen zu SQL Injektion führen kann, allerdings ist dies ein geschlossenes System, bei dem diese Gefahr ausgeschlossen werden kann.
In Python hätte ich folgendes benutzt, allerdings konnte ich in Java nicht die passenden Äquivalente finden :
Beste Grüße
Markus
ich möchte ein CSV - File mittels Java importieren (habe hierfür Apache commons csv benutzt) und dann in einer Datenbank speichern (Datenbank mittels postgresql.jar verbunden) soweit so gut. Allerdings hat das CSV - File leere Felder, die bei einem fixen SQL Insert Statement von Postgre abgewiesen werden. Meine Idee war nun anhand der Header/Value Paare jeweils pro Zeile zu überprüfen ob Feld leer ist und dann aus den vollen Feldern jeweils ein SQL Insert Statement zu generieren. Sprich "INSERT INTO DATENBANK (?,?,?) VALUES (?,?,?);",("Header1", "Header2", "Header4"), (Value1, Value2, Value4);. Ich verstehe das ein derartiges Vorgehen zu SQL Injektion führen kann, allerdings ist dies ein geschlossenes System, bei dem diese Gefahr ausgeschlossen werden kann.
In Python hätte ich folgendes benutzt, allerdings konnte ich in Java nicht die passenden Äquivalente finden :
Beste Grüße
Markus
Python:
with codecs.open(filename, 'rb', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
col=[]
val=[]
for row in reader:
for column, value in row.items():
if value != '':
col.append(column)
val.append(unicode(value, "utf8"))
try:
query1=sql.SQL("INSERT INTO DATABSE ({}) VALUES ({}) ON CONFLICT DO NOTHING").format(sql.SQL(', ').join(map(sql.Identifier, col)),sql.SQL(', ').join(sql.Placeholder() * len(col)))
c.execute(query1, tuple(val),)
except psycopg2.IntegrityError as e:
print e
col=[]
val=[]
conn.commit()