查询(总是选择所有列)并使用JDBC插入任意Oracle数据库表的好方法是什么?我创建了以下方法(还没有测试过)来检索任何表的属性名称和类型(我需要名称用于显示目的):
public ArrayList<Map<String, String>> retrieveTableAttributes(String tableName) throws SQLException{
ArrayList<Map<String, String>> attributes = new ArrayList<>();
DatabaseMetaData dbmd = conn.getMetaData();
ResultSet resultSet = dbmd.getColumns(null, null, tableName, null);
int i = 0;
while (resultSet.next()) {
attributes.add(new HashMap<String, String>());
attributes.get(i).put(resultSet.getString("COLUMN_NAME"), resultSet.getString("TYPE_NAME"));
i++;
}
resultSet.close();
return attributes;
}
我发现这个方法PreparedStatement#setObject(int parameterIndex, Object x, int targetSqlType)我认为可以用来为任意列类型设置一个值(在这种情况下,我需要将列类型作为int而不是类型名称),但是我不确定这一点。那么,有没有更好的设置方法,更重要的是从任意类型的列中获取值?如果它有帮助,我正在尝试创建一个Java EE GUI工具来操作数据库(添加,删除,更新数据库中任何表的行)。
答案 0 :(得分:0)
使用反射从命名类型获取类型代码的简单方法:
public int getTypeByName(String name) {
for (Field field : java.sql.Types.class.getFields()) {
if (name.equalsIgnoreCase(field.getName())) return (Integer) field.get(null);
}
return -1;
}
请注意,TYPE_NAME列可能无法保证与Oracle的列支持相匹配。更安全的选择可能是依靠驱动程序使用无类型的setObject和getObject方法做出正确的转换选择。