2014-07-13 69 views
0

我想在jTable中使用jTextField和視圖搜索數據我使用下面的代碼,但我得到以下消息。使用jTextField在數據庫中搜索

java.sql.SQLSyntaxErrorException:不支持'INTEGER'和'VARCHAR(UCS_BASIC)'之間的比較。類型必須具有可比性。字符串類型也必須具有匹配的排序規則。如果排序規則不匹配,則可能的解決方案是將操作數強制轉換爲默認排序規則,例如SELECT FROM表名WHERE sys.systables CAST(表名AS VARCHAR(128))= 'T1')

try{ 
String host = "jdbc:derby://localhost:1527/PROCAT"; 
String uName = "zain"; 
String uPass = "zain"; 
con = DriverManager.getConnection(host,uName,uPass); 
sql = con.createStatement(); 
       sql=con.createStatement();  
       rs=sql.executeQuery("select * from DATASAV where ID="+jTextField2.getText()); 

           while (rs.next()) { 


        String Name = rs.getString("PROID"); 
        String Protxt = rs.getString("PRODNAME"); 
        String pro = rs.getString("PROPRICE"); 
        String[] data = {Name, Protxt, pro}; 
        tabMode.addRow(data); 

        jTextField1.setText(rs.getString(2)); 
        jTextField3.setText(rs.getString(3)); 

      } 
      catch(Exception ex) 
      { 
       JOptionPane.showMessageDialog(null,ex); 
      } 
+0

你在數據庫的ID字段中使用了什麼類型的數據類型? – maxx777

+0

我正在使用整數,但我改爲varchar,而且我仍然得到相同的消息 – mohza

+0

嘗試在jTextField2.getText()周圍添加單引號。 另外,我會建議你使用'PreparedStatement's – maxx777

回答

1

呼籲jTextField對象將返回的方法getText()一個String 我猜你的數據庫ID是int是爲什麼你得到SQLSyntaxErrorException

解決最簡單的方法將是解析字符串轉換成int

String valueAsString = jTextField2.getText(); 
try { 
    int num = Integer.parseInt(valueAsString); 
    sql=con.createStatement();  
    rs=sql.executeQuery("select * from DATASAV where ID=" + num); 
} 
catch (NumberFormatException e){ 
    System.out.println("Invalide Number + " e.getMessage()); 
} 

通知,請確保您使用Integer.parseInt()在try catch塊內,它可能會拋出NumberFormatException

+0

謝謝雅各布我在線程「AWT-EventQueue-0」中得到以下錯誤異常java.lang.NumberFormatException:對於輸入字符串:「1」 \t at java.lang .NumberFormatException.forInputString(NumberFormatException.java:65) \t在java.lang.Integer.parseInt(Integer.java:569) \t在java.lang.Integer.parseInt(Integer.java:615) \t以n – mohza