【问题标题】:Saving fields to database using Java使用 Java 将字段保存到数据库
【发布时间】:2014-03-19 21:26:53
【问题描述】:

我的应用程序中有一个按钮,应该保存到我的数据库中。如果您发现我的代码有任何问题,谁能告诉我?它根本没有保存任何东西。

saveButton.addActionListener(
        new ActionListener()
        {
           public void actionPerformed(ActionEvent e)
           {
              //gets text from texfields and saves to instance variables
              String fname = fNameTextBox.getText();
              String lname = lNameTextBox.getText();
              String email = eMailTextBox.getText();
              String signUpDate = signUpTextBox.getText();

              try
              {
                 //moves cursor to new row
                 //rs.moveToInsertRow();

                 //statement that checks if user enters all letters      
                 if(fname.matches("[a-zA-Z]+"))
                 {
                    //statement that checks if user enters all letters      
                    if(lname.matches("[a-zA-Z]+")) 
                    {
                       //statement and actions if user enters a '.'
                       if(email.contains("."))
                       {
                          //gets last period in email
                          int emailDotCheck = email.lastIndexOf(".");

                          //substring to period in variable "emailDotCheck"
                          String extensionCheck = email.substring(emailDotCheck);

                          //statement and actions if user doesn't enter email correctly                 
                          if(!email.contains("@") || !extensionCheck.matches("\\.[a-z]{3}"))
                          {
                             JOptionPane.showMessageDialog(null, "Please enter email in correct format!");
                             eMailTextBox.setText("");                                       
                          }

                          else
                          {  
                             //instance variables
                             int month = 100;
                             int day = 100;
                             int year = 10000;

                             //statement and actions if user enters 'signUpDate' in correct format    
                             if(signUpDate.matches("\\d{2}/\\d{2}/\\d{4}"))
                             {
                                //gets substring of instance variables
                                String monthStr = signUpDate.substring(0,2);
                                String dayStr = signUpDate.substring(3,5);
                                String yearStr = signUpDate.substring(6);

                                //parsing intstance variables to Integers         
                                month = Integer.parseInt(monthStr);                       
                                day = Integer.parseInt(dayStr);
                                year = Integer.parseInt(yearStr);

                                //statements and actions if user doesn't enter date in correct format   
                                if(month > 12 || day > 31 || year > 2100)
                                {
                                   JOptionPane.showMessageDialog(null, "Please enter date in correct format! (dd/MM/yyyy)");
                                   signUpTextBox.setText("");
                                } 

                                else
                                { 
                                  //String sql4 = "INSERT INTO Table1 (Fname, Lname, [E_mail], [Sign_up_date]) VALUES (fname, lname, email, signUpDate)";

                                    //execute query, assigning specified record in db to 'rs4'
                                   //rs4 = st.executeQuery(sql4);                                       

                                   rs.moveToInsertRow();

                                   //inserts record into db                                     
                                   rs.updateString("Fname", fname);
                                   rs.updateString("Lname", lname);
                                   rs.updateString("E-mail", email);
                                   rs.updateString("Sign_up_date", signUpDate);

                                   //inserts data into db      
                                   rs.insertRow();

                                   //closes statement variable so there won't be a gap in db                                       
                                   st.close();

                                   //closes result set variable so there won't be a gap in db
                                   rs.close();

                                   //create new statement to help us gain access to table in db
                                   st = con.createStatement(rs.TYPE_SCROLL_INSENSITIVE, rs.CONCUR_UPDATABLE);

                                   //statement that selects everything from our table
                                   String sql = "SELECT * FROM Table1";

                                   //execute query, assigning all records in db to 'rs'
                                   rs = st.executeQuery(sql);

                                   //gets next row in db
                                   rs.next();

                                   //sets text in text fields to specified fields in db
                                   fNameTextBox.setText(rs.getString("Fname"));
                                   lNameTextBox.setText(rs.getString("Lname"));
                                   eMailTextBox.setText(rs.getString("E_mail"));
                                   fNameTextBox.setText(rs.getString("Sign_up_date"));
                                }
                             }

                             //statement and actions if user does enter date in correct format        
                             else
                             {
                                JOptionPane.showMessageDialog(null, "Please enter date in correct format! (dd/MM/yyyy)");
                                signUpTextBox.setText("");
                             }
                          }
                       }

                       //statement and actions if user doesn't enter email in correct format        
                       else
                       {
                          JOptionPane.showMessageDialog(null, "Please enter email in correct format!");
                          eMailTextBox.setText("");
                       }

                    }

                    //statement and actions if user doesnt enter last name in correct format        
                    else
                    {
                       JOptionPane.showMessageDialog(null, "Please enter last name in correct format!");
                       lNameTextBox.setText("");
                    }
                 }

                 //statement and actions if user doesn't enter first name in correct format       
                 else
                 {
                    JOptionPane.showMessageDialog(null, "Please enter first name in correct format!");
                    fNameTextBox.setText("");
                 }
              }
              catch(Exception ex)
              {

              }         
           }          
        });    

【问题讨论】:

  • 您是否看到任何与数据库保存操作相关的日志?这将是寻找任何问题的第一个地方。
  • 您是否尝试过调试您的代码?
  • 请不要吞下异常。 catch(Exception ex){}.
  • @Shankar 我已经调试过了,找不到错误...
  • ex.printStackTrace() 放入您的catch 块中并尝试再次运行您的代码。您遇到任何异常吗?

标签: java sql ms-access logic


【解决方案1】:

首先报告遇到的任何错误

          catch(Exception ex)
          {

          }      

静默处理错误的 catch 块通常是个坏主意。

其次,使用调试器,单步调试代码,看看发生了什么。试图通过桌面检查来解决这样的问题,即。仅仅阅读代码通常是非常低效的。这里我们没有关键信息,比如我们是否有信心

  rs.moveToInsertRow();

可以预期工作 - 我们看不到 rs 是如何获得它的价值的。许多数据库问题只发生在运行时,数据库连接配置错误或尝试插入与现有数据冲突。因此,只有了解您的代码在测试运行中做了什么,才能解决问题。

在这里,我猜想在你的 catch 中打印出一些诊断信息会非常有帮助,否则单步调试器(或添加跟踪语句)会让你到达那里。

【讨论】:

  • 这不是答案。
  • 当您进入调试器时,您肯定会看到在哪一行引发了异常。我的猜测是您的其中一条线,例如 rs.updateString("E-mail", email);列名拼写错误
  • 和 mttdbrd,这个问题几乎可以肯定不能按现状回答(我们现在知道代码和 db 模式不匹配,但这是许多可能的问题之一)但我们可以通过以下方式提供一个流程可以找到答案,我认为它实际上更有用。
  • @djna 如果我发布所有代码会更有帮助吗?
  • 我发现了我的问题,这篇文章很有帮助,我有一个“-”,我需要一个“_”。感谢您指出@djna
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2020-05-23
  • 2015-08-04
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
相关资源
最近更新 更多