Java 使用一些缓存的Mysql配置
我使用JDBCJavaMySQL驱动程序,但我发现当我运行测试时,我确实会删除表填充数据并从后面直接读取数据,这种情况下速度会有多慢。数据似乎不存在,但我确实延迟了几秒钟-数据存在。我担心不仅测试是这样工作的,生产代码也可能无法读取最后编写的数据 所以我需要在写完后马上阅读。毫不拖延 一些缓存会有帮助吗?谷歌搜索和试用手册仍然找不到答案 以下是我用于插入和检索的一些代码:Java 使用一些缓存的Mysql配置,java,mysql,jdbc,Java,Mysql,Jdbc,我使用JDBCJavaMySQL驱动程序,但我发现当我运行测试时,我确实会删除表填充数据并从后面直接读取数据,这种情况下速度会有多慢。数据似乎不存在,但我确实延迟了几秒钟-数据存在。我担心不仅测试是这样工作的,生产代码也可能无法读取最后编写的数据 所以我需要在写完后马上阅读。毫不拖延 一些缓存会有帮助吗?谷歌搜索和试用手册仍然找不到答案 以下是我用于插入和检索的一些代码: private Connection conn = null; private Statement stmt0; priva
private Connection conn = null;
private Statement stmt0;
private Statement stmt1;
@Inject
public DBConnectorMysql(@Named("JDBC_URL") String url, @Named("JDBC_CRED") String creds) throws SQLException {
conn = DriverManager.getConnection(url + creds);
stmt0 = conn.createStatement();
stmt1 = conn.createStatement();
}
@Override
public ResultSet executeQuery(String query) throws SQLException {
return stmt0.executeQuery(query);
}
@Override
public int executeUpdate(String query, String... values) throws SQLException {
PreparedStatement stmt = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
int i = 0;
for (String s: values){
stmt.setString( ++i, s );
}
stmt.executeUpdate();
int newId = -1;
ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
newId = rs.getInt(1);
}
rs.close();
stmt.close();
return newId;
}
我确实使用JavaSE与
我主动使用了三个没有外键的表。从代码中可以看出,您使用了来自同一连接的多个语句/准备好的语句对象,这些对象同时打开。这可能会产生意想不到的结果JDBC规范并没有具体说明如何处理这个问题,这取决于每个供应商的实现,我隐约记得MySQL/JDBC连接器的旧版本也有类似的行为 您应该确保在任何时候都只打开其中一个。您可以用一个简单的语句替换所有语句,但正如我看到的,这是不实际的,因为您需要executeQuery中的语句和executeUpdate中的PreparedStatement 否则,您可以将createStatement调用移动到使用它们的方法内部。executeQuery的最佳实践是返回带有结果的ArrayList,并在返回之前关闭ResultSet和stmt0 另一个不那么优雅的解决方案是编写closeQuery方法,在处理完executeQuery中的ResultSet后关闭stmt0
您必须在rs.close之前致电conn.commit,才能使更改生效。您能分享更多详细信息吗?您使用的是纯Java还是服务器、JavaEE等?此外,您能否给出一些您正在谈论的表行数的指示?刚刚添加到问题中。谢谢