Java - 带别名的SQL查询

时间:2017-04-12 06:00:18

标签: java sql-server

我想从数据库中检索特定列。对于一个简单的Select语句,我能够检索如下的列

public String getDbColumnValue(String tableName, String columnName, String applicationNumber) {
    String columnValue = null;

    try {
        PreparedStatement ps = null;
        String query = "SELECT " + columnName + " FROM " + tableName + 
                       " WHERE ApplicationNumber = ?;";

        ps = conn.prepareStatement(query);
        ps.setString(1, applicationNumber);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            columnValue = rs.getString(columnName);
            return columnValue;
        }
    } 
    catch (Exception ex) {
    }
    return columnValue;
}

但是,我在我的查询中使用别名,如下所示。这个查询工作正常。如何在Java中使用它来检索特定的列

select S.StatusDesc from application A, StatusMaster S 
where A.StatusMasterId = S.StatusMasterId and A.ApplicationNumber = '100041702404'

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

我认为您混淆了用于表名的简单别名,以及用于列名的别名。要解决您的问题,您可以使用唯一名称为要选择的每个列添加别名,即使用此查询:

select S.StatusDesc as sc
from application A
inner join StatusMaster S 
    on A.StatusMasterId = S.StatusMasterId and
       A.ApplicationNumber = '100041702404'

然后使用以下代码在结果集中查找别名列sc

PreparedStatement ps = null;
String query  = "select S.StatusDesc as sc ";
       query += "from application A ";
       query += "inner join StatusMaster S ";
       query += "on A.StatusMasterId = S.StatusMasterId ";
       query += "and A.ApplicationNumber = ?";
ps = conn.prepareStatement(query);
ps.setString(1, applicationNumber);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
    columnValue = rs.getString("sc");
    return columnValue;
}

注意:我重构了您的查询以使用显式内连接而不是使用where子句连接。这通常被认为是编写查询的更好方法。