如果没有任何错误,则无法将数据插入Java数据库

如果没有任何错误,则无法将数据插入Java数据库,java,jdbc,Java,Jdbc,我已尝试添加stmt.executeUpdate;要插入到数据库,但它仍然不工作!!处理后,不会显示任何错误,但不会将任何数据插入数据库 try { // do insert String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)"; for(int i = 1; i < r.length; i++)

我已尝试添加stmt.executeUpdate;要插入到数据库,但它仍然不工作!!处理后,不会显示任何错误,但不会将任何数据插入数据库

            try {
                // do insert
                String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)";

                for(int i = 1; i < r.length; i++)
                {


                stmt = conn.prepareStatement(preparedSQL);
                // SQL parameters
                setString(stmt, i++, Num);
                setString(stmt, i++, r[i]);
                stmt.executeQuery();


                }
                stmt.executeUpdate();
                stmt.close();
            } catch (SQLException e) {

                PrintWriter out = new PrintWriter(new OutputStreamWriter(res
                        .getOutputStream(), "Big5"), true);
                res.setContentType("text/html; charset=utf-8");
                res.setHeader("cache-control", "no-cache");
                res.setHeader("Pragma", "no-cache");
                res.setIntHeader("expiry", -1000);
                out.println("..<!--" + RSCommonUtil.HTMLEncode(e.toString()) + "para in title not valid" + 
                RSCommonUtil.HTMLEncode(pDate.toString())
                        + " " + RSCommonUtil.HTMLEncode(startPubDateAndEndPubDate[0].toString()) + " "
                        + RSCommonUtil.HTMLEncode(startPubDateAndEndPubDate[1].toString()) + "-->");

                debug.p("insert error" + e);
                failed = true;
            } finally {
                try {
                    // finalize DB
                    if (stmt != null) {
                        stmt.close();
                        stmt = null;
                    }
                } catch (SQLException sqle) {
                }
            }
executeUpdate用于创建、删除、插入、更新、删除等,即更新表,executeQuery用于选择。它返回ResultSet的一个实例

有关简单说明,请参见此处:

另外,setString的参数数量不正确,应该作为语句对象的方法调用,setString方法的parameterIndex第一个参数应该是i,否则每次迭代都会增加三次。我还将循环更改为从0开始,不知道为什么从1开始,因为普通数组应该从0开始

因此,您的主块将如下所示:

...
            // do insert
            String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)";

            PreparedStatement stmt = conn.prepareStatement(preparedSQL);

            for(int i = 0; i < r.length; i++)
            {

            // SQL parameters
            stmt.setString(i, Num);
            stmt.setString(i, r[i]);
            stmt.executeUpdate();


            }
            stmt.close();
...

在try块中,尝试按如下方式重写代码:

String preparedSQL = "insert into abc (NUM, ID) VALUES (?,?)";
for(int i = 1; i < r.length; i++)
{
    stmt = conn.prepareStatement(preparedSQL);
    // SQL parameters
    stmt.setString(1, Num);
    stmt.setString(2, r[i]);
    stmt.executeUpdate();
    stmt.close();
}
setString方法只接受两个参数

public void setString参数索引,字符串值

此处“paramIndex”指的是准备语句中参数的索引,“value”指的是要在该索引处插入的值

prepared语句接口的executeQuery方法用于SELECT查询。但在您的情况下,由于该语句是一个INSERT查询,因此必须使用executeUpdate方法。此方法用于创建、删除、更新、插入等语句

有关准备好的语句和示例代码的更多信息,请参阅。

其他答案都是正确的,并提供了良好的建议。关于这个问题的一些评论也是如此。我可以再添加一个想法,再加上一个完整的工作示例应用程序,它使用

利用资源进行尝试 使用该语法可以缩短代码,并确保适当关闭资源

示例应用程序 pkey:0819123b-5c7f-4859-bd1b-f9dac82b855f |姓名:杰西·约翰逊|第一联系人:2019-08-03T18:16:30.367840Z

完成了


