JDBC的rs.getString()不会返回查询结果的值

时间:2011-09-01 10:18:16

标签: java mysql sql web-services jdbc

我的JDBC的rs.getString(“column_name”)有一些问题,基本上它不会分配从查询结果中收到的值,我有一个字符串 ris ,它应该得到行名称来自rs.getString,为了我正在使用 ris 的问题的简单性,我的查询只返回一行。这是代码:

         //It returns null, or any other values I use to initialize the variable 
         String ris=null;

         q = "SELECT DISTINCT nome FROM malattia WHERE eta='" + age + "' AND sesso='" + sexstr + "' AND etnia='" + etniastr + "' AND sintomi IN(" + tes + ")";

                    ResultSet rs = st.executeQuery(q);
                    if (!rs.last()) {
                          ris = "no";
                                     } 
                    else {

                      //This is the place where I'm having problems
                        while(rs.next()){
                      //ris is supposed to get the name of the query result having column "nome"
                        ris=rs.getString("nome");

                                      }
                         }


              conn.close();

        } catch (Exception e) {
              ris = e.toString();
        }

         return ris;                  

我简化了代码,因此很容易关注问题所在。 提前谢谢!

2 个答案:

答案 0 :(得分:6)

if (rs.last())
   while (rs.next())

这不起作用,因为在您致电last后,您就在最后一行,next将始终返回false(它会返回true并且如果剩下一行,请带你到下一行。

请使用带有绑定变量的预准备语句!

最后关闭ResultSet和Connection(或使用Jakarta Commons DbUtils)。

答案 1 :(得分:1)

试试这个,只需删除if条件中的rs.last()调用..我同意@Thilo关于使用预准备语句。

 String ris=null;

         q = "SELECT DISTINCT nome FROM malattia WHERE eta='" + age + "' AND sesso='" + sexstr + "' AND etnia='" + etniastr + "' AND sintomi IN(" + tes + ")";

                    ResultSet rs = st.executeQuery(q);
                    rs.first(); // go to first record.
                      //This is the place where I'm having problems
                        while(rs.next()){
                      //ris is supposed to get the name of the query result having column "nome"
                        ris=rs.getString("nome");

                                      }
                         }


              conn.close();