Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 如何使用prepareStatement()?_Java_Sql_Jdbc - Fatal编程技术网

Java 如何使用prepareStatement()?

Java 如何使用prepareStatement()?,java,sql,jdbc,Java,Sql,Jdbc,当id是我的SQL表的键并且它将由SQL创建时,我使用prepareStatement(),我想使用以下语句:(我应该在SQL表的第一列中写什么而不是X(提示:SQL自动创建它) 我已经照你们说的做了 但我有一个例外 java.sql.SQLException: Column count doesn't match value count at row 1 at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)

当id是我的SQL表的键并且它将由SQL创建时,我使用prepareStatement(),我想使用以下语句:(我应该在SQL表的第一列中写什么而不是X(提示:SQL自动创建它)

我已经照你们说的做了 但我有一个例外

java.sql.SQLException: Column count doesn't match value count at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
    at database.Manager.addBirth(Manager.java:76)
    at AdminGUI.AddNewBornInformation.submit(AddNewBornInformation.java:358)
    at AdminGUI.AddNewBornInformation.setButtonActionPerformed(AddNewBornInformation.java:282)
    at AdminGUI.AddNewBornInformation.access$800(AddNewBornInformation.java:28)
    at AdminGUI.AddNewBornInformation$9.actionPerformed(AddNewBornInformation.java:139)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)

如果已将该列的类型指定为int和auto increment,例如

`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
然后,您根本不需要提供任何值,因此可以使用name在1处启动prepared语句params

 query = ("insert into birthtable (nameCol, familyCol, fatherNameCol, mNameCol, dOfBirthCol, pOfBirthCol, inputCol) VALUES(?,?,?,?,?,?,?)");
        pstmt = (PreparedStatement) conn.prepareStatement(query);
        pstmt.setString(1, name);
        pstmt.setString(2, family);
        pstmt.setString(3, fatherName);
        pstmt.setString(4, mName);
        pstmt.setString(5, dOfBirth);
        pstmt.setString(6, pOfBirth);
        // Method used to insert a stream of bytes
        pstmt.setBinaryStream(7, input);

请注意,正如其他人所说,您必须包括列名,无论它们是什么。

如果您已将该列的类型指定为int和auto increment,例如

`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
然后,您根本不需要提供任何值,因此可以使用name在1处启动prepared语句params

 query = ("insert into birthtable (nameCol, familyCol, fatherNameCol, mNameCol, dOfBirthCol, pOfBirthCol, inputCol) VALUES(?,?,?,?,?,?,?)");
        pstmt = (PreparedStatement) conn.prepareStatement(query);
        pstmt.setString(1, name);
        pstmt.setString(2, family);
        pstmt.setString(3, fatherName);
        pstmt.setString(4, mName);
        pstmt.setString(5, dOfBirth);
        pstmt.setString(6, pOfBirth);
        // Method used to insert a stream of bytes
        pstmt.setBinaryStream(7, input);

请注意,正如其他人所说,您必须包括列名,不管它们是什么。

如果您使用的是自动递增且列名有效,则在准备好的语句中不设置id参数:

query = ("insert into birthtable (name, family, fatherName, mName, dOfBirth, pOfBirth, input) VALUES(?,?,?,?,?,?,?)");
pstmt = conn.prepareStatement(query);
pstmt.setString(1, name);
pstmt.setString(2, family);
pstmt.setString(3, fatherName);
pstmt.setString(4, mName);
pstmt.setString(5, dOfBirth);
pstmt.setString(6, pOfBirth);
pstmt.setBinaryStream(7, input);

应明确说明列名,否则取决于表create语句中的顺序。

如果使用的是自动递增且列名有效,则不在准备好的语句中设置id参数:

query = ("insert into birthtable (name, family, fatherName, mName, dOfBirth, pOfBirth, input) VALUES(?,?,?,?,?,?,?)");
pstmt = conn.prepareStatement(query);
pstmt.setString(1, name);
pstmt.setString(2, family);
pstmt.setString(3, fatherName);
pstmt.setString(4, mName);
pstmt.setString(5, dOfBirth);
pstmt.setString(6, pOfBirth);
pstmt.setBinaryStream(7, input);

您应该明确说明列名,否则您将取决于表create语句中的顺序。

您不需要自己指定列名,因此可以不指定列名。但是,您应该自己指定列,例如

"INSERT INTO tablename (columnname1, columnname2, columnname3) VALUES (?, ?, ?);"

否则,数据库将不知道在何处插入值,因为缺少一列。

您不需要自己指定它,所以您可以将其保留。但是,您应该自己指定列,例如

"INSERT INTO tablename (columnname1, columnname2, columnname3) VALUES (?, ?, ?);"

否则,数据库将不知道在何处插入值,因为缺少一列。

我仅有的两分钱是,如果您需要生成的ID,可以调用

pstmt.getGeneratedKeys( );

不过,它是否返回任何有效的内容取决于您的JDBC驱动程序实现。

我只需要2美分,如果您需要生成的ID,您可以调用

pstmt.getGeneratedKeys( );

但是,它是否返回任何有效的内容取决于您的JDBC驱动程序实现。

我们有8个问号,然后我从1开始,那么8个问号的值在哪里?您需要删除一个-因此将只有7个问号。我们有8个问号,然后我从1开始,那么8个问号的值在哪里?您需要删除吗ed删除一个-因此只有七个您不应该执行的操作
(PreparedStatement)
cast。我没有,NetBeans是为我做的!!!!?但你仍然保留说不的权利。例外:对于显式命名的列?SQL是什么?你不需要在注释中放那么多感叹号或问号。否则你就克服了冒犯性。一个(或没有)就足够了。你不应该做
(PreparedStatement)
cast。我没有,NetBeans是为我做的!!!!?但你仍然保留说不的权利。例外:对于显式命名的列?SQL是什么?你不需要在注释中放那么多感叹号或问号。否则你就克服了冒犯性。一个(或没有)就足够了。