Исходный код приложения Exec для выполнения динамического SQL
Пример 14-6. Исходный код приложения Exec для выполнения динамического SQL
import java.sql.*;
public class Exec {
public static void main(String args[]) {
Connection con = null; String sql = "";
for(int i=0; i<args.length; i++) {
sql = sql + args[i];
if( i < args.length - 1 ) {
sql = sql + " ";
}
}
System, out. рrintln("Выполнение: " + sql);
try {
Class.forName("com.imaginary. sql.msql.MsqlDriver").newlnstance();
String url = "jdbc:msql://athens.imaginary.com:1114/db_test";
con = DriverManager.getConnection(url, "borg", "");
Statement s = con.createStatement();
if( s.execute(sql) ) {
ResultSet r = s.getResultSet();
ResultSetMetaData meta = r.getMetaData();
int cols = meta.getColumnCount();
int rownum = 0;
while( r.next() ) { rownum++;
System, out. println("Crpокa: " + rownum);
for(int i=0; i<cols; i++) {
System.out.print(meta.getColumnLabel(i+1) + ": ' + r.getObject(i+1) + ", ");
}
System.out.println("");
}
}
else
{
System.out.println(s.getUpdateCount() + " строк обработано.");
}
s.close();
con.close();
}
catch( Exception,e ) { e. printStackTrace();
}
finally
{
if( con != null )
{
try { con.close();
}
catch( SQLException e ) { }
}
}
}
}
Для каждого результирующего набора обеспечивается получение экземпляра ResultSetMetaData с помощью метода getMetaData(). При динамическом доступе к базе данных необходимо узнать, сколько колонок в результирующем наборе, чтобы с уверенностью извлечь все колонки и их имена для вывода пользователю. Метаданные нашего результирующего набора обеспечивают получение всех этих данных с помощью методов getColumnCount() и getColumnLabel().