【发布时间】:2016-09-09 16:15:19
【问题描述】:
我正在开发 Spring Boot 并使用 JdbcTemplate。 我需要在运行时获取表列名。 为什么 getPrimaryKeys() 返回空记录? 我的目标数据库是 SQL Server。 我的代码在这里...
@RestController
@RequestMapping("/db")
public class WebPosDBController {
@Autowired
private JdbcTemplate jdbcTemplate;
// ...
private void loadMetadata(DBRecord dbRecord) {
try {
Connection conn = jdbcTemplate.getDataSource().getConnection();
DatabaseMetaData dm = conn.getMetaData();
ResultSet rs = dm.getPrimaryKeys(null, null, dbRecord.getTablename());
List<String> pkNames = new ArrayList<>();
while (rs.next()) {
// NEVER GET HERE
pkNames.add(rs.getString("COLUMN_NAME"));
}
rs.close();
rs = dm.getColumns(null, null, dbRecord.getTablename(), null);
List<String> fieldNames = new ArrayList<>();
while (rs.next()) {
fieldNames.add(rs.getString("COLUMN_NAME"));
}
rs.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
// ...
}
【问题讨论】:
-
您使用的是哪个 JDBC 驱动程序? ...微软的? ...jTDS? ...?
-
显示表格的 DDL 并用最简单的版本替换您的代码(即:使用硬编码值而不是
dbRecord.getTablename(),以便我们可以看到使用的值)
标签: java sql-server spring jdbc metadata