Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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_Mysql_Jdbc - Fatal编程技术网

Java 一个连接可以同时做多种事情吗?

Java 一个连接可以同时做多种事情吗?,java,mysql,jdbc,Java,Mysql,Jdbc,我读了一点关于JDBC的JDBC,我有一个问题 为什么有多个连接(连接池)比只有一个连接更好 连接一次只能做一件事吗 如果是这样,如果您请求连接执行某些操作,而它已经在执行其他操作,会发生什么情况 连接池不允许单个进程/应用利用多个连接。根据维基百科: 连接池是维护的数据库连接缓存,以便在将来需要数据库请求时可以重用连接 当有大量进程/应用程序正在运行时,将使用连接池。如果每个进程/应用程序在每个请求周期开始时创建一个新的数据库连接(并在每个请求周期结束时关闭),那么开销将很大 相反,您可以维护

我读了一点关于JDBC的
JDBC
,我有一个问题

  • 为什么有多个连接(连接池)比只有一个连接更好

  • 连接一次只能做一件事吗

  • 如果是这样,如果您请求连接执行某些操作,而它已经在执行其他操作,会发生什么情况

  • 连接池不允许单个进程/应用利用多个连接。根据维基百科:

    连接池是维护的数据库连接缓存,以便在将来需要数据库请求时可以重用连接

    当有大量进程/应用程序正在运行时,将使用连接池。如果每个进程/应用程序在每个请求周期开始时创建一个新的数据库连接(并在每个请求周期结束时关闭),那么开销将很大

    相反,您可以维护固定数量的打开连接(可能是在服务器启动时),并在流程/应用程序需要查询数据库时重用它们。打开和关闭连接的开销将不再存在

  • 一个连接可能是,但最终将在给定时间只服务一个请求。开发人员正在努力,确保不会出现这种情况

  • 如果你这样做的话,可能会发生大量不希望发生的事情。有

    • 提交或回滚事务将关闭所有打开的
      ResultSet
      对象和当前正在执行的
      语句,除非您使用的是保留游标

      如果一个线程提交,它将关闭使用相同连接的所有其他线程的
      语句
      结果集

    • 执行
      语句
      会自动关闭先前执行该
      语句
      生成的任何现有打开的
      结果集

      如果线程共享
      语句
      ,则一个线程可以关闭另一个线程的
      结果集

    列出了一些避免不良行为的做法:

    • 避免在线程之间共享
      语句
      (及其
      结果集
    • 每次线程执行
      语句
      ,它都应该在放弃
      连接之前处理结果
    • 每次线程访问
      连接
      ,它都应该根据应用程序协议一致地提交或不提交
    • 有一个线程是“管理”数据库
      连接
      线程,该线程应处理更高级别的任务,例如建立
      连接
      、提交、回滚、更改
      连接
      属性,例如自动提交、关闭
      连接
      、关闭数据库(在嵌入式环境中),等等
    • 关闭释放资源不再需要的
      结果集
      语句

  • 在阅读了JDBC之后,你对这些问题有什么想法吗?@sherb我的想法是最好有一个连接池,因为一个连接一次只能做一件事,而不是每次都创建一个新的连接,你可以使用一个循环使用的连接,它需要更少的资源。(我不太确定这是否正确,这就是我问的原因)