我正在开发我的第一个基于桌面的Java项目。我实际上有两个问题
1)如何对JOptionPane.showMessageDialog的OK按钮执行操作。我想在单击确定时导航到新的Jframe说x.java。
2)我有一个名为user的表。此表有8列userid(主键),名称,密码,emailid,dob,mobileno,city,date。必须从Jframe x中获取四个列条目,而从其他Jframe y中获取四个列条目。
我写了以下代码
对于第X帧
PreparedStatement stm = con.prepareStatement("insert into user
(userrid,name,password,emailid))values (?,?,?,?) ");
stm.setString(1,id); // id is a public variable
stm.setString(2,name);
stm.setString(3,ps);
stm.setString(4,email);
stm.executeUpdate();
对于第Y帧(用户ID是主键)
public class Y extends javax.swing.JFrame
{
X o = new X(); // to access id variable from frame X
}
PreparedStatement stm = con.prepareStatement(" update user set dob ='? ', mobileno
='?' ,city='?', date='?' where userid= 'o.id' ");
它不断抛出上述sql查询的异常
java.sql.SQLException:参数索引超出范围(1>参数个数,为0)。
答案 0 :(得分:14)
1)如何对JOptionPane.showMessageDialog的OK按钮执行操作。我想在单击确定时导航到新的Jframe说x.java。
int input = JOptionPane.showOptionDialog(null, "Hello World", "The title", JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null);
if(input == JOptionPane.OK_OPTION)
{
// do something
}
答案 1 :(得分:1)
它不断抛出上述sql查询的异常
java.sql.SQLException:参数索引超出范围(1>数 参数,即0)。
那是因为您在Update语句中使用'?'
并且不需要'
。你应该这样重写(假设你正确设置参数):
PreparedStatement stm = con.prepareStatement("UPDATE user SET dob = ?, mobileno = ?, city = ?, date = ? where userid= 'o.id' ");
答案 2 :(得分:0)
showMessageDialog不返回值,因此任何必须在不同的JOptionPane中进行。上面答案中的一个是一个很好的例子。
添加上面的答案,如果int输入等于OK_OPTION,你可以在当前帧上调用dispose()(如果你在不保留原文的情况下从一个移动到另一个),然后创建一个新的实例期望的框架。
答案 3 :(得分:0)
在关闭我的java程序之前,这是我的代码,它可以工作。在no_option
程序仍在运行但您必须设置框架的defaultcloseoperation:setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE
);
int dialogResult = JOptionPane.showConfirmDialog(frame, "Are you sure to close this window?", "Really Closing me?",JOptionPane.OK_CANCEL_OPTION);
if (dialogResult==0){
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try{
myDBExecuter.closeConnection();
myDBExecutero.closeConnection();
}catch(Exception e){
JOptionPane.showMessageDialog(null,new JTextField(" GoodBye :( "));
}
System.exit(0);
}else contentPane.updateUI();//after else can you put what you want als alternative