这是我的代码:private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

String s1=new String(jTextField2.getText());
String s2=new String(jTextField3.getText());
 
  try {
   
  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   Connection conn = DriverManager.getConnection("jdbc:odbc:Star");
   String sql = "insert into Star(USERNAME, PASSWORD) values ("+s1+","+s2+")";
   PreparedStatement psm = conn.prepareStatement(sql);
   psm.setString(1,s1);
   psm.setString(2, s2);
  
 int i=  psm.executeUpdate();
 if(i==1){
 JOptionPane.showConfirmDialog(jButton1, "增加成功");
 
 }
 else{
 JOptionPane.showConfirmDialog(jButton1, "增加失败!");
 }
   
        psm.close();
        conn.close();
           
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  } catch (SQLException e) {   
   e.printStackTrace();
  }

}
运行时出现错误如下:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] INSERT INTO 语句的语法错误。

解决方案 »

  1.   

    String sql = "insert into Star(USERNAME, PASSWORD) value(?,?)";
    PreparedStatement psm = conn.prepareStatement(sql);
    psm.setString(1, s1);
    psm.setString(2, s2);
      

  2.   

    人才啊。String sql = "insert into Star(USERNAME, PASSWORD) values ("+s1+","+s2+")";

    psm.setString(1,s1);
     psm.setString(2, s2);
    有冲突。要么去掉
    psm.setString(1,s1);
     psm.setString(2, s2);要么更改
    String sql = "insert into Star(USERNAME, PASSWORD) values ("+s1+","+s2+")";

    String sql = "insert into Star(USERNAME, PASSWORD) values (?,?)";
      

  3.   

    2楼的说的比较清楚了,你程序中存在使用逻辑上的混乱。不过我补充指出Java报错的本身原因:s1 和 s2 是字符串,字符串左右两侧需要有单引号,举例说明:String sql = "insert into Star(USERNAME, PASSWORD) values ('"+s1+"','"+s2+"')";另外,非常非常强烈建议使用参数设置的方式,而非直接拼凑完整的SQL;非常著名的SQL注入漏洞啊。
      

  4.   

    insert into  表名(括号内字段可以省略) values ()...