从您的问题标题中删除紧急帮助:请记住,虽然问题对您来说是紧急的,但不应该对我们来说是紧急的,因为您的问题/问题并不比本网站上的任何其他问题更重要。为了提高您获得快速、体面回答的机会,而不是说紧急情况,请根据链接尽量问最好的问题。您使用的是executeQuery,而不是executeUpdate。您只需要准备一次语句:这就是一个准备好的语句的全部要点。至少要打印stacktrace,因为您可能缺少一个密钥异常。如果出现错误,您不会向控制台打印任何内容。仅在HTML注释内部,以进行输出。我猜你还没有读过这个方法产生的HTML注释。您确实不应该将HTML生成与数据库访问代码混合使用。另一个可能的问题是:如果您的数据库连接未设置为自动提交,则您的插入未提交。另外,您将在try主体的末尾关闭一次stmt,在finally块中关闭第二次stmt。
package work.basil.example;


import org.h2.jdbcx.JdbcDataSource;

import java.sql.*;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.util.UUID;

public class H2DateTimeExample
{
    public static void main ( String[] args )
    {
        H2DateTimeExample app = new H2DateTimeExample ();
        app.demo ();
    }

    private void demo ( )
    {
        JdbcDataSource dataSource = new JdbcDataSource ();
        dataSource.setURL ( "jdbc:h2:mem:offsetdatetime_example_db;DB_CLOSE_DELAY=-1" ); // Set `DB_CLOSE_DELAY` to `-1` to keep in-memory database in existence after connection closes.
        dataSource.setUser ( "scott" );
        dataSource.setPassword ( "tiger" );

        // Create table.
        String sql = "CREATE TABLE person_ ( \n" +
                " pkey_ UUID NOT NULL DEFAULT RANDOM_UUID() PRIMARY KEY , \n" +
                " name_ VARCHAR NOT NULL , \n" +
                "first_contacted_ TIMESTAMP WITH TIME ZONE NOT NULL " +
                ") ;";
//            System.out.println ( sql );
        try (
                Connection conn = dataSource.getConnection () ;
                Statement stmt = conn.createStatement () ;
        )
        {
            stmt.execute ( sql );
        } catch ( SQLException e )
        {
            e.printStackTrace ();
        }

        // Insert row.
        sql = "INSERT INTO person_ ( name_ , first_contacted_ ) \n";
        sql += "VALUES ( ? , ? ) \n";
        sql += ";";
        try (
                Connection conn = dataSource.getConnection () ;
                PreparedStatement pstmt = conn.prepareStatement ( sql , Statement.RETURN_GENERATED_KEYS ) ;
        )
        {
            OffsetDateTime odt = OffsetDateTime.now ( ZoneOffset.UTC );

            pstmt.setString ( 1 , "Jesse Johnson" );
            pstmt.setObject ( 2 , odt );
            pstmt.executeUpdate ();

            ResultSet rs = pstmt.getGeneratedKeys ();
//            System.out.println( "INFO - Reporting generated keys." );
//            while ( rs.next() ) {
//                UUID uuid = rs.getObject( 1 , UUID.class );
//                System.out.println( "generated keys: " + uuid );
//            }

        } catch ( SQLException e )
        {
            e.printStackTrace ();
        }


        // Query table.
        sql = "TABLE person_ ;";
        try (
                Connection conn = dataSource.getConnection () ;
                PreparedStatement pstmt = conn.prepareStatement ( sql ) ;
        )
        {
            try ( ResultSet rs = pstmt.executeQuery () ; )
            {
                while ( rs.next () )
                {
                    UUID pkey = rs.getObject ( "pkey_" , UUID.class );
                    String name = rs.getString ( "name_" );
                    OffsetDateTime firstContacted = rs.getObject ( "first_contacted_" , OffsetDateTime.class );
                    System.out.println ( "pkey: " + pkey + " | name: " + name + " | firstContacted: " + firstContacted );
                }
            }

        } catch ( SQLException e )
        {
            e.printStackTrace ();
        }

        System.out.println ( "Done." );

    }
}