Java 哪种方法的性能更好?(关于JDBC中prepared语句中可变参数标记的用法)
我的目标是从Emp表中获取某些员工的部门名称。但是雇员的数量是不同的。请说明以下方法是否正确,以及以下哪种方法在性能方面更好。还是有更好的办法Java 哪种方法的性能更好?(关于JDBC中prepared语句中可变参数标记的用法),java,performance,jdbc,prepared-statement,Java,Performance,Jdbc,Prepared Statement,我的目标是从Emp表中获取某些员工的部门名称。但是雇员的数量是不同的。请说明以下方法是否正确,以及以下哪种方法在性能方面更好。还是有更好的办法 PreparedStatement pstmt = conn.prepareStatement("SELECT Dept from Emp WHERE EmpNum = ? "); for (int i = 0, len = empNumberList.size(); i < len; i++) { pstmt.setLong
PreparedStatement pstmt = conn.prepareStatement("SELECT Dept from Emp WHERE EmpNum = ? ");
for (int i = 0, len = empNumberList.size(); i < len; i++) {
pstmt.setLong (1, empNumberList.get(i));
ResultSet rs = pstmt.executeQuery();
}
PreparedStatement pstmt=conn.prepareStatement(“从Emp中选择部门,其中EmpNum=?”;
for(int i=0,len=empNumberList.size();i
或
StringBuffer buffer = new StringBuffer();
buffer.append("SELECT Dept from Emp WHERE EmpNum IN(?");
for (int i = 0, len = empNumberList.size(); i < len; i++) {
buffer.append(",?");
}
buffer.append(")");
PreparedStatement pstmt = con.prepareStatement(buffer.toString());
for(int i = 0; i < len; i++) {
pstmt .setLong(i, empNumberList.get(i));
}
ResultSet rs = pstmt .executeQuery();
StringBuffer=new StringBuffer();
append(“从Emp中选择Dept,其中EmpNum在(?);
for(int i=0,len=empNumberList.size();i
或者还有其他更好的方法吗?请给我一些建议。提前谢谢
拉维拉我会说
“选择Emp中EmpNum所在的不同部门(“+queries+”)”
然后执行setLong()将是最好的方法,也可能是最好的性能,但确保性能的唯一方法是对其进行分析。一般来说,执行一个查询胜过执行多个查询,因为在大多数(琐碎的)查询中,服务器往返被视为一项巨大的成本 也就是说,数据库供应商、JDBC或驱动程序可能会限制以这种方式传递的参数数量,因此您必须对此保持警惕
就像另一张海报上说的:没有必要对客户进行过滤。在这种情况下只需使用DISTINCT。可能是第二种选择,因为通常数据库查询需要更多时间 此外,您的代码中有一个bug:
StringBuffer buffer = new StringBuffer();
buffer.append("SELECT Dept from Emp WHERE EmpNum IN(?");
for (int i = 1, len = empNumberList.size(); i < len; i++) { // one ? was written
buffer.append(",?");
}
buffer.append(")");
PreparedStatement pstmt = con.prepareStatement(buffer.toString());
for(int i = 0; i < len; i++) {
pstmt .setLong(i+1, empNumberList.get(i)); // pstmt setXXX() are 1 based
}
ResultSet rs = pstmt .executeQuery();
StringBuffer=new StringBuffer();
append(“从Emp中选择Dept,其中EmpNum在(?);
为(inti=1,len=empNumberList.size();i
我同意第二个可能更快的估计
然而,如果您真的想知道:基准测试。性能结果通常是不直观的,并且在平台、数据库、体系结构和版本之间会有所不同。所以,你自己试试看,并测量差异