[英]How can I get different datatypes from ResultSetMetaData in Java?
I have a ResultSet that returns data of different types. 我有一个ResultSet,返回不同类型的数据。 The query is constructed dynamically so, at compile time, I don't know what type of value the query will return.
查询是动态构造的,因此在编译时,我不知道查询将返回什么类型的值。
I have written the following code assuming that all results are Strings. 假设所有结果都是字符串,我编写了以下代码。 But I want to get the type of each value too.
但我也希望得到每个值的类型。 How can I do this?
我怎样才能做到这一点?
Below is the code I have written. 以下是我编写的代码。
while (reportTable_rst.next()) {
String column = reportTable_rst.getString(columnIterator);
}
At this point, I would like to get the column type, and get the value according to the data type. 此时,我想获取列类型,并根据数据类型获取值。
The ResultSetMetaData.getColumnType(int column)
returns a int
value specifying the column type found in java.sql.Types
. ResultSetMetaData.getColumnType(int column)
返回一个int
值,指定在java.sql.Types
找到的列类型。
Example: 例:
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();
}
}
You can call, 你可以打电话,
To returns designated column's SQL type. 返回指定列的SQL类型。
int ResultSetMetaData.getColumnType(int column)
To return designated column's database-specific type name. 返回指定列的特定于数据库的类型名称。
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
I think the above answer is not going in loop and have some lack in details. 我认为上面的答案并没有循环,而且缺乏细节。 This code snippet can improve to just show Column Name and corresponding datatype.
此代码段可以改进为只显示列名和相应的数据类型。 Here is the fully working code
这是完全有效的代码
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));
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.