2013-12-17 76 views
3

首先,我正在使用jTextFields讀取用戶的產品名稱和產品數量。對於那個產品,我使用sql查詢從數據庫中讀取產品ID和價格。但在下面的代碼中,我在jtextField中顯示產品價格,但在運行該文件時,我成功執行了查詢,但是我沒有在jtextField中獲取任何內容。使用java從mysql數據庫讀取數據

並請檢查SQL查詢和結果集使用, 表的名稱是「項目」和數據庫名稱是「myshop」, 我聲明的變量globelly這個代碼是在一個JButton的「ActionPeformed」的一部分。

String item_name=name.getText(); 
int item_no=Integer.parseInt(no.getText()); 
String sql="SELECT id,price FROM item WHERE item.name='item_name'"; 
try{  
Class.forName("com.mysql.jdbc.Driver"); 
Connection con(Connection)DriverManager.getConnection("jdbc:mysql://localhost:3306/myshop","root","mysql"); 
java.sql.Statement stmt=con.createStatement(); 
if (stmt.execute(sql)) { 
rs = stmt.getResultSet(); 
JOptionPane.showMessageDialog(this, "succes","executed query",JOptionPane.PLAIN_MESSAGE); 
} else { 
System.err.println("select failed");} 
int idIndex = rs.findColumn("id"); 
int priceIndex = rs.findColumn("price"); 

while(rs.next()){ 
item_id=rs.getInt(idIndex); 
item_price=rs.getInt(priceIndex); 
jTextField1.setText(""+item_price);//displaying product price in a jTextField1 
jTextField2.setText(""+item_id);//displaying product id in a jTextField2 
    } 
} 
catch(Exception e){ 
JOptionPane.showMessageDialog(this, e.getMessage()); 
} 
+2

String sql =「SELECT id,price FROM item WHERE id =」+ item_no; –

回答

1

你需要採取ITEM_NAME爲PARAM並加上引號,

String sql="SELECT id,price FROM item WHERE item.name='"+ item_name+"'"; 
+0

-1,這個答案是在3分鐘前給出的,沒有必要在論壇中混淆重複的答案 – camickr

+0

這是工作..感謝你的朋友 – user2827435

3

該線路應該是

String sql="SELECT id,price FROM item WHERE item.name='item_name'"; 

這樣

String sql="SELECT id,price FROM item WHERE item.name='"+item_name+"'"; 
+0

請嘗試提供沒有SQL注入的答案 – Sach

+0

item.name ='「+ item_name +」'「這將導致SQL注入http://en.wikipedia.org/wiki/SQL_injection – Sach

+0

另請參閱Aniket有關SQL注入的答案。 – Sach

3

使用PreparedStatement,所以你不必擔心劃定所有的變量:

String sql="SELECT id, price FROM item WHERE item.name = ?"; 
PreparedStatement stmt = connection.prepareStatement(sql); 
stmt.setString(1, item_name); 
ResultSet rs = stmt.executeQuery(); 

然後準備好的聲明將用適當的引號替換你的變量。

+0

它工作..謝謝你的朋友 – user2827435

0

嘗試使用PreparedStatement

String sql="SELECT id,price FROM item WHERE item.name=?"; 
PreapredStatement ps = con.prepareStatement(sql); 
ps.setString(1,item_name); 
ResultSet rs = ps.executeQuery(); 

利用PreparedStatement也prevent SQL injection attack.

+1

它正在工作..謝謝你的朋友 – user2827435

0

試試這個代碼,以避免這種類型的錯誤。

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myshop","root","mysql"); 
      PreparedStatement pt=con.prepareStatement("SELECT id,price FROM item WHERE item.name=?"); 
      pt.setString(1,"item_name"); 
      ResultSet rs; 
      if(pt.execute()) 
      { 
       rs=pt.getResultSet(); 
       JOptionPane.showMessageDialog(this, "succes","executed query",JOptionPane.PLAIN_MESSAGE); 
      } 
      else { 
    System.err.println("select failed"); 
      } 

     while(rs.next()){ 
    item_id=rs.getInt(1); 
    item_price=rs.getInt(2); 
    jTextField1.setText(""+item_price);//displaying product price in a jTextField1 
    jTextField2.setText(""+item_id);//displaying product id in a jTextField2  

     } 
+0

它是窩正在......感謝你的朋友 – user2827435