Java如何在方法上添加JOptionPane消息
我正在制作一个GUI,用户可以在其中输入任何电影名称。如果数据库中有该电影,则它会显示在ide控制台上,如果没有,则显示消息。现在,当用户输入数据库中的任何相关电影时,程序会在ide控制台上给出正确的输出。但问题是,当输入数据库中没有的任何错误电影名称时,程序不会执行任何操作事情。当从数据库中找不到像这样的内容时,我想给出一条消息 以及找到数据的时间。Java如何在方法上添加JOptionPane消息,java,swing,joptionpane,Java,Swing,Joptionpane,我正在制作一个GUI,用户可以在其中输入任何电影名称。如果数据库中有该电影,则它会显示在ide控制台上,如果没有,则显示消息。现在,当用户输入数据库中的任何相关电影时,程序会在ide控制台上给出正确的输出。但问题是,当输入数据库中没有的任何错误电影名称时,程序不会执行任何操作事情。当从数据库中找不到像这样的内容时,我想给出一条消息 以及找到数据的时间。 但我不知道怎么做。 代码: public class Find extends JFrame{ private JLabel ke
但我不知道怎么做。
代码:
public class Find extends JFrame{
private JLabel keyword;
private JTextField tx;
private JComboBox box;
private Connection conn;
private PreparedStatement pre;
private ResultSet set;
private ResultSetMetaData meta;
String server = "jdbc:mysql://localhost/demo";
String user="root";
String pass="pass";
public Find(){
super("Frame");
getContentPane().setLayout(null);
keyword= new JLabel("Keyword");
keyword.setBounds(170, 100, 96, 37);
getContentPane().add(keyword);
box = new JComboBox();
box.setModel(new DefaultComboBoxModel(new String[] {"Title"}));
box.setBounds(42, 139, 63, 20);
getContentPane().add(box);
//textfield
tx= new JTextField();
tx.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent arg0) {
try{
conn=DriverManager.getConnection(server,user,pass);
String option = (String) box.getSelectedItem();
String query = "select title,year from movies where "+option+"=?";
//statement
pre = conn.prepareStatement(query);
pre.setString(1, tx.getText());
set= pre.executeQuery();
ResultSetMetaData meta = set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
for(int i=1;i<=totalcolumn;i++){
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
}
}
catch(Exception e1){
JOptionPane.showMessageDialog(null, e1.getMessage());
}
}
});
tx.setBounds(120, 136, 202, 27);
getContentPane().add(tx);
setSize(450,450);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setResizable(false);
setVisible(true);
}
}
如果执行SQL查询的结果为null,则set.getObject(columnIndex)返回null。但在你们到达那个里之前,检查一下集合是否有任何元素
请尝试以下操作:
ResultSetMetaData meta = set.getMetaData();
int totalcolumn = meta.getColumnCount();
if (!set.next() ) {
JOptionPane.showMessageDialog(null, "No data");
} else {
do {
for(int i = 1; i <= totalcolumn; i++) {
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
} while(set.next());
}
ResultSetMetaData meta=set.getMetaData();
int totalcolumn=meta.getColumnCount();
如果(!set.next()){
showMessageDialog(null,“无数据”);
}否则{
做{
对于(int i=1;i您希望检查查询是否返回空的ResultSet。如果光标未定位在第一行之前或集合中不包含任何行,则方法isBeforeFirst()将返回false
if (!set.isBeforeFirst()) {
//Here you can display your 'failure' JOptionPane
}
else {
//Here you can put your code that handles your set, including your 'success' JOptionPane
}
例如,我建议进行以下更改:
...
set = pre.executeQuery();
if (!set.isBeforeFirst()){
JOptionPane.showMessageDialog(null, "The record was not found.");
}
else{
ResultSetMetaData meta = set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
for(int i=1;i<=totalcolumn;i++){
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
}
}
}
catch(Exception e1){
...
。。。
set=pre.executeQuery();
如果(!set.isBeforeFirst()){
showMessageDialog(null,“未找到记录”);
}
否则{
ResultSetMetaData meta=set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
对于(inti=1;i)您的问题是什么?另外,更好地格式化代码将吸引更多的人help@BoDidely现在我更正我的问题你确定你在正确的部分添加了代码吗?例外情况是什么?是的,你当前的代码在每次密钥发布时都会执行数据库查询。当前没有代码可识别此人何时被释放“打字完毕"。因此,使用哪种方法完全取决于您希望如何实现此功能。。一种解决方案是使用ActionListener触发代码,因为只有当用户在关注文本字段而不是每个按键时按enter键时,才会触发此操作。检查是否有查询返回的元素,然后可以继续打印结果。如果没有结果,只显示弹出窗口。
...
set = pre.executeQuery();
if (!set.isBeforeFirst()){
JOptionPane.showMessageDialog(null, "The record was not found.");
}
else{
ResultSetMetaData meta = set.getMetaData();
int totalcolumn=meta.getColumnCount();
while(set.next()){
for(int i=1;i<=totalcolumn;i++){
System.out.printf("%-8s\t", set.getObject(i));
}
System.out.println();
}
}
}
catch(Exception e1){
...