0

我正在编写一个查询以将我的数据加载到 jlist 中

public void showtitle(){
  DefaultListModel model = new DefaultListModel();
  booklist.setModel(model);
  try{
    Class.forName("org.apache.derby.jdbc.ClientDriver");    
    Connection conn = DriverManager.getConnection("jdbc:derby://"+X, "APP", "app");
    Statement stmt = conn.createStatement();
    String query="SELECT TITLE FROM BOOK WHERE ISBN LIKE '%"
      + code.getText().toUpperCase()+"%' OR "
      + " TITLE LIKE '%"+name.getText().toUpperCase()+"%' ";
    ResultSet rs = stmt.executeQuery(query);
    while(rs.next()){
      String isbn = rs.getString(1);
      model.addElement(isbn);
   }
  }
  catch ( ClassNotFoundException | SQLException ex) {
    JOptionPane.showMessageDialog(null, "Unknown Error!! Data cannot be displayed!" + ex);
  }
}  

我这样调用这个方法:

private void codeKeyReleased(java.awt.event.KeyEvent evt)
{                                 
  showtitle();
}  

插入 1000 条数据后,我的查询运行速度非常慢。我的程序不好吗?有什么致命的错误吗?我该怎么办?

4

2 回答 2

1

您所做的不仅仅是在您的方法中执行查询。

您还创建了 JDBC 连接,这可能是一个昂贵的操作。

尝试创建一次 JDBC 连接并将其保存在应用程序的某个位置。

然后,当用户运行您的密钥释放事件时,只需运行您的查询并获取结果。

于 2013-04-29T19:01:39.377 回答
0

看起来你的情况并不需要'LIKE'的力量,也许只是使用'='代替?'LIKE' 功能更强大,但可能无法利用索引,因此您最终可能会执行全表扫描(请参阅使用 '=' 或 LIKE 比较 SQL 中的字符串?

于 2013-04-27T13:58:57.923 回答