从数据库中获取值

时间:2011-12-01 22:01:52

标签: java mysql jdbc

我有一个名为'customer'的mysql表。 serialnumber(int),name(varchar),gender(varchar)是表字段。

我有一个int变量a = 2。

我想在serialnumber = a时从表中获取值。也就是说,当serialnumber = 2时,它应该显示特定客户的名字。

String url="jdbc:mysql://localhost/shopping";
String usr ="root";
String pass = "rootpassword";

session.setAttribute( "URL", url );
session.setAttribute( "user", usr );
session.setAttribute( "passwd", pass );

String connectionURL = (String)session.getAttribute( "URL" );
String user = (String)session.getAttribute("user");
String passwd = (String)session.getAttribute("passwd");
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      connection = DriverManager.getConnection(connectionURL, user, passwd);
      statement = connection.createStatement();

rs=statement.executeQuery("select * from customer where serialnumber like '%a%' ");

      while (rs.next()) {
      out.println("Customer Name: ");
      out.println(rs.getString("name")); 
     }rs.close();
    }catch(Exception ce){out.println(ce);}             

这什么都没有让我失望。但是当我在rs.execute Query中给出数字时,它会显示客户名称。如何解决这个问题,我的错误是什么?

由于

2 个答案:

答案 0 :(得分:1)

您将a视为文字,而不是变量。您需要像这样更新查询:

executeQuery("SELECT * FROM customer WHERE serialnumber LIKE '%" + a + "%' ");

为简洁起见,我没有包含rs = statement.,并删除了滚动条。您仍然需要它来解决问题。


@ypercube提出了一个很好的观点:如果你想查看序列号何时正好是2:

rs = statement.executeQuery("SELECT * FROM customer WHERE serialnumber = " + a);

此外,如果您仅使用name字段,则不应SELECT *而是SELECT name

答案 1 :(得分:0)

我不认为 LIKE 适合整数列,即使它有效。 这是一个更正式/高效/安全的版本:

String selectString = "SELECT * FROM customer WHERE serialnumber = ?";
selectStm = connection.prepareStatement(selectString);
selectStm.setInt(1, a.intValue());
rs = selectStm.executeQuery();