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();
}
}
Par exemple, JavaDB (Apache Derby) a la chaîne de caractères suivante pour l'url.
jdbc:derby:/path/to/database/dir;create=true;user=<username>;password=<password>
Vous pouvez l'utiliser pour exécuter SQL comme suit. Les résultats sont délimités par des tabulations.
$ javac -cp .:<Autres chemins de fichiers JAR requis> DB.java
$ java -cp .:<Autres chemins de fichiers JAR requis> DB "SELECT * FROM xxtable"
aaa AAA 111
bbb BBB 222
ccc CCC 333
Lors de la sortie d'une colonne arbitraire en utilisant * dans l'instruction SELECT, j'ai fait de mon mieux pour créer une méthode appelée createRowString () car je ne sais pas combien de colonnes vont apparaître, mais je me demande s'il existe un meilleur moyen ...
2016/12/28 postscript saka1029 a commenté comment obtenir le nombre de colonnes, alors je l'ai un peu modifié.
2017/01/03 Modifier Les instructions UPDATE et DELETE n'ont pas pu être exécutées, j'ai donc rendu cela possible.
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