- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我必须编写一个java程序来从3个表中获取数据。由于某些商业原因我无法加入他们。我必须按如下方式一一获取记录
Fetch all records from Table1
For every record on table1 do
if some business-validation passes
retrieve corresponding records from Table2
For every record on table2 do
if some business-validation passes
retrieve corresponding records from Table3
我编写的代码如下:
Statement statement1 = dbConnection.createStatement();
ResultSet rs1 = statement1.executeQuery("QUERY TO RETRIEVE DATA FROM TABLE1");
while(rs1.next()){
// Do business validation
Statement statement2 = dbConnection.createStatement();
ResultSet rs2 = statement2.executeQuery("QUERY TO RETRIEVE CORRESPONDING DATA FROM TABLE2");
while(rs2.next()){
// Do business validation
Statement statement3 = dbConnection.createStatement();
ResultSet rs3 = statement2.executeQuery("QUERY TO RETRIEVE CORRESPONDING DATA FROM TABLE3");
while(rs3.next()){
}
rs3.close();
statement3.close()
}
rs2.close();
statement2.close()
}
rs1.close();
statement1.close()
每个表可以有数百条记录。现在我的问题是
在每个循环中执行 createStatement
并关闭它是否正确?会不会很贵?
a。如果我在开始时创建 3 条语句并简单地使用它们来调用 executeQuery()
,会怎样?有优势吗?
b.在这种情况下,我需要在内部使用后关闭 statement2
和 statement3
吗?
哪种方式是首选方式?有没有更好/更快的方法?
最佳答案
您的查询2和查询3似乎分别接受查询1和查询2结果集中的参数。
为什么不对所有这些都使用PreparedStatement。请参阅此链接了解使用PreparedStatement相对于Statement的好处
Difference between Statement and PreparedStatement
使用PreparedStatement在循环外部声明所有三个语句,然后在循环内部使用它们。@Elliott Frisch 对于关闭任何语句类型都是正确的。
始终尽可能避免循环中的createStatement。
您还必须考虑存储过程。如果您可以编写一个具有循环逻辑的存储过程,那么这可能是最适合您的方法。但这确实取决于具体情况。
关于java - connection.createStatement 有多贵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148152/
我正在对 pandas DataFrame 创建进行基准测试,发现它比创建 numpy ndarray 更昂贵。 基准代码 from timeit import Timer setup = """ i
我是一名优秀的程序员,十分优秀!