当另一个combox选择的表名时,从数据库加载组合框项

时间:2014-07-13 14:51:16

标签: java mysql jcombobox

ResultSet rs = s.executeQuery("SELECT BedID FROM '"+jComboBox1.getSelectedItem().toString()+"' WHERE = dischargedDate='-'");

我尝试了这段代码,当我将此代码更改为这样时,它就可以使用了;

ResultSet rs = s.executeQuery("SELECT BedID FROM 001_oncology WHERE = dischargedDate='-'");

我想通过我的第一个jcombobox选择表名。 001_oncology是我在数据库上的表名之一,excludedDate是001_oncology表的一列,BedID是表的主键

ResultSet rs = sexecuteQuery("SELECT table_name FROM information_schema.tables WHERE table_name LIKE '0%'");

我使用上面的代码将表名加载到我的第一个jacombobox

任何人都应该尽快帮助我,请查看界面图像下方的图像,以便更好地理解。

UI screenshot

我的第一个jcombo代码:

void loadCombo() {
 // jComboBox1.addItem(""); 
 try { 
  ResultSet rs = DB.getCon().createStatement().executeQuery("SELECT table_name FROM information_schema.tables WHERE table_name LIKE '0%'");
  while (rs.next()) 
  {  
    jComboBox1.addItem(rs.getString("table_Name")); 
    jTextField7.requestFocus();
  } }
  catch (Exception e) {  
   e.printStackTrace(); }  
    } 

我的第二个jcombo的代码:

void loadCombo2() { 
jComboBox2.addItem("");
 try { 
 Connection c = DB.getCon(); 
 Statement s = c.createStatement();
  ResultSet rs = s.executeQuery("SELECT BedID FROM '"+jComboBox1.getSelectedItem().toString()+"' WHERE = dischargedDate='-'");
  while (rs.next()) {
  jComboBox2.addItem(rs.getString("BedID"));
  } } 
  catch (Exception e) {
   e.printStackTrace(); } } 

2 个答案:

答案 0 :(得分:1)

你得到什么错误?它会给你任何错误吗?

您的ResultSet SQL语句将生成以下错误的SQL语句(至少在Oracle中 - 不确定其他数据库)

SELECT BedID FROM '001_oncology' WHERE = dischargedDate='-'

您不应在表名上指定单引号。试试这个:

ResultSet rs = s.executeQuery("SELECT BedID FROM "+jComboBox1.getSelectedItem().toString()+" WHERE dischargedDate='-'");

答案 1 :(得分:0)

为了我的时间利益,我会改写你的一个组合框来使用预备语句,另一个将是相似的:

void loadCombo2() {
    try { 
        Connection conn = DB.getCon();
        PreparedStatement prepped = conn.prepareStatement("SELECT BedID FROM "+jComboBox1.getSelectedItem().toString()+" WHERE dischargedDate=?");
        prepped.setString(1, "-");
        ResultSet rs = prepped.executeQuery();
        while (rs.next()) {  
           jComboBox2.addItem(rs.getString("BedID"));
        } 
    } catch (SQLException e) {  
          e.printStackTrace(); 
    }  
} 

这将阻止SQL Injection,并且是编写此类代码的更好方法。