我运行了下面的程序,总说:
java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 2。
at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3150)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:214)
at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeUpdate(JdbcOdbcPreparedStatement.java:136)
at gui.ViewModelImpl.changePassword(ViewModelImpl.java:281)
at gui.View$Handler.actionPerformed(View.java:588)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)02053333 at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
错误就在我标注的那行,我找了一天了也没找出来,大家帮我啊!!在线盼复,谢谢了!!!!
public void changePassword(String empNo, String oldP, String newP) {
// TODO 自动生成方法存根

PreparedStatement ps = null;
PreparedStatement pst = null;
ResultSet rs = null;
try {

ps = conn.prepareStatement("select 密码 from 员工编码 where 员工编号 = ?");
ps.setString(1,empNo);
rs = ps.executeQuery();
rs.next();
System.out.println(empNo);
if(rs.getString(1).equals(oldP)){

pst = conn.prepareStatement("update 员工编码 set 密码 = newP where 员工编号 = ?");
pst.setString(1,empNo);
这行错误 pst.executeUpdate();

//password(empNo,newP);
}
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}

解决方案 »

  1.   

    应该是你那条语句
    pst = conn.prepareStatement("update 员工编码 set 密码 = newP where 员工编号 = ?");
    有问题:
    newP 是个String 变量,你把它当作了字符常量。应该把conn.prepareStatement的sql 语句改一下。
      

  2.   

    这样才是正确的吧。
    pst = conn.prepareStatement("update 员工编码 set 密码 = ? where 员工编号 = ?");
    pst.setString(1,newP);
    pst.setString(2,empNo);
    pst.executeUpdate();