2012-04-17 59 views
0

我想执行搜索查询并在JTable中显示结果。我有一个JComboBox,用户可以选择领域的搜索,如年龄,或ID搜索查询并在jtable中显示结果

这是我的代码。

try { 
    Class.forName("com.mysql.jdbc.Driver");  
    String connectionUrl = "jdbc:mysql://localhost/db?" + "user=root&password="; 
    con = DriverManager.getConnection(connectionUrl); 
    Statement state = con.createStatement(); 

    ResultSet result = state.executeQuery("SELECT * FROM db.atelier where '" + 
     jComboBox1.getSelectedItem().toString() + "'='" + 
     jTextField1.getText().toString() + "'"); 

    ResultSetMetaData resultMeta = result.getMetaData(); 

    while(result.next()){ 
     model.addRow(new Object[]{result.getObject(1),result.getObject(2)});  
     model.setDataVector(
      new Object[][]{{result.getObject(1),result.getObject(2)},{}},       
      new Object[]{resultMeta.getColumnName(1),resultMeta.getColumnName(2)}); 
     } 

    jPanel1.revalidate(); 
    model.fireTableDataChanged(); 
    this.repaint(); 
    state.close(); 
} 
catch (SQLException e){ 
    System.out.println("SQL Exception: "+ e.toString()); 
} 
catch (ClassNotFoundException cE){ 
    System.out.println("Class Not Found Exception: "+ cE.toString()); 
} 

con=null; 
+1

你的问题是什么? – ControlAltDel 2012-04-17 22:18:59

+1

请为代码块使用一致的逻辑缩进。 – 2012-04-18 04:38:51

+0

另请参阅有关SQL注入的[Q&A](http://stackoverflow.com/q/332365/230513)。 – trashgod 2012-04-18 05:49:05

回答

1

顺便说一下,您构建搜索查询的方式只会将您的应用程序暴露给SQL注入。

2

应该删除组合框所选项目周围的单引号,以使它们成为字段名称而不是字符串文字。此外,一个PreparedStatement,其中文本字段作为附加参数给出,替换SQL字符串中的?更好。这可以避免在文本字段中输入的单引号(和反斜杠等)。