import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.sql.SQLException; import java.io.BufferedReader; import java.io.FileReader; import java.io.InputStreamReader; import java.io.IOException; import java.io.Reader; /** Executes all SQL statements in a file. Call this program as java -classpath driver_class_path;. ExecSQL database.properties commands.sql */ class ExecSQL { public static void main(String[] args) throws Exception { if (args.length == 0) { System.out.println("Usage: java ExecSQL propertiesFile [statementFile]"); System.exit(0); } SimpleDataSource.init(args[0]); Connection conn = SimpleDataSource.getConnection(); Statement stat = conn.createStatement(); Reader reader; if (args.length > 1) reader = new FileReader(args[1]); else reader = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(reader); String line; while ((line = in.readLine()) != null) { try { boolean hasResultSet = stat.execute(line); if (hasResultSet) showResultSet(stat); } catch (SQLException e) { e.printStackTrace(); } } in.close(); stat.close(); conn.close(); } /** Prints a result set. @param stat the statement whose result set should be printed */ public static void showResultSet(Statement stat) throws SQLException { ResultSet result = stat.getResultSet(); ResultSetMetaData metaData = result.getMetaData(); int columnCount = metaData.getColumnCount(); for (int i=1; i <= columnCount; i++) { if (i > 1) System.out.print(", "); System.out.print(metaData.getColumnLabel(i)); } System.out.println(); while (result.next()) { for (int i=1; i <= columnCount; i++) { if (i > 1) System.out.println(", "); System.out.print(result.getString(i)); } System.out.println(); } result.close(); } }