把tArrayList数组列表(数组大小为15330)中的每一个元素都到wordlist(34584条记录) 中查询出现了几次,禁止自动提交。但是效率还是极慢。怎么做可以快一点。c = DriverManager.getConnection("jdbc:mysql://localhost/test",
"root", "root");
c.setAutoCommit(false);
ArrayList<Double> Pt = new ArrayList<Double>();
String querySelect = new String(
"SELECT * FROM wordlist WHERE WordName=?");
try {
PreparedStatement ps = c.prepareStatement(querySelect);
for (int i = 0; i < tArrayList.size(); i++) {
ps.setString(1, tArrayList.get(i));
rs = ps.executeQuery();
rs.last();
Pt.add((rs.getRow() / 100.0));
System.out.println(rs.getRow() / 100.0);
}
ps.close();
c.commit();
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
"root", "root");
c.setAutoCommit(false);
ArrayList<Double> Pt = new ArrayList<Double>();
String querySelect = new String(
"SELECT * FROM wordlist WHERE WordName=?");
try {
PreparedStatement ps = c.prepareStatement(querySelect);
for (int i = 0; i < tArrayList.size(); i++) {
ps.setString(1, tArrayList.get(i));
rs = ps.executeQuery();
rs.last();
Pt.add((rs.getRow() / 100.0));
System.out.println(rs.getRow() / 100.0);
}
ps.close();
c.commit();
c.close();
} catch (SQLException e) {
e.printStackTrace();
}
`ID` int(11) NOT NULL AUTO_INCREMENT,
`FileName` varchar(255) DEFAULT NULL,
`FileClass` varchar(255) DEFAULT NULL,
`WordName` varchar(255) DEFAULT NULL,
`WordCount` int(11) DEFAULT '0',
PRIMARY KEY (`ID`)
)
查询tArrayList中每个元素在表wordlist中出现过几次,然后添加到pt数组列表中,现在就是这个查询很慢。
select WordName ,count(*) from a inner join wordlist on a.WordName =wordlist.WordName
group by WordName;得到的这个记录集再循环添加到pt数组里。这样比你在代码里面一个个循环,循环15330*34584次要快很多。
(数组大小为15330)中的每一个元素都到wordlist(34584条记录)
完全可以在内存中操作。无非是一个map,一个list, 然后循环,比数据库快多了。
然后内存中比较 , 应该不会超过10s
while (rs.next)
{
map.put(rs("wordname"), rs("cnt"));
}for (int i = 0 ; i < tArrayList.size() ; i++)
{
pt = map.get(tArrayList(i))/100;
}不想写java代码 , 能看懂?