我有一个返回不同类型的数据的ResultSet。 查询构造动态的话,在编译的时候,我不知道该查询将返回值的类型。
我写了下面的代码假设所有的结果都是字符串。 但我想每个值的类型了。 我怎样才能做到这一点?
下面是我写的代码。
while (reportTable_rst.next()) {
String column = reportTable_rst.getString(columnIterator);
}
在这一点上,我想获得列的类型,并根据数据类型中获得的价值。
我有一个返回不同类型的数据的ResultSet。 查询构造动态的话,在编译的时候,我不知道该查询将返回值的类型。
我写了下面的代码假设所有的结果都是字符串。 但我想每个值的类型了。 我怎样才能做到这一点?
下面是我写的代码。
while (reportTable_rst.next()) {
String column = reportTable_rst.getString(columnIterator);
}
在这一点上,我想获得列的类型,并根据数据类型中获得的价值。
所述ResultSetMetaData.getColumnType(int column)
返回一个int
值,指定在发现列类型java.sql.Types
。
例:
Connection connection = DriverManager.getConnection(JDBC_URL, JDBC_USERNAME, JDBC_PASSWORD);
PreparedStatement statement = connection.prepareStatement(JDBC_SELECT);
ResultSet rs = statement.executeQuery();
PrintStream out = System.out;
if (rs != null) {
while (rs.next()) {
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
if (i > 1) {
out.print(",");
}
int type = rsmd.getColumnType(i);
if (type == Types.VARCHAR || type == Types.CHAR) {
out.print(rs.getString(i));
} else {
out.print(rs.getLong(i));
}
}
out.println();
}
}
你可以打电话,
要返回指定列的SQL类型。
int ResultSetMetaData.getColumnType(int column)
要返回指定列的数据库特定的类型名称。
String ResultSetMetaData.getColumnTypeName(int column)
ResultSet rs;
int column;
.....
ResultSetMetaData metadata = rs.getMetaData();
metadata.getColumnTypeName(column); // database specific type name
metadata.getColumnType(column); // returns the SQL type
我认为以上的回答是不是在循环去,并有一些缺乏细节。 这段代码可以提高到只显示列名和相应的数据类型。 这里是全工作代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class Test {
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String HOST = "192.168.56.101";
private static final String PORT = "3316";
private static final String CONNECTION_URL = "jdbc:mysql://"+HOST+":"+PORT+"/";
private static final String USERNAME = "user";
private static final String PASSWORD = "pwd";
private static final String DATABASE = "db";
private static final String TABLE = "table";
private static final String QUERY = "select * from "+DATABASE+"."+TABLE+" where 1=0";
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName(DRIVER);
Connection con = DriverManager.getConnection (CONNECTION_URL , USERNAME, PASSWORD);
ResultSet rs = con.createStatement().executeQuery(QUERY);
if (rs != null) {
System.out.println("Column Type\t\t Column Name");
ResultSetMetaData rsmd = rs.getMetaData();
for (int i = 1; i <= rsmd.getColumnCount(); i++) {
System.out.println(rsmd.getColumnTypeName(i)+"\t\t\t"+rsmd.getColumnName(i));
}
}
}
}