2011-12-01 140 views
1

我有一個名爲'customer'的mysql表。 serialnumber(int),name(varchar),gender(varchar)是表字段。從數據庫中獲取值

我有一個int變量α= 2

我想當SERIALNUMBER從表獲取值=一個。那就是當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像文字,而不是一個變量。您將需要更新查詢是這樣的:

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

我不包括rs = statement.爲了簡潔,並刪除滾動。你仍然需要它來解決你的問題。


@ypercube使得一個好點:如果你正在尋找時看到SERIALNUMBER正好是2:,

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

此外,如果你只使用name場,你應該不是SELECT *而是SELECT name

+0

是的,這是我的壞不宣佈應該如何。我按照你所說的更新了我的查詢,它工作得很好。關於'a'的價值是不固定的。它改變。謝謝。 –

0

我不認爲LIKE適合於一個整數列,即使它工作。 這裏有一個更正式的/高效的/安全的版本:

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