Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多次访问数据库_Java_Database - Fatal编程技术网

Java 多次访问数据库

Java 多次访问数据库,java,database,Java,Database,我正在研究下面提到的解决方案,但找不到任何最佳实践/工具。 对于webservice中接收到的一批请求(比如5000个唯一ID和记录),它必须在数据库中获取这些唯一ID的行,并将它们保存在缓冲区(或缓存)中,并将它们与webservice中接收到的记录进行比较。如果某个特定数据(如列)发生更改,该数据将在表中针对该唯一id进行更新。反过来,该表的子表也会受到影响。例如,如果有人更改其笔记本电脑型号和国家/地区,则型号将在一个表中更新,国家/地区值将在另一个表中更新。同样,它在短时间内访问多个表。

我正在研究下面提到的解决方案,但找不到任何最佳实践/工具。 对于webservice中接收到的一批请求(比如5000个唯一ID和记录),它必须在数据库中获取这些唯一ID的行,并将它们保存在缓冲区(或缓存)中,并将它们与webservice中接收到的记录进行比较。如果某个特定数据(如列)发生更改,该数据将在表中针对该唯一id进行更新。反过来,该表的子表也会受到影响。例如,如果有人更改其笔记本电脑型号和国家/地区,则型号将在一个表中更新,国家/地区值将在另一个表中更新。同样,它在短时间内访问多个表。一个webservice调用的最大记录数可能在一个小时内的一次调用中达到70K


除了用java实现它,我没有其他选择。有没有实现这一点的良好实践,或者可以使用任何开源java工具来实现。请建议。谢谢。

您应该首先尝试休眠。我倾向于避免使用它,因为它对于我的大多数应用程序来说都是多余的,但它是访问数据库的标准工具,任何了解Java的人至少都应该了解它。您可以使用几十种其他解决方案,但Hibernate是最常用的解决方案。

JDBC是用于访问关系数据库的API。有用的性能和安全提示:

  • 使用事先准备好的陈述
  • 使用
    where。。。in()
    查询一次加载多行,但要注意
    in
    子句中的值数量限制(Oracle中最多1000个)
  • 使用批处理语句进行更新,而不是单独执行每个更新(请参阅)

有关JDBC的教程,请参阅。

这听起来没那么复杂。当然,你必须知道(或学习):

  • SQL
  • JDBC
然后,您可以逐个记录查看web服务数据记录,并对每个记录执行以下操作:

fetch corresponding database record
for each field in record
    if updated
        execute corresponding update SQL statement
commit // every so many records

对于一个像样的RDBMS来说,每小时70K条记录应该不是一个很小的问题。

您给出的建议可能有意义,也可能没有意义。例如,出于此处未提及的原因,“单独执行每个更新”可能是至关重要的。这只是一个性能提示,正如我在回答中所写的那样。OP可以决定它是否适用于他的问题(尽管根据他的任务描述,它似乎适用)。但至少,我给了他一个建议,可以提高他的更新性能。大多数ORM默认使用批量更新,因为在99%的情况下,它们不会导致任何问题。是的,这是一个性能提示,甚至可能有意义。然而,OP显然根本不知道如何解决这个问题,所以在这个时候,用性能提示来迷惑他不是一个好主意。此外:in子句中的值的数量可能在数据库XY中受到限制(这是一个硬限制还是一个参数?谁知道呢),但他没有提到他正在使用的任何特定RDBMS,这是一件好事。此外,这个描述听起来更像是他可以一个记录一个记录地做这件事,而不需要任何IN子句。OP disn没有要求解决方案,他要求“实现这一点的任何良好实践”,以及“是否可以使用任何开源java工具来实现”。因此,我的答案是:JDBC(一种开源javaapi),带有到教程的链接,以及良好实践(使用准备好的语句、批处理更新、in子句,而不是在所有id上循环)。