Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数据库中获取值_Java_Mysql_Jdbc - Fatal编程技术网

Java 从数据库中获取值

Java 从数据库中获取值,java,mysql,jdbc,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"; ses

我有一个名为“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查询中给出数字时,它会显示客户名称。如何解决这个问题,我的错误是什么


谢谢

您将
视为一个文本,而不是一个变量。您将需要如下方式更新查询:

executeQuery("SELECT * FROM customer WHERE serialnumber LIKE '%" + a + "%' ");
为了简洁起见,我没有包括
rs=语句。
,也没有删除滚动。您仍然需要它作为解决方案


@ypercube提出了一个很好的观点:如果您希望看到serialnumber何时正好为2:

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


此外,如果您只使用
名称
字段,则不应
选择*
,而应
选择名称

视为一个文本,而不是一个变量。您将需要如下方式更新查询:

executeQuery("SELECT * FROM customer WHERE serialnumber LIKE '%" + a + "%' ");
为了简洁起见,我没有包括
rs=语句。
,也没有删除滚动。您仍然需要它作为解决方案


@ypercube提出了一个很好的观点:如果您希望看到serialnumber何时正好为2:

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


此外,如果您只使用
名称
字段,则不应
选择*
,而应
选择名称

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

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

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

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

当你想测试平等性时,为什么要使用
LIKE
呢?当你想测试平等性时,为什么要使用
LIKE
呢?是的,我不好,没有按应该的方式声明a。我按照你说的更新了我的查询,结果很好。关于“a”的值,它不是固定的。它改变了。谢谢。是的,我很抱歉没有按应有的方式申报。我按照你说的更新了我的查询,结果很好。关于“a”的值,它不是固定的。它改变了。谢谢