Derby Query非常慢

时间:2013-04-27 12:10:03

标签: java sql database derby

我正在编写一个查询来在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个数据后,我的查询运行速度非常慢。我的手术不好吗?有一些致命的错误吗?我该怎么办?

2 个答案:

答案 0 :(得分:1)

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

您还在创建JDBC连接,这可能是一种太多更昂贵的操作。

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

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

答案 1 :(得分:0)

看起来你的情况并不真正需要'喜欢'的力量,也许只是用'='代替? 'LIKE'功能强大但可能无法使用索引,因此您最终可能会执行全表扫描(请参阅Use '=' or LIKE to compare strings in SQL?