我正在尝试启动hsqldb的嵌入式版本,它可以正常使用包含的工具,它们不会很慢或任何东西。
但是当我尝试使用以下代码获得20行时,在打印所有结果之前最多需要10秒
Class.forName("org.hsqldb.jdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://127.0.0.1/woopwoop", "SA", "");
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM ttris_users");
while(rs.next())
{
output += "<tr>";
output += "<td>" + rs.getString("id") + "</td>";
output += "<td>" + rs.getString("name") + "</td>";
output += "<td>" + rs.getString("password") + "</td>";
output += "<td>" + rs.getString("email") + "</td>";
//name, password, email
output += "</tr>";
}
我以一种非常简单的方式初始化服务器,这可能就是为什么它运行缓慢,我该如何优化呢?
org.hsqldb.server.Server server = new org.hsqldb.server.Server();
server.setDatabaseName(1, "woopwoop");
server.setDatabasePath(1, "C:\\ttris\\db\\");
server.start();
在控制台中打印的日志中,它会显示查询 27 次
[编辑] 下面是日志中的第一个条目
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=37523,localport=9001]) entered
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection() exited
[Server@1050e1f]: [Thread[HSQLDB Connection @3e0ebb,5,HSQLDB Connections @1050e1f]]: 0:Trying to connect user 'SA' to DB (woopwoop)
[Server@1050e1f]: [Thread[HSQLDB Connection @3e0ebb,5,HSQLDB Connections @1050e1f]]: 0:Connected user 'SA'
[Server@1050e1f]: 0:SELECT * FROM ttris_users
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=37524,localport=9001]) entered
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection() exited
[Server@1050e1f]: [Thread[HSQLDB Connection @76fba0,5,HSQLDB Connections @1050e1f]]: 1:Trying to connect user 'SA' to DB (woopwoop)
[Server@1050e1f]: [Thread[HSQLDB Connection @76fba0,5,HSQLDB Connections @1050e1f]]: 1:Connected user 'SA'
[Server@1050e1f]: 1:SELECT * FROM ttris_users
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection(Socket[addr=/127.0.0.1,port=37525,localport=9001]) entered
[Server@1050e1f]: [Thread[HSQLDB Server @1050e1f,5,main]]: handleConnection() exited
[Server@1050e1f]: [Thread[HSQLDB Connection @16dadf9,5,HSQLDB Connections @1050e1f]]: 2:Trying to connect user 'SA' to DB (woopwoop)
[Server@1050e1f]: [Thread[HSQLDB Connection @16dadf9,5,HSQLDB Connections @1050e1f]]: 2:Connected user 'SA'
[Server@1050e1f]: 2:SELECT * FROM ttris_users
该问题位于正在使用数据的servlet中,现在已解决
答案 0 :(得分:2)
这里有些东西。我不认为你给我们提供了识别问题所需的所有代码。
如果您的日志显示查询执行了27次,那么这就是问题所在。找出为什么。您粘贴的代码不包含会导致此问题的循环。因此,我必须假设导致此问题的代码被排除在您提供给我们的示例之外。
在日志中添加其他条目,并通过执行跟踪您的程序。找出它循环27次的地点和原因。您提供给我们的信息没有显示出这一点。
另外,您说您使用此代码获得20个表。你的意思是20个记录/行?我只看到一个表中的查询:ttris_users
。
答案 1 :(得分:1)
将查询显示27次非常奇怪;你确定这个代码不能被多次调用吗?
关于加快速度:将会有一个很多的字符串复制,以至于它会对性能产生重大影响。考虑使用StringBuilder和append()调用:
output.append("<td>").append(rs.getString("id")).append("</td>");