使用ResultSet从数据库返回字符串值但方法跳过"尝试"条款?

时间:2017-10-25 00:31:39

标签: java mysql database select resultset

为什么我的代码如下:

PrintWriter pw = response.getWriter();
pw.println(getValueOf(SQL, "lastName");

在将其传递给我的方法后不打印任何内容:

public static String getValueOf(String sql, String colName)
{
   String result = "";

   try
   {
       Connection conn = (Connection) accessDB.connecttoDB(); // pre-defined funct in my other class that works
       PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);
       ResultSet rs = pst.executeQuery();

       while (rs.next())
            result = rs.getString(colName);

       conn.close();

       return result;
   }
   catch (Exception e)
   {
       e.printStackTrace();
   }

   return result;
}

换句话说,为什么它似乎正在跳过"尝试"完全的条款,只是跳跃返回空的""结果到底?

我的SQL语句:

String SQL = "SELECT lastName FROM customers WHERE firstName=\"Bob\";";

我确实为这个人提供了一个条目" Bob" (他的姓氏是"迈克")在我的客户表中。

我的客户表:

lastName / firstName / address / email

修改

如果我将返回类型更改为" void" ,它可以正常工作但实际上我需要一个字符串值。

替代代码:

 public static void getValueOf(String sql, String colName, PrintWriter pw)
    {

       try
       {
           Connection conn = (Connection) accessDB.connecttoDB(); // pre-defined funct in my other class that works
           PreparedStatement pst = (PreparedStatement) conn.prepareStatement(sql);
           ResultSet rs = pst.executeQuery();

           while (rs.next())
                pw.println(rs.getString(colName)); // This does print out to the webpage as "Mike"

           conn.close();


       }
       catch (Exception e)
       {
           e.printStackTrace();
       }
    }

1 个答案:

答案 0 :(得分:2)

根据您的上次修改,我猜您有更多而不是一个记录。

所以将代码更改为

 if (rs.next()) {
        result = rs.getString(colName);
 }

此外,您的代码不会跳过try阻止