2016-06-22 6 views
0

Ich möchte mit dem SQL-Befehl Shell-Befehl .import eine Tab-getrennte Datei in meine Datenbank laden.SQLite Ausführung .Import cmd aus Java

Das Ausführen des Befehls aus der Shell ist kein Problem!

Schreiben eines Shell-Skripts einschließlich des Befehls und Ausführen von Java ist kein Problem!

#! /bin/bash 
# Script for loading a specific file ($1) into a SQLite DBS table ($2) 
{ 
    sqlite3 database.db -cmd ".mode tab" -cmd ".import $1 $2" -cmd ".quit" & 
} 2> /dev/null 
exit 0 

Aber wie Sie den Befehl direkt aus Java ich ausführen? Hier ist, was ich versucht habe: Aber irgendwie ist nichts in die Datenbank

String[] cmd={"sqlite3","database.db -cmd \".mode tab\" -cmd \".import\" "+file.getPath()+" "+table+" -cmd \".quit\""}; 
Runtime.getRuntime().exec(cmd); 

Antwort

0

ich nicht finden, die „-cmd“ Option aus dem SQLite3 Shell docs geladen: http://www.sqlite.org/cli.html. Ich habe versucht, das Shell-Skript Sie zur Verfügung gestellt:

sqlite3 database.db -cmd ".mode tab" -cmd ".import data.in Test" -cmd ".quit" 

Der Fehler gemeldet wird:

./sqlite3: Error: too many options: ".mode tab" 
Use -help for a list of options. 

Um mehrere Befehle auf einer SQLite-Shell ausgeführt werden, würde ich alle Befehle in eine Datei schreiben und verwenden Sie“. lese "Befehl. Schreiben Sie zum Beispiel die Befehle in cmd.list

.mode tabs 
.import data.in Test 
.quit 

dann die SQLite-Shell-Befehl ausführen:

sqlite3 database.db ".read cmd.list" 

Java-Code:

String[] cmd = {"sqlite3", "database.db", ".read cmd.list"}; 
Runtime.getRuntime().exec(cmd); 
1

Versuchen Sie, die Ausführung von Befehlen durch einen Doppelklick gruppiert -quotes.

sqlite3 database.db ".mode tab" ".import $1 $2" 
+0

Geben Sie bitte eine tatsächliche Codezeile an. –

+0

Das löste mein Problem. Ich versuchte 'sqlite3 db" .mode csv test; .import $ f test; "' und es funktionierte nicht (weißt du warum?). Dann habe ich 'sqlite3 db" .mode csv test "" .import $ f test "' und es hat funktioniert! –