DB.java
import java.sql.*;
public class DB {
public static void main(String[] args) throws Exception {
if (args.length != 1 || "".equals(args[0].trim())) {
System.err.println("Error: <SQL>");
System.exit(1);
}
String sql = args[0];
Connection conn = null;
try {
String url = "jdbc: ... ";
conn = DriverManager.getConnection(url);
Statement stat = conn.createStatement();
ResultSet result = stat.executeQuery(sql);
while (result.next()) {
System.out.println(createRowString(result));
}
} finally {
if (conn != null) conn.close();
}
}
private static String createRowString(ResultSet result) {
StringBuilder buf = new StringBuilder();
for (int i=1 ;; i++) {
try {
String s = result.getString(i);
buf.append(s);
buf.append('\t');
} catch(SQLException e) {
break;
}
}
return buf.toString();
}
}
In JavaDB (Apache Derby) ist url beispielsweise die folgende Zeichenfolge.
jdbc:derby:/path/to/database/dir;create=true;user=<username>;password=<password>
Sie können damit SQL wie folgt ausführen. Die Ergebnisse werden durch Tabulatoren getrennt ausgegeben.
$ javac -cp .:<Andere erforderliche JAR-Dateipfade> DB.java
$ java -cp .:<Andere erforderliche JAR-Dateipfade> DB "SELECT * FROM xxtable"
aaa AAA 111
bbb BBB 222
ccc CCC 333
Bei der Ausgabe einer beliebigen Spalte mit * in der SELECT-Anweisung habe ich mein Bestes getan, um eine Methode namens createRowString () zu erstellen, da ich nicht weiß, wie viele Spalten angezeigt werden, aber ich frage mich, ob es einen besseren Weg gibt ...
28.12.2016 Nachtrag saka1029 hat kommentiert, wie die Anzahl der Spalten ermittelt wird, daher habe ich sie ein wenig bearbeitet.
2017/01/03 Bearbeiten Die Anweisungen UPDATE und DELETE konnten nicht ausgeführt werden, daher habe ich es möglich gemacht.
DB.java
import java.sql.*;
public class DB {
private static final String URL = ... ;
public static void main(String[] args) throws Exception {
if (args.length != 1 || "".equals(args[0].trim())) {
System.err.println("Error: <SQL>");
System.exit(1);
}
String sql = args[0].trim();
Connection conn = null;
try {
conn = DriverManager.getConnection(URL);
Statement stat = conn.createStatement();
if (isSelectStatement(sql)) {
doSelect(stat, sql);
} else {
doUpdate(stat, sql);
}
} finally {
if (conn != null) conn.close();
}
}
private static boolean isSelectStatement(String sql) {
String type = sql.split(" ")[0].toLowerCase();
return "select".equals(type);
}
private static void doSelect(Statement stat, String sql) throws Exception {
ResultSet result = stat.executeQuery(sql);
while (result.next()) {
System.out.println(createRowString(result));
}
}
private static void doUpdate(Statement stat, String sql) throws Exception {
int rowCount = stat.executeUpdate(sql);
System.out.println("rows = " + rowCount);
}
private static String createRowString(ResultSet result) throws SQLException {
ResultSetMetaData metadata = result.getMetaData();
int columnCount = metadata.getColumnCount();
StringBuilder buf = new StringBuilder();
for (int i=1 ; i<=columnCount ; i++) {
String s = result.getString(i);
buf.append(s);
buf.append('\t');
}
return buf.toString().trim();
}
}
Recommended Posts