将值插入mysql表的更有效方法

时间:2014-06-25 16:20:57

标签: java mysql

我有一个集合,我想写节点'将值转换为mysql表。现在我连接到数据库,创建一个语句,然后为我运行的集合中的每个节点

// open the connection then
Statement statement = connect.createStatement();
for (Node n : vertices) {
   statement.execute("INSERT INTO " + table + " (name, department) values ('" + n.getName() + "', '" + n.getOrgId() + "')");
}
// then I close the connection

我想知道是否有更有效的方法来处理这样的任务。

3 个答案:

答案 0 :(得分:6)

使用准备好的陈述:

String query = "insert into " + table + " (name, department) values (?,?)";
try(PreparedStatement ps = connection.prepareStatement(query)) {
    for(Node n : vertices) {
        ps.setString(1, n.getName());
        ps.setInt(2, n.getOrgId());
        ps.addBatch();
    }
    ps.executeBatch();
} catch(SQLException e) {
    // Exception handling
}

请注意,由于构建查询的方式,它仍然容易受到SQL注入attac的影响(因为您正在使用变量table构建字符串)。我建议您删除table变量或采取措施以确保程序的任何用户都不会看到该变量。

答案 1 :(得分:1)

尝试为多个插入准备查询,然后立即执行:

String query = "INSERT INTO " + table + " (name, department) values";
for (Node n : vertices) {
   query += " ('" + n.getName() + "', '" + n.getOrgId() + "')");
}

statement.execute(query);

答案 2 :(得分:1)

您可以同时插入多行。

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

Check this Link