java.sql.DatabaseMetaData.getPrimaryKeys()返回空结果

时间:2016-09-09 16:15:19

标签: java sql-server spring jdbc metadata

我正在使用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();
    }
    }

    // ...
}

1 个答案:

答案 0 :(得分:0)

询问主键时,您可能需要设置架构。

String schema = "your_schema_name"
ResultSet rs = dm.getPrimaryKeys(null, schema, dbRecord.getTablename());

可能是您的SQL Server对创建的所有数据库都使用默认架构,该数据库可能是dbo或用于连接数据库的用户名。

相关问题