【问题标题】:problem with saving the data保存数据的问题
【发布时间】:2011-08-01 23:30:11
【问题描述】:

我的代码工作正常,它可以正确保存数据,但是当我添加另外两个字段(即日期和出生日期)时,它会给出错误,即插入语句中的语法错误。我正在为数据库使用 MS ACCESS。在我的数据库中,我为这两个字段使用了数据类型编号(即日期和更新) 我的代码是:

private void saveREGISTRATION1(java.awt.event.ActionEvent evt) {
int len,len1,len2;

    int regno= Integer.parseInt(cbregn.getSelectedItem().toString());
    if(cbregn.getSelectedItem().toString().equals("")){
    JOptionPane.showMessageDialog(null," SELECT THE REGISTRATION NO ");
    return;
    }


      int date=Integer.parseInt(tdate.getText());
      if(tdate.getText().equals(""))
      JOptionPane.showMessageDialog(null," ENTER THE DATE ");

//// 字符串日期=tdate.getText(); // if(date.equals("")) // JOptionPane.showMessageDialog(null," 输入日期 ");

    String nm= cbnm.getSelectedItem().toString();
    if(nm.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE NAME ");
    return;
    }


    String place=tfplace.getText();
    if(place.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE NATIVE PLACE ");
    return;
    }



    String kul=tfkul.getText();
    if(kul.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE NAME OF KUL ");
    return;
    }

    String gotra=tfgotra.getText();
    if(gotra.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE GOTRA NAME ");
    return;
    }

    String kswami=tfswami.getText();
    if(kswami.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE KULSWAMI NAME ");
    return;
    }

    String raddr=taraddr.getText();
    if(raddr.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE RESIDENSIAL ADDRESS ");
    return;
    }

    int pincode=Integer.parseInt(tfpcd.getText());
    len1 = tfpcd.getText().length();
    if(len1!=7) {
    JOptionPane.showMessageDialog(null,"Enter The 7 Digit Pin Code","Error",JOptionPane.ERROR_MESSAGE);
    return;
    }

    int stdcd=Integer.parseInt(tfstdcode.getText());
    if(tfstdcode.getText().equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE STD CODE ");
    return;
    }


    int tele=Integer.parseInt(tftele.getText());
    len2 = tftele.getText().length();
    if(len2!=7){
    JOptionPane.showMessageDialog(null,"Enter The 7 Digit Telephone No","Error",JOptionPane.ERROR_MESSAGE);
    return;
    }


    int mno=(int) Long.parseLong(tfmno.getText());
    len = tfmno.getText().length();
    if(len!=10) {
    JOptionPane.showMessageDialog(null,"Enter The 10 Digit Mobile No","Error",JOptionPane.ERROR_MESSAGE);
    return;
    }


    String email=tfemail.getText();
    if(email.equals(""))
    JOptionPane.showMessageDialog(null," ENTER THE EMAIL");

    if(email.equals("")) {
        tfemail.setText("-");

    } else // check if it is a valid email-id
    {
    int ind = email.indexOf("@");
        if (ind != -1) { } else {
            JOptionPane.showMessageDialog(null,"Invalid Email Id","Error",JOptionPane.ERROR_MESSAGE);
            tfemail.setText("");
            tfemail.requestFocus();
            return;
        }
    }
    String website=tfweb.getText();
    if(website.equals(""))
    JOptionPane.showMessageDialog(null," ENTER THE WEBSITE ");

    if(website.equals("")) {
        tfweb.setText("-");
    }
    else // check if it is a valid email-id
    {
    int ind = website.indexOf("www");
    if (ind != -1) { } else {
    JOptionPane.showMessageDialog(null,"Invalid Website","Error",JOptionPane.ERROR_MESSAGE);
    tfweb.setText("");
    tfweb.requestFocus();
    return;
   }
}

    String education=tfedu.getText();
    if(education.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE EDUCATION DETAILS");
    return;
   }

    String branch=tfbrch.getText();
    if(branch.equals("")){
    JOptionPane.showMessageDialog(null," ENTER THE BRANCH NAME ");
    return;
   }


  int brthdt=Integer.parseInt(tfbdt.getText());
  if(tfbdt.getText().equals(""))

// 字符串 brthdt=tfbdt.getText(); // if(brthdt.equals("")) JOptionPane.showMessageDialog(null," 输入出生日期");

    String bloodgroup=(String)cbbldgrp.getSelectedItem();
    if(bloodgroup.equals("")){
    JOptionPane.showMessageDialog(null," SELECT THE BLOODGROUP");
    return;
   }

    try
    {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con=DriverManager.getConnection("jdbc:odbc:wanisamajDB");
        Statement stmt=con.createStatement();
       //String qry= "INSERT INTO Registration1(RegistrationNo,SeniorPerson,NativePlace,Kul,Gotra,KulSwami,ResidensialAddress,PinCode,STDcode,TelephoneNo,MobileNo,Email,Website,Education,Branch,BloodGroup) VALUES('"+regno+"','"+nm+"','"+place+"','"+kul+"','"+gotra+"','"+kswami+"','"+raddr+"','"+pincode+"','"+stdcd+"','"+tele+"','"+mno+"','"+email+"','"+website+"','"+education+"','"+branch+"','"+bloodgroup+"')";
        System.out.println("qry");
        String qry= "INSERT INTO Registration1(RegistrationNo,SeniorPerson,NativePlace,Kul,Gotra,KulSwami,ResidensialAddress,PinCode,STDcode,TelephoneNo,MobileNo,Email,Website,Education,Branch,BloodGroup,Date,BirthDate) VALUES('"+regno+"','"+nm+"','"+place+"','"+kul+"','"+gotra+"','"+kswami+"','"+raddr+"','"+pincode+"','"+stdcd+"','"+tele+"','"+mno+"','"+email+"','"+website+"','"+education+"','"+branch+"','"+bloodgroup+"','"+date+"','"+brthdt+"')";
        stmt.executeUpdate(qry);
        JOptionPane.showMessageDialog(null,"RECORD IS SAVED SUCCESSFULLY ");
        con.close();

    }
    catch(SQLException eM) {
        System.out.println(" "+eM);
        JOptionPane.showMessageDialog(null,"RECORD IS NOT SAVED");
    } 
    catch(Exception et)
    {
        System.out.println("error:"+et.getMessage());
    }

}

