2011-12-01 6 views
1

'customer'라는 이름의 mysql 테이블이 있습니다. serialnumber (int), name (varchar), gender (varchar)는 테이블 필드입니다. 데이터베이스에서 값을 가져 오는 중

은 내가 INT 변수이 = 내가 때의 serialNumber A = 테이블에서 값을 가져 오려는 2.

. 그것은 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 쿼리에 숫자를 입력하면 고객 이름이 표시됩니다. 이 문제를 해결하고 내 실수는 무엇입니까 ??

감사

+0

그리고 왜 당신이'LIKE'을 사용하고 있습니까? –

답변

1

대신 변수, 리터럴처럼 a을 치료하고 있습니다. 이 같은 쿼리를 업데이트해야합니다 : 나는 간결에 대한 rs = statement. 포함되지 않았고, 스크롤을 제거

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

. 당신은 여전히 ​​당신의 솔루션을 위해 그것을 필요로 할 것입니다.


@ypercube 좋은 지적한다 : 당신의 serialNumber 정확히 2 때보고 찾고 있다면 : 또한

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

경우에만 name 필드를 사용하는 경우, 당신을 SELECT *이 아니어야합니다. SELECT name

+0

그래, 어떻게해야 될지를 선언하지 않는 것이 나쁘지 않았다. 내가 말한대로 내 쿼리가 업데이트되었고 정상적으로 작동했습니다. 'a'값에 대해서는 고정되어 있지 않습니다. 그것은 바뀐다. 감사. –

0

저는 과 비슷합니다.은 정수에 적합합니다. 열, 작동하더라도. 여기에 더 공식적인/efficent/보안 버전 : 당신은 평등을 테스트 할 때

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