Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.sql.SQLException:[Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期11_Java_Database - Fatal编程技术网

java.sql.SQLException:[Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期11

java.sql.SQLException:[Microsoft][ODBC Microsoft Access驱动程序]参数太少。预期11,java,database,Java,Database,谢谢你,Alexandre,但现在我不断收到以下错误: java.sql.SQLException:[Microsoft][ODBC Microsoft Access驱动程序]查询值和目标字段的数目不相同 但是我有11个问号和11个参数,所以我也不理解这个错误 PreparedStatement stmt = conn.prepareStatement("INSERT INTO STAFFDIR VALUES (?,?,?,?,?,?,?,?,?,?,?)"); stmt.setString(1

谢谢你,Alexandre,但现在我不断收到以下错误:

java.sql.SQLException:[Microsoft][ODBC Microsoft Access驱动程序]查询值和目标字段的数目不相同

但是我有11个问号和11个参数,所以我也不理解这个错误

PreparedStatement stmt = conn.prepareStatement("INSERT INTO STAFFDIR VALUES (?,?,?,?,?,?,?,?,?,?,?)");
stmt.setString(1, LN);
stmt.setString(2, FN);
stmt.setString(3, M);
stmt.setString(4, Phone);
stmt.setInt(5, DC);
stmt.setString(6, Email);
stmt.setInt(7, FC);
stmt.setString(8, Title);
stmt.setInt(9, LC);
stmt.setString(10, Picture);
stmt.setString(11, PC);
stmt.executeUpdate(); 
---------原始消息-----------

下面的代码生成以下错误。为什么?这是一个MS Access 2010.accdb数据库。该表确实有另一个名为ID的字段 它被定义为主键。但我不认为我需要以任何方式引用它。是吗?非常感谢您的帮助,谢谢

[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O First Name = John
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O Last Name = Doe
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O Middle = M
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O Phone = 212 999-9999
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O DeptCode = 0
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O Email = nbroat@msn.com
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O Title = None
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O FaxCode = 2
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O LocCode = 1
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O Picture = none
[5/8/14 10:06:34:986 EDT] 00000025 SystemOut     O Pic_Code = N
[5/8/14 10:06:35:047 EDT] 00000025 SystemOut     O Error occurred     java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 11.
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 11.
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6969)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7126)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at sun.jdbc.odbc.JdbcOdbc.SQLExecute(JdbcOdbc.java:3161)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at sun.jdbc.odbc.JdbcOdbcPreparedStatement.execute(JdbcOdbcPreparedStatement.java:228)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:103)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at cophonebk.COaddstaff.performTask(COaddstaff.java:104)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at cophonebk.COaddstaff.doPost(COaddstaff.java:39)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1663)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:939)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:502)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:181)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3944)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:452)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:511)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:305)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:276)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at  com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)  
[5/8/14 10:06:35:047 EDT] 00000025 SystemErr     R  at    com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1646)  


        Connection conn = null;
        ResultSet result = null;
        PreparedStatement stmt = null;

        String LN = (String)request.getParameter("Last_Name");          
    String FN = (String)request.getParameter("First_Name");
    String M  = (String)request.getParameter("Middle");
    String Ph = (String)request.getParameter("Phone");

        String Dept_Code = (String)request.getParameter("Dept_Code");
        Integer DC = Integer.valueOf(Dept_Code);

    String E = (String)request.getParameter("Email");
    String Fax_Code = (String)request.getParameter("Fax_Code"); 
    Integer FC = Integer.valueOf(Fax_Code);

    String T = (String)request.getParameter("Title");

    String Loc_Code = (String)request.getParameter("Loc_Code");
    Integer LC = Integer.valueOf(Loc_Code);

    String Pic = (String)request.getParameter("Picture");
    String PC = (String)request.getParameter("Pic_Code");

    System.out.println("First Name = " + FN);
    System.out.println("Last Name = " + LN);
    System.out.println("Middle = " + M);
    System.out.println("Phone = " + Ph);
        System.out.println("DeptCode = " + DC);
        System.out.println("Email = " + E);
        System.out.println("Title = " + T);
        System.out.println("FaxCode = " + FC);
        System.out.println("LocCode = " + LC);
        System.out.println("Picture = " + Pic);
        System.out.println("Pic_Code = " + PC);

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        conn = DriverManager.getConnection("jdbc:odbc:CentralOfficePhoneDirectory");

        try {
            stmt = conn.prepareStatement("INSERT INTO STAFFDIR(Last_Name,First_Name,Middle,Phone,Dept_Code,Email,Title,Fax_Code,Loc_Code,Picture,Pic_Code) VALUES(LN,FN,M,Ph,DC,E,T,FC,LC,Pic,PC)");
            result = stmt.executeQuery();

            try {
                stmt.close();
            }  catch (SQLException e) {
           e.printStackTrace();
        }
        try {
                conn.close();
        }   catch (SQLException e) {
                e.printStackTrace();
        }           
            return;
        } // End of try

        catch (SQLException e) {
              System.out.println("Error occurred " + e);
              e.printStackTrace();
              return;
        }

您需要将值传递给参数。错误是因为您没有提供任何参数

看看这里的例子:

试试这个:

           PreparedStatement stmt = conn.prepareStatement("INSERT INTO STAFFDIR(Last_Name,First_Name,Middle,Phone,Dept_Code,Email,Title,Fax_Code,Loc_Code,Picture,Pic_Code) VALUES (?,?,?,?,?,?,?,?,?,?,?)");
           stmt.setString(1, LN);
           stmt.setString(2, FN);
           stmt.setString(3, M);
           stmt.setString(4, Phone);
           stmt.setInt(5, DC);
           stmt.setString(6, Email);
           stmt.setInt(7, FC);
           stmt.setString(8, Title);
           stmt.setInt(9, LC);
           stmt.setString(10, Picture);
           stmt.setString(11, PC);
           stmt.executeUpdate(); 

只有相关的错误部分请注意,在准备好的语句中没有参数,因此我不知道该代码如何产生发布的错误。谢谢你,Alexandre,但现在我继续收到java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver]查询值和目标字段的数量不一样。我将在上面的示例中添加新的示例。有一个选项可以编辑您的答案,因此请使用它,而不是参考下面的另一个答案发布两个答案。海报更改了原始帖子,添加了不同的错误请原谅我对该系统的不当使用。无论如何,再次感谢您,Alexander,但现在我发现条件表达式中的java.sql.SQLException:[Microsoft][ODBC Microsoft Access Driver]数据类型不匹配。但5、7和9在表中定义为整数。我们确定我不需要引用主键吗?这将是数据库中的第12个字段。这算是第0项吗?或者我应该给stmt的2 thr 12编号?再次感谢。再次抱歉,迈克,我理解。然而,OP更新了他的原始帖子。因此,你的第一个答案现在似乎无关紧要。此外,如果问题的这一部分已修复,OP应删除原始消息。请稍候!停止印刷。5 8和9是数据库中的数字。马上回来看看结果。