2013-04-27 162 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?