gpt4 book ai didi

java - 使用JAVA向数据库表中插入多行

转载 作者:行者123 更新时间:2023-12-02 13:40:39 26 4
gpt4 key购买 nike

我需要将包含随机数的多行(大约 100 万行)插入到 Postgresql 数据库中。此代码在数据库中生成一行随机数。我怎样才能使语句本身循环任意次数?

        Random rand = new Random();
for (int j=0;j < 1;j++);

stmt = c.createStatement();
String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
+ "VALUES ('" + rand.nextInt() + "', '" + rand.nextInt() + "', '" + rand.nextInt() + "', '" + rand.nextInt() + "'," +
" '" + rand.nextInt() + "')";
stmt.executeUpdate(sql);

stmt.close();
c.commit();
c.close();

最佳答案

你基本上有两种选择来做到这一点

让数据库完成所有工作

按照@a_horse_with_no_name的建议:仅使用一个INSERT,并让数据库计算所有随机值:

INSERT INTO COMPANY 
(ID
,NAME
,AGE
,ADDRESS
,SALARY)
SELECT
i
,random() * 10000 + 1
,random() * 80 + 1
,random() * 10000 + 1
,random() * 1000000 + 1
FROM
generate_series(1,1000000) i

这将是使用 PostgreSQL 时用随机值填充表(例如模拟数据)的常用方式。请注意一件事:ID 列,假设它是一个PRIMARY KEY(即:UNIQUE 且 NOT NULL),则永远不应该分配随机值,该值可能会重复。

拥有程序计算出的所有值,但仅生成一个语句:

如果由于某种原因,PostgreSQL 的随机性对于您的应用程序来说不够好,或者您想通过程序控制(伪)随机值的生成方式,您可以利用事实上,您可以在 VALUES 中声明多行。

也就是说,下面的语句是有效的:

INSERT INTO some_table(a_column) VALUES (101), (102), (103), (104) ;

并将在 some_table 中插入四行。

您可以更改程序以这种方式生成值:

Random rand = new Random();
StringBuilder sql =
new StringBuilder("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES ;");

for (int j=0; j < 1000000; j++)
{
if (j) sql.append (",")
sql.append ("(" + j.toString() + /* ID should NOT be random() */
",'" + rand.nextInt().toString() + "'" + /* NAME */
",'" + rand.nextInt().toString() + "'" + /* AGE */
",'" + rand.nextInt().toString() + "'" + /* ADDRESS */
",'" + rand.nextInt().toString() + "'" + /* SALARY */
")") ;
}

stmt = c.createStatement();
stmt.executeUpdate(sql.toString());
stmt.close();
c.commit();
c.close();

注 1:以这种方式生成的 SQL 语句并不“危险”,因为您可以完全控制用于生成它的数据。如果您要使用用户输入或某些来源或格式不可信的信息,请使用 PREPARED STATEMENTS,以避免 SQL injection 的风险.

注 2:使用 StringBuilder (不是字符串)生成这么大的字符串。

注 3:由于 SQL 字符串可能太大而无法由 JDBC 或数据库本身处理(如 @dsp_user 所指出的),因此可能有必要限制循环内的迭代次数;并对其进行第二个循环(显然,在这种情况下,j变量的使用应该改变)。

关于java - 使用JAVA向数据库表中插入多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42752982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com