ユーザーが結果に表示するフィールドを選択することに基づいて、クエリを動的に作成しています。問題は、データベースからデータを取得する場合、通常はgetXXX()
メソッドを使用して適切な型を取得することです。ただし、この場合、列がランダムに選択されるため、適切なタイプが何であるかはわかりません。
データ型 XXX を指定せずに文字列形式でデータを取得する方法はありますか? MySQL とサーブレットを使用しています。
一般的なgetObjectメソッドを使用できます。
この ResultSet オブジェクトの現在の行にある指定された列の値を Java プログラミング言語の Object として取得します。
このメソッドは、指定された列の値を Java オブジェクトとして返します。Java オブジェクトの型は、JDBC 仕様で指定された組み込み型のマッピングに従って、列の SQL 型に対応するデフォルトの Java オブジェクト型になります。値が SQL NULL の場合、ドライバーは Java null を返します。
私の知る限りgetString()
、Java String オブジェクトで結果が必要な場合は、単純に使用できます。私は、MySQL ドライバーが、あなたが指定した Java オブジェクトのバイト ストリームのデシリアライズを処理すると思いますgetXXX()
。次の init スクリプトがあるとします。
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
ます。a_date
列を Java として取得することもでき、私のマシンではint
変換されます。そのため、ドライバーが型指定されていないバイト ストリームをサーバーから取得した後2013
にバインドが行われるようです。列を試した場合など、変換が失敗することがあります。getInt()
TEXT