java - 计算数据库中特定记录的数量

标签 java database jdbc

我有一个应用程序需要了解数据库表中某些记录的最新数量,该解决方案应该适用,而无需更改数据库代码或向其添加触发器或函数,因此我需要一个独立于数据库供应商的解决方案。 我的程序用java编写,但数据库可以是(SQLite、MySQL、PostgreSQL或MSSQL),现在我正在这样做: 在设置为守护程序的单独线程中,我的应用程序通过 JDBC 向数据库发送一个简单的命令,以了解具有条件的最新记录数量:

while(true){
          SELECT COUNT(*) FROM Mytable WHERE exited='1'
}

这种编码会导致数据库锁定,减慢整个系统的速度并生成巨大的数据库日志,最终导致整个系统崩溃! 我怎样才能以正确的方式做到始终拥有某些记录的最新数量或仅在数量发生变化时进行计数?

最佳答案

SELECT 语句本身不应具有您所描述的行为。例如,SELECT 不会记录任何内容。现在,并发的 insert/update/delete 语句可能正在执行,并且这些语句会导致问题,因为 SELECT 锁定表。

您可以做的两件事:

  1. 确保比较的类型相同。因此,如果 exited 是数字,请勿使用单引号(混合类型可能会混淆某些数据库)。
  2. 上创建索引(已退出)。基本上在所有数据库中,这都是一个命令:在 mytable(exited) 上创建索引 idx_mytable_exited

如果锁定和并发事务是一个问题,那么您将需要执行更多特定于数据库的操作,以避免该问题。

关于java - 计算数据库中特定记录的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685837/

相关文章:

java - Vaadin 错误 : com. microsoft.sqlserver.jdbc.SQLServerException: 'LIMIT' 附近的语法不正确

sql - 需要使用表名和表架构列出 SQL Server 数据库中的所有触发器

java - 查询 JDBC Java

java - 使用java将数据从mysql数据库复制到其他mysql数据库

java - 如何使用Java向测试计划中的测试用例添加参数?

java - 如何使用 Java 中的 RSAPrivateKeySpec 类从字符串创建 RSA PrivateKey?

java - 从 GridPane 上的单元格返回节点。 (JavaFX)

mysql - 如何导入 180Mb 表而不出现 max_questions 错误

mysql - '/' 应用程序中的 umbraco 站点服务器错误

Java JDBC 工作流