2011-04-09 85 views
0

我的代码正常工作,它正确保存数据,但是当我添加两个字段即日期和生日时,它会给出错误,即插入到语句中时出现syntex错误。我正在使用MS ACCESS for DB。在我的数据库我对这个两个字段使用的数据类型nomber(即日期和更新) 我的代码是:保存数据的问题

私人无效saveREGISTRATION1(EVT java.awt.event.ActionEvent中){
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 "); 

//// String date = tdate.getText(); // if(date.equals(“”)) // JOptionPane.showMessageDialog(null,“ENTER THE DATE”);

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("")) 

// String brthdt = tfbdt.getText();如果(brthdt.equals(“”)) JOptionPane.showMessageDialog(null,“ENTER THE BIRTH DATE”);

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()); 
    } 

}

+1

你为什么又问另一个帖子询问同一个问题? http://stackoverflow.com/questions/5602900/prepared-statement-for-insert-in-ms-access-db – Sean 2011-04-09 06:45:06

回答

0

ü了什么数据类型在数据库中插入日期和birthdayDate? 正如你所说,你使用数字数据类型来存储这些数据,改变那些日期数据类型。

0

而是用引号围绕您的日期字符串中使用英镑/井号“#”

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

你的Java代码必须产生一个INSERT语句,其访问数据库引擎可以接受的。

在Access中,该语句应该可以工作,前提是两个字段都是日期数据类型。

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

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

访问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数据库结合使用。因此,您的访问问题更难以识别,因为它在所有冗长的Java内容中都很模糊。

我怀疑你在Access会话中创建SQL语句会获得更多的成功。一旦您拥有数据库引擎可以正确执行的SQL语句,请使用Java代码重新创建该SQL。