2013-04-27 107 views
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的数据后,我查询正在运行非常慢。我的程序不好吗?有一些致命的错误吗?我该怎么办?

+0

我发现我的错误,并解决了这样的问题: – 2013-06-03 19:02:10

回答

1

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

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

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

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

0

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