【问题讨论】:

标签: java ms-access


【解决方案1】:

您的 Java 代码必须生成 Access 的数据库引擎可以接受的 INSERT 语句。

在 Access 中,假设这两个字段都是日期数据类型,则此语句应该有效。

INSERT INTO tblFoo([Date],BirthDate) Values (#2011/04/09#, #1960/05/10#)

请注意,我将第一个字段的名称括在方括号中。我这样做是为了让数据库引擎知道 Date 是表中字段的名称,不要与 Date() 函数混淆。

Access SQL 使用 # 作为日期文字值的分隔符。

但是,您指出您的 Date 和 BirthDate 字段是数字而不是日期数据类型。如果属实,那对我来说似乎是一个设计错误。但无论哪种方式,您现有的 INSERT 语句都会尝试将文本值插入到 Date 和 BirthDate 字段中。仔细查看这个简化版的 qry 变量赋值。

String qry= "INSERT INTO Registration1([Date],BirthDate) VALUES('"+date+"','"+brthdt+"')";

如果 Date 和 BirthDate 是日期数据类型,则将分隔符从单引号更改为哈希字符。

String qry= "INSERT INTO Registration1([Date],BirthDate) VALUES(#"+date+"#,#"+brthdt+"#)";

如果 Date 和 BirthDate 实际上是数字,请将它们更改为日期数据类型。

基本上,当您显然对 Access 的工作原理知之甚少时,您正在尝试将 Java 与 Access 数据库一起使用。因此,您的 Access 问题更加难以识别,因为它在所有冗长的 Java 内容中都被掩盖了。

我怀疑通过在 Access 会话中创建 SQL 语句会取得更大的成功。一旦你有了一个数据库引擎可以正确执行的 SQL 语句,就可以用你的 Java 代码重新创建那个 SQL。

【讨论】:

    【解决方案2】:

    你在数据库中使用什么数据类型来插入日期和生日日期? 正如你所说,你使用数字数据类型来存储这些数据,将它们更改为日期数据类型。

    【讨论】:

      【解决方案3】:

      不要用引号将日期字符串括起来,而是使用井号/井号“#”

      ,'#+date+#','#+brthdt+#')"; 
      

      【讨论】:

        猜你喜欢
        • 2010-12-04
        • 2023-02-04
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2021-08-14
        • 2011-09-17
        • 2021-04-28
        相关资源
        最近更新 更多