0
的情况是这样的:避免JDBC调用
for loop // runs say 200000 times
{
// here, i do a select from a database, fetching few rows which are expected to increase with every new iteration of for loop
// currently i am doing this select using simple JDBC call (using JDBC only is NOT a requirement)
// then i do some string matching stuff and then i either insert or update a particular row (in 95% cases i will insert)
// this insert or update is being done using Hibernate (using Hibernate over here is a requirement)
}
所以,问题是,在每一个循环,我必须要考虑每一个先前插入/更新的行。由于这个要求,我必须在每个循环中执行JDBC调用。这个JDBC调用正在最大限度地减少性能。
我想知道,是否有任何方法使用它我不必在每次迭代中进行JDBC调用,但是仍然可以考虑所有记录,包括前一个插入/更新中的记录?像缓存或一些内存中的数据结构或类似的东西?
下面是代码:
for loop // runs say 2000 times
{
String query = pdi.selectAllPatients(patientInfo);
Statement st = conn.createStatement();
ResultSet patientRs = st.executeQuery(query);
while (patientRs.hasNext())
{
// some string ops
}
// Create session for DB No.2
Session sessionEmpi = sessionFactoryEmpi.getCurrentSession();
sessionEmpi.beginTransaction();
if(some condition)
patientDao.insertPatient(patientInfo, sessionEmpi);
else
patientDao.insertref(patientInfo.getref(), sessionEmpi);
conn.commit();
}
public int insertPatient(PatientInfo input, Session session) throws SQLException {
try {
session.save(input.getPatient());
session.flush();
session.save(input.getref());
session.getTransaction().commit();
return 1;
} catch (Exception ex) {
session.getTransaction().rollback();
ex.printStackTrace();
return 0;
}
}
你确定你在java中使用nhibernate吗? – abalogh 2011-05-16 14:48:06
我正在使用Hibernate,而不是nhibernate。 – Bhushan 2011-05-16 14:49:53
然后不要标记'nhibernate'。我删除它。至于具体的问题,你在使用连接池吗?获得一个unpooled连接成本至少200毫秒,获得一个池连接基本上是一个没有操作。 – BalusC 2011-05-16 14:51:09