Java jdbc获取生成的键的列名

时间:2014-05-09 14:48:21

标签: java jdbc

我通过jdbc在表格中插入了一个带有复合主键的记录,并获得了主键的生成值。

pm = connection.prepareStatement(strQuery,Statement.RETURN_GENERATED_KEYS);
pm.executeUpdate();
ResultSet rsInsert = pm.getGeneratedKeys();
if(rsInsert != null && rsInsert.next()){
    int count = rsInsert.getMetaData().getColumnCount();
    Map<String,Object> map = new HashMap<>();
    for(int i = 1;i <=count;i++)
    {
        Object value = rsInsert.getObject(i);
    }
}

如何获取生成值的列名? 感谢

1 个答案:

答案 0 :(得分:3)

如果您检查了rsInsert.getMetaData() ResultSetMetaData,则可能会看到getColumnLabel(int),它会返回给定列号的建议名称。

// You are getting the Generated Keys here.
pm = connection.prepareStatement(strQuery,Statement.RETURN_GENERATED_KEYS);
pm.executeUpdate();
ResultSet rsInsert = pm.getGeneratedKeys(); // <-- This ResultSet is from the
                                            // insert. Not a standard Query.
if(rsInsert != null && rsInsert.next()){
  int count = rsInsert.getMetaData().getColumnCount();
  Map<String,Object> map = new HashMap<>();
  for(int i = 1;i <=count;i++)
  {
    String colName = rsInsert.getMetaData().getColumnLabel(i); // or ColumnName
    Object value = rsInsert.getObject(i);
  }
}

修改

显然,如果您的JDBC驱动程序不遵循getGeneratedKeys中的Javadoc规范(“检索由于执行此Statement对象而创建的任何自动生成的密钥。如果此Statement对象未生成任何密钥,返回一个空的ResultSet对象。“)然后您的结果可能会有所不同。