2014-04-12 109 views
2

我正在尝试更新我的MS Access数据库。我想知道为什么我得到的语法错误SQL异常错误

[java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Syntax error in 
UPDATE statement.] 

即使语法是正确的

class modify implements ActionListener 
{ 
    public void actionPerformed(ActionEvent ae) 
    { 
     try{ 

      Integer num1=Integer.parseInt(tfdid.getText()); 
      if(num1.equals(null)) 
      { 
       System.out.println("num"); 
       throw new BlankException(); 
      } 


      String name1=tfname.getText(); 
      int a; 
      a=name1.charAt(0); 
      if(name1.equals("") || a==32) 
       { 
        throw new BlankException(); 
       } 
      else 
      { 
       for(int i=0; i<name1.length(); i++) 
       { 
        boolean check = Character.isLetter(name1.charAt(i)); 
        a=name1.charAt(i); 
        System.out.print(" "+a); 
        if(!((a>=65 && a<=90) || (a>=97 && a<=122) || (a==32) ||(a==46))) 
        { 
         throw new NameEx(); 
        } 

       } 
      } 


      String addr1=taadd.getText(); 
      if(addr1.equals(null)) 
      { 
       System.out.println("addr"); 
       throw new BlankException(); 
      } 

      String contact1=tftel.getText(); 
      String fax=tfax.getText(); 
      String dateorder=tfdateadd.getText(); 
      String dod=tfdod.getText(); 
      String order=taorder.getText(); 
      String rate = tfrate.getText(); 
      String quantity = tfquantity.getText(); 
      String paytype=chrt.getSelectedItem(); 
      String itemcode=tfitemcode.getText(); 

      String discount=tdiscount.getText(); 
      if(discount.equals(null)) 
      { 
       System.out.println("discount"); 
       throw new BlankException(); 
      } 

       System.out.println("NUm="+num1);    
       System.out.println("name="+name1);   
       System.out.println("addr="+addr1);  
       System.out.println("contact="+contact1);   
       System.out.println("fax="+fax); 
       System.out.println("orderdate="+dateorder); 
       System.out.println("dod="+dod);  
       System.out.println("order="+order);    
       System.out.println("rate="+rate);    
       System.out.println("quantity="+quantity);    
       System.out.println("pay="+paytype); 
       System.out.println("itemcode="+itemcode); 
       System.out.println("discount="+discount); 

      //Statement st1=cn.createStatement(); 

      String str="UPDATE DOC SET Name=?,Address=?,Contact=?,Fax=?,Order_date=?,Delivery_date=?,Order=?,Rate=?,Quantity=?, 
      Payment_method=?,Item_code=?,Discount=? WHERE Vendorid=?"; 
      Statement st1= cn.createStatement(); 

      PreparedStatement psmt=cn.prepareStatement(str); 

      psmt.setString(1,name1); 
      psmt.setString(2,addr1); 
      psmt.setString(3,contact1); 
      psmt.setString(4,fax); 
      psmt.setString(5,dateorder); 
      psmt.setString(6,dod); 
      psmt.setString(7,order); 
      psmt.setString(8,rate); 
      psmt.setString(9,quantity); 
      psmt.setString(10,paytype); 
      psmt.setString(11,itemcode); 
      psmt.setString(12,discount); 
       psmt.setInt(13,num1); 


      psmt.executeUpdate(); 

      new SuccessDialog2(); 


      }catch(SQLException sq) 
     { 
      String message = "Enter Valid Vendor ID and Contact."; 
      JOptionPane.showMessageDialog(new JFrame(), message, "ERROR!", 
      JOptionPane.ERROR_MESSAGE); 
      System.out.println(sq); 
     } 
     catch(BlankException be) 
     { 
      new ErrorDialog2(); 
     } 
     catch(NumberFormatException nfe) 
     { 
      new ErrorDialog(); 
     } 
     catch(NameEx ne) 
     { 
      new ErrorDialog1(); 
     } 
     catch(Exception e) 
     { 
      System.out.println(e); 
      new EDt(); 
     } 

    } 
} 
} 

回答

3

NAME是访问SQL的保留字,所以如果它被用作列名,那么它必须被括在方括号,例如,

String str="UPDATE DOC SET [Name]=?, ... 

这是ORDER和案件RATE很好。所以把这两个括起来。

+1

其他两列中的两个被命名为'Order'和'Rate'。也包括这些名字。或者用表名或别名来限定他们。 – HansUp

+0

我也把订单和费率放在花括号里。有效。 –

+0

@TejalN将此答案标记为正确,因为我将工作评论插入答案中。 – HerrSerker

0

你肯定都是在数据库String值?如果没有,您需要使用setInt(),setLong()等:)

您的quantity有一个String值,这似乎有点奇怪。 :)