2013-03-09 2 views
5

結果に表示するフィールドを選択したユーザーに基づいて動的にクエリを作成しています。問題は、データベースからデータを取得するときには、通常、適切なタイプを取得するためにgetXXX()のメソッドを使用するということです。しかし、このケースでは、列がランダムに選択されるため、適切な型が何であるか分かりません。列の種類を知らなくても列の値を取得する方法

データ型XXXを指定せずに文字列形式でデータを取得できる方法はありますか?私はMySQLとサーブレットを使用しています。

+1

'getXXX()。toString()'は動作しません。 – deadlock

+1

@deadlock - 'getXXX'はメソッドのクラス(getDate、getBytes、getFloatなど)の同義語です。それは本当の方法ではなく、OPは根本的な型が分からないときに特定のgetメソッドを使用する代わりの方法について質問しています。 – Perception

+0

はい、私はxxxを事前に知っておくことができましたが...その努力を救いたいです。 – Vini

答えて

11

あなたがジェネリックgetObject方法を使用することができる。

は、Javaプログラミング言語のオブジェクトとして ResultSetオブジェクトの現在行にある指定された列の値を取得します。

このメソッドは、指定された列の値をJava オブジェクトとして返します。 Javaオブジェクトのタイプは、 のJDBC仕様で指定された組み込みタイプのマッピングに従って、カラムのSQLタイプに対応するデフォルトのJavaオブジェクト のタイプになります。値が SQL NULLの場合、ドライバはJava nullを返します。

+0

thanx.Iそれが役立つと思います。 – Vini

+0

彼が望むものがすべて文字列であれば、単に 'getString()'を使うのはなぜですか? – Raffaele

0

私が知る限り、結果をJava Stringオブジェクトにしたい場合は、単にgetString()を使用することができます。 MySQLのドライバは、getXXX()で指定したJavaオブジェクトのバイトストリームをデシリアライズする必要があります。

DROP TABLE IF EXISTS thing; 

CREATE TABLE thing (
    a_int int, 
    a_string text, 
    a_date date 
); 

INSERT INTO thing (a_int, a_string, a_date) 
    VALUES ('1234', 'Hello world', CURRENT_DATE()); 

やコード:

public static void main(String[] args) throws Exception { 
    MysqlDataSource db = new MysqlDataSource(); 
    db.setDatabaseName("test"); 
    Connection conn = db.getConnection("test", "test"); 

    ResultSet res = conn.prepareStatement("SELECT * FROM thing").executeQuery(); 
    res.next(); 
    System.out.println("Get a int as a string: " + res.getString("a_int")); 

} 

それは単にGet a int as a string: 1234を印刷し、次のinitスクリプトを考えます。 a_date列をJavaのintとして取得することもでき、それは私のマシン上で2013に変換されます。したがって、バインドはの後にとなり、ドライバーはタイプされていないバイトのストリームをサーバーから取得したように見えます。場合によっては、列にgetInt()を入力すると変換が失敗することがあります。

関連する問題