JDBC - 查询不返回任何值

时间:2015-02-26 15:14:07

标签: java oracle jdbc

我正在尝试使用JDBC在java类上返回一系列简单的结果。查询只需要1个连接即可工作,由于某种原因,它不会返回任何值。但是,在Oracle SQL Developer上运行此查询时,将显示正确的结果。下面是我目前使用的代码。

访问数据库

query = "select h.house_id, h.house_address, h.house_type, h.status, l.firstname, l.surname, h.price_per_month "
                  + "from houses_tbl h join landlord_tbl l on l.landlord_id = h.landlord_id";

conn = connectToDatabase();
Statement stmt = null;
ResultSet rs = null;

try {
    stmt = conn.createStatement();
    rs = stmt.executeQuery(query);
    System.out.println(query);
} catch (SQLException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

检索数据

response.setContentType("application/json");

fullJsonString = "{";
fullJsonString += "\"houses\":[";
ArrayList<HouseObj> allHouses = new ArrayList<HouseObj>();
try {
    while (rs.next()) {
        int houseID = rs.getInt(1);
        Struct address = (Struct) rs.getObject(2);
        Object[] taskAddress = address.getAttributes();
        String houseAddressStreet = taskAddress[0].toString();
        String houseAddressTown = taskAddress[1].toString();
        String houseAddressCounty = taskAddress[2].toString();
        String houseAddressCountry = taskAddress[3].toString();
        String houseAddressPostcode = taskAddress[4].toString();
        String houseFullAddress = houseAddressStreet + ", "
                + houseAddressTown + ", " + houseAddressCounty
                + ", " + houseAddressCountry + ", "
                + houseAddressPostcode;
        String type = rs.getString(3);
        String status = rs.getString(4);
        String landlord = rs.getString(5)+" "+rs.getString(6);
        int price = rs.getInt(7);

        HouseObj newClient = new HouseObj(houseID,
        houseFullAddress, type, status, landlord, price);
        allHouses.add(newClient);
    }

    System.out.println("Number Of Houses : "+allHouses.size());
    for (int i = 0; i < allHouses.size(); i++) {
        if (i == allHouses.size() - 1) {
            fullJsonString += "{\"id\":\""
                    + allHouses.get(i).getHouseId() + "\","
                    + "\"address\":\""
                    + allHouses.get(i).getAddress() + "\","
                    + "\"type\":\""
                    + allHouses.get(i).getType() + "\","
                    + "\"status\":\""
                    + allHouses.get(i).getStatus() + "\","
                    + "\"landlord\":\""
                    + allHouses.get(i).getLandlord() + "\","
                    + "\"price\":\""
                    + allHouses.get(i).getPrice() + "\"}";
        } else {
            fullJsonString += "{\"id\":\""
                    + allHouses.get(i).getHouseId() + "\","
                    + "\"address\":\""
                    + allHouses.get(i).getAddress() + "\","
                    + "\"type\":\""
                    + allHouses.get(i).getType() + "\","
                    + "\"status\":\""
                    + allHouses.get(i).getStatus() + "\","
                    + "\"landlord\":\""
                    + allHouses.get(i).getLandlord() + "\","
                    + "\"price\":\""
                    + allHouses.get(i).getPrice() + "\"},";
        }

    }
    fullJsonString += "]}";

} //Catch Exception Below

输出

Number Of Houses : 0
{"houses":[]}

非常感谢您解决此问题的任何帮助。

1 个答案:

答案 0 :(得分:-1)

根据您发布的代码,我看不到结果集的任何打印。 你怎么知道它没有返回任何东西? 你能在while(rs.next)周期之前/之后(一个if,一个计数器)放一个打印语句来查看它是否是&#39; s实际上是空的? 如果为空,请尝试从查询中删除表别名

编辑: 在&#34中修改查询;从houses_tbl&#34;中选择house_id,然后执行查询

stmt = conn.createStatement(); 
rs = stmt.executeQuery(query); 

if (rs.next()){ 
    System.out.println("Got house!"); 
}else{ 
    System.out.println("No houses here!"); 
} 

暂时注释/绕过打印代码。这是为了检查您在该上下文中的基线操作性。如果这不起作用,那么对我来说必须是数据库/驱动程序问题