我正在研究我的第一个个人项目,试图学习postgresql和Java的基础知识。
我试图在数据库中生成随机生成的整数,其中45000个条目,int表示日期和时间,在插入中使用for循环。我已经设法能够自己做这个部分并搜索SX,但我遇到了一个问题。
如果您可以查看下面的代码,我想基于同一行中的前一个字段随机生成一个整数。例如,如果我的TIMEHST(表示进程开始的时间小时)随机生成为该行的8,我希望我的TIMEHED(表示进程结束的时间小时)是随机的(TIMEHST和TIMEHST + 5)之间的整数。如果下面的代码看起来像意大利面条,请原谅我,我只编写了5个月的Java和1个月的Java。
package generateSamepleDataSet;
import java.sql.*;
/**
* Created by jkyju_000 on 2/16/2016.
*/
public class GenerateProcessSqlDatabase {
public static void main(String args[]) {
Connection c = null;
Statement stmt = null;
try {
Class.forName("org.postgresql.Driver");
c = DriverManager
.getConnection("jdbc:postgresql://localhost:5432/postgres",
"postgres", "adfadf12");
c.setAutoCommit(false);
System.out.println("Opened database successfully");
stmt = c.createStatement();
for (int i = 0; i < 45000; i++) {
String sql = "INSERT INTO ARRIVALS (DATEY,DATEM,DATED,TIMEHST,TIMEMST,TIMEHED,TIMEMED) "
+ "VALUES ( " + (2012 + (int)(Math.random() * ((2015 - 2012) + 1))) + ", " + (1 + (int)(Math.random() * ((12 - 1) + 1))) + ", " + (1 + (int)(Math.random() * ((30 - 1) + 1))) + ", " + (7 + (int)(Math.random() * ((19 - 1) + 1))) + ", " + (0 + (int)(Math.random() * ((59 - 0) + 1))) + ", "I have no idea what to put in TIMEHED", "Also have no idea what to put in TIMEMED" );";
stmt.executeUpdate(sql);
}
stmt.close();
c.commit();
c.close();
} catch (Exception e) {
System.err.println( e.getClass().getName()+": "+ e.getMessage() );
System.exit(0);
}
System.out.println("Records created successfully");
}
}
答案 0 :(得分:1)
首先,您需要了解prepared statements来传递参数,而不是连接值。这将使您的代码更快,更重要,更安全,更容易阅读。
您还需要将整个问题分解为多个部分,并在方法中对这些部分进行编码:
int processStart = generateRandomProcessStart();
int processEnd = processStart + generateRandomDurationBetween0And5();
preparedStatement.setInt(4, processStart);
preparedStatement.setInt(6, processEnd);