ようになります。何度か戻って、私は同じ問題に対処していました。このデザインを熟考した後、私たちはそれを以下のようにすることに決めました。いくつかの具体的な理由については
public static Properties execute(String string, String[] columnames) throws Exception {
Properties resulProperties = er.executeQuery(string, columnames);
return resulProperties;
}
コードの下ExecuteRequest
クラスで
private static ExecuteRequest er = new ExecuteRequest();
以下に示すように、私は私のクラスのフィールドを作成したが使用されています。
public Properties executeQuery(String sqlstatement, String[] columnNames) throws Exception {
Properties prop = new Properties();
try {
prop = creteProperty(sqlstatement, columnNames);
} catch (Exception e) {
mlogger.report("Error executing sql statement");
throw (e);
}
return prop;
}
public Properties creteProperty(String sqlstatement, String[] columnNames) throws Exception {
Properties prop = new Properties();
try {
PreparedStatement stmt = ConnectionManager.getInstance().prepareStatement(sqlstatement);
ResultSet rs = stmt.executeQuery();
if (rs.next()) {
for (int i = 0; i < columnNames.length; i++) {
String key = columnNames[i];
if (rs.getObject(key) != null) {
String value = (rs.getObject(key).toString());
prop.setProperty(key, value);
} else {
String value = "";
prop.setProperty(key, value);
}
}
}
rs.close();
} catch (Exception e) {
mlogger.report("Error executing sql statement");
throw (e);
}
return prop;
}
このアプローチをソリューションとして使用できます。
返される実際のデータ型に関する情報が失われないように、 'Map'を返すべきです。テーブルにNULL値が含まれていると、 'rs.getObject(1).toString()'はNullPointerExceptionで爆発します。 –
マップされたすべてのJDBC型には、toString()メソッドがあります。そしてヌルについては、何の問題もありませんでした。 SELECT *ヌル値を持つDATEフィールドがある私のテーブルの1つから、コンソールに "null"が表示されます。 – athspk
もちろんtoString()メソッドがあります。しかし、文字列を「本当の」ものに変換することは問題になるかもしれません。どのオブジェクトを元に戻すべきか、どのように知っていますか?ロケールに依存するデフォルトの書式設定(小数点記号、日付書式など)はどうでしょうか。これはデータベースのvarcharカラムにすべてを保存するのと同じです... –