我有一个jTextField和一个jLabel。我想在用户完成输入后自动从数据库中获取数据到我的标签。
subcode_txt.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
Object obj=e.getSource();
if(obj==subcode_txt){
jst=subcode_txt.getText();
try{
rs=st.executeQuery("Select * from facultydtls where sub_code like '"+jst+"'");
rs.next();
faculty_lab.setText(rs.getString("f_name"));
sem_lab.setText(rs.getString("sem"));
subject_lab.setText(rs.getString("sub"));
department_lab.setText(rs.getString("dept"));
rs.close();
}
catch(Exception ewt){
JOptionPane.showMessageDialog(null,"Invalid Subject Code");
}
}
}
});
答案 0 :(得分:2)
DocumentListener
是一种比KeyListener
更好的方法ActionListener
,当用户点击 ENTER close
语句应放在finally
块话虽如此,你到底在问什么?
答案 1 :(得分:2)
使用DocumentListener是在Swing中处理JTextComponents
文本事件的首选方法。
数据库查询需要大量资源,应该在EDT之外完成,以防止UI“冻结”。请参阅此example中的SwingWorker
。
请注意,为每个DocumentEvent
加载数据可能会向数据库发送大量不必要的请求。有两种可能的解决方案:
JButton
在用户提供完整String
时加载数据。<强>更新强>
短期内:
将SQL通配符添加到查询中以匹配部分字符串:
st.executeQuery("Select * from facultydtls where sub_code like '%" + jst + "%'");
从长远来看:
使用PreparedStatement
。它有以下好处:
PreparedStatement
占位符字符将包含任何必需的字符串引号。