我正在使用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();
}
}
// ...
}
答案 0 :(得分:0)
询问主键时,您可能需要设置架构。
String schema = "your_schema_name"
ResultSet rs = dm.getPrimaryKeys(null, schema, dbRecord.getTablename());
可能是您的SQL Server对创建的所有数据库都使用默认架构,该数据库可能是dbo或用于连接数据库的用户名。