26

さまざまなタイプのデータを返すResultSetがあります。クエリは動的に構築されるため、コンパイル時に、クエリが返す値のタイプがわかりません。

すべての結果が文字列であると仮定して、次のコードを記述しました。ただし、各値のタイプも取得したいと思います。これどうやってするの?

以下は私が書いたコードです。

while (reportTable_rst.next()) {
    String column = reportTable_rst.getString(columnIterator);
}

この時点で、列タイプを取得し、データ型に応じた値を取得したいと思います。

4

4 に答える 4

38

は、で見つかった列タイプを指定する値をResultSetMetaData.getColumnType(int column)返します。intjava.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();
    }
}
于 2012-09-11T10:45:18.700 に答える
3

あなたは電話することができます、

指定された列のSQLタイプを返します。

int ResultSetMetaData.getColumnType(int column)

指定された列のデータベース固有のタイプ名を返します。

String ResultSetMetaData.getColumnTypeName(int column)

于 2012-09-11T10:40:22.287 に答える
3
ResultSet rs;
int column;
.....
ResultSetMetaData metadata = rs.getMetaData();
metadata.getColumnTypeName(column); // database specific type name
metadata.getColumnType(column);  // returns the SQL type
于 2012-09-11T10:43:22.820 に答える
1

上記の答えはループに入らず、詳細が不足していると思います。このコード スニペットは、列名と対応するデータ型のみを表示するように改善できます。ここに完全に機能するコードがあります

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));
            }
        }   
    }
}
于 2014-06-26T15:41:11.490 に答える