Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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中执行动态ps.setString()_Java_Sql - Fatal编程技术网

如何在Java中执行动态ps.setString()

如何在Java中执行动态ps.setString(),java,sql,Java,Sql,我的代码有问题。我不知道如何在数据库中正确插入这些样本记录。它运行,但数据库中的输出错误。它在每列和每行中显示相同的值 这是我的密码: String[] arr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "010"}; pst = conn.prepareStatement(sql); conn = DriverManager.getConnection(url); String sql = "INSERT INTO in

我的代码有问题。我不知道如何在数据库中正确插入这些样本记录。它运行,但数据库中的输出错误。它在每列和每行中显示相同的值

这是我的密码:

String[] arr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "010"};
        pst = conn.prepareStatement(sql);


conn = DriverManager.getConnection(url);
String sql = "INSERT INTO insertTable(POSTAL_CODE_NO_,VERTEX_CODES,STATE,COUNTY,CITY) 
VALUES (?,?,?,?,?);";
        pst = conn.prepareStatement(sql);

    for (int i = 0; i < arr.length; i++) {
        int index = 1;
        for (int j = 1; j <= 5; j++) {
            pst.setString(index, arr[i]);
            index++;
        }

        pst.addBatch();
    }
    pst.executeBatch();
}

如果计划动态传递值,则可以在需要设置参数的位置使用“?”

例如,从emp_id=?'的员工中选择*可以在运行时用任何值替换

在您的场景中,将表插入到表中,表名称为col1、col2、col3值?、?、?

从到问题:

我希望输出是Col1=1、col2=2、col3=3、col4=4、col5=5……而不是Col1=1、col2=1、col3=3等等

为此,需要在列索引每次增加时都增加数组索引变量。下面的代码已更改为执行此操作

代码也已更改为使用try with resources进行正确的资源管理

如果arr的长度不是列数的精确倍数,则代码当然会因ArrayIndexOutOfBoundsException而失败。在本例中,它是创建两行

String[] arr = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "010"};

try (Connection conn = DriverManager.getConnection(url)) {
    String sql = "INSERT INTO insertTable" +
                " ( POSTAL_CODE_NO_, VERTEX_CODES, STATE, COUNTY, CITY )" +
                " VALUES (?,?,?,?,?)";
    try (PreparedStatement pst = conn.prepareStatement(sql)) {
        for (int i = 0; i < arr.length; ) {
            for (int col = 1; col <= 5; col++, i++) {
                pst.setString(col, arr[i]);
            }
            pst.addBatch();
        }
        pst.executeBatch();
    }
}

请注意i++如何被移动到第二个for循环。

没有足够的代码来理解您的问题。对于您共享的和平,我的猜测是您需要在添加参数的FOR语句中执行数据库命令。你从不使用那个虚拟循环计数器。请向我们显示您试图执行的SQL查询。字符串SQL=插入insertTablePOSTAL_CODE_NO_,VERTEX_CODES,STATE,COUNTY,CITY Value?,?,?,?,?;;我需要用记录填充5列。当然,每列显示的值都相同,因为您正在为所有5列设置相同的值。OP正在使用?,否则pst.setString将失败。-现在,实际SQL被添加到问题中,这就更清楚了。