简体   繁体   English

如何从Java中的ResultSetMetaData获取不同的数据类型?

[英]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.

相关问题 如何从JAVA中的ResultSet或ResultSetMetaData对象获取数据库表的主键的列名? - How can I get the column name of the primary key of a Database Table from the ResultSet or ResultSetMetaData object in JAVA? 如何从实体管理器获取ResultSetMetaData? - How to get ResultSetMetaData from Entity Manager? 我可以在联接选择查询表单ResultSetMetaData中获取表名吗 - can i get table name in join select query form ResultSetMetaData 如何使方法在java中接受不同的参数数据类型? - How do I make a method accept different parameter datatypes in java? 如何在testNG中使用@dataprovider从excel读取不同的数据类型 - How can I read different datatypes from excel using @dataprovider in testNG 如何有效地获取“ AS”列名称,例如ResultSetMetaData? - How to effectively get “AS” column name like ResultSetMetaData? 如何在没有ResultSet的情况下获得等效的ResultSetMetaData - How to get equivalent of ResultSetMetaData without ResultSet 如何在Java中制作具有不同数据类型的地图列表? - How to make a list of maps with different datatypes in java? 如何在执行查询之前获取SQL中的列数? 即ResultSetMetaData以外的其他方式 - How to get column count in SQL before executing the query? i.e. way other than ResultSetMetaData 如何在Java中获取数据库特定的数据类型? - How to get database specific datatypes in java?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM