Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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_Hibernate - Fatal编程技术网

Java 数据库连接池和数据库连接?

Java 数据库连接池和数据库连接?,java,hibernate,Java,Hibernate,我已经创建了一个桌面应用程序,并通过数据库连接(bean/class)将其连接到MySQL数据库,我可以使用CRUD。我在NetBeans网站上看到,他们在web应用程序上创建了一个连接池 连接池是否与桌面应用程序上的类/bean相同 这是否意味着我创建了一个类似于桌面应用程序的bean/类,该应用程序与数据库模型(MVC)相连接,还是我必须做其他事情 在Glassfish服务器上,您可以使用向导创建连接池;在Apache上,您不需要。我必须为Apache创建DB连接bean吗 将DB连接到we

我已经创建了一个桌面应用程序,并通过数据库连接(bean/class)将其连接到MySQL数据库,我可以使用CRUD。我在NetBeans网站上看到,他们在web应用程序上创建了一个连接池


连接池是否与桌面应用程序上的类/bean相同

这是否意味着我创建了一个类似于桌面应用程序的bean/类,该应用程序与数据库模型(MVC)相连接,还是我必须做其他事情

在Glassfish服务器上,您可以使用向导创建连接池;在Apache上,您不需要。我必须为Apache创建DB连接bean吗

将DB连接到web应用程序的实践是什么(bean,其他什么?)


我也读过关于Hibernate的书,但我不明白它的用法。冬眠在哪里有帮助?我的意思是,这是ORM,但是Hibernate能为我做些什么使我的代码更容易呢?我想我没有抓住ORM的要点,因为Hibernate将帮助您进行事务管理。它将使您能够打开到数据库的多个不同连接,并且在您使用不可用的对象(例如从不同线程拉入的bean)时也会发出警告


当您查询数据库时,Hibernate的ORM将使您的代码变得更容易的一个具体示例。您可以使用-querys,而不是将标准SQL查询编写为字符串。

在Java中,DB连接始终使用JDBC驱动程序。据我所知,没有一个数据库允许在单个连接上同时运行多个SQL命令,因此如果应用程序可以同时运行多个SQL命令,则每个连接都会成为瓶颈(对于web服务器来说,通常情况下数百个用户可以同时与数据库交互)

UPDATE:我想说的是:您可以通过单个连接轻松地菊花链命令(如
UPDATE…;COMMIT
),但您不能同时发送两个
UPDATE
命令——您必须始终等待第一个命令完成,然后才能发送下一个命令。有些数据库允许在一个查询中发送多个命令,但它们是依次执行的,而不是同时执行的。试想一下:如果您可以在单个连接上并发运行多个命令,您如何知道它们的执行顺序

最重要的是,创建数据库连接对于大多数数据库来说是昂贵的。因此,它们在应用程序启动期间提前创建并保存在池中。只要您使用池JDBC驱动程序“连接”到数据库,它就会从池中选择一个未使用的连接并返回它。这(几乎)不需要时间。当您“关闭”连接时,它将返回到池中

另外一个好处是,池可以保持连接的活动状态。因此,当您需要一个新连接时(只要数据库还在运行),您就不必担心连接错误

从应用程序方面看,这要么是透明的(目前大多数JDBC驱动程序要么在内部使用池,要么使用池API)。如果您的JDBC驱动程序没有,那么您可以始终使用DBCP之类的池。池处理所有令人讨厌的细节,您可以根据池API编写应用程序,而不是直接使用JDBC。医生会告诉你怎么做

冬眠是一种不同的动物。Hibernate是JDBC之上的一个层,可以将POJO转换为SQL并返回

因此,您可以说

class Pojo { long id; String value; }
Pojo demo = new Pojo();
demo.value = "Test";

session.persist(demo);
Hibernate将为您创建SQL并将其发送到DB。在这个阶段,它不会让你的生活变得更轻松。当您更改POJO时,Hibernate开始发光:

class Pojo { long id; String value; 
    String name; // Oops ... forget the name
}
Pojo demo = new Pojo();
demo.name = "John";
demo.value = "Test";

session.persist(demo);

Hibernate将相应地更改DB定义,并更新加载和保存对象所需的所有SQL命令。

连接池是否与桌面连接上的类/bean相同?这是否意味着他们创建了一个类似于桌面应用程序的bean/类,该应用程序连接到模型中的DB(MVC),或者他们有其他的东西?在Glassfish服务器上,您可以使用向导创建连接池;在Apache上,您不需要。我必须为Apache创建DB连接bean吗?将DB连接到web应用程序的实践是什么(bean,其他什么?)?Apache是一整套带有多个web服务器的项目,所以我不确定“Apache”是什么意思。还有什么是“桌面连接”?正如我所说,要么你的JDBC驱动程序做池;在这种情况下,您需要选择正确的驱动程序类别。或者您需要一个完全不同的池框架。这涉及到一些bean,但我不明白您所说的是哪个bean。这很难解释。当我创建桌面api时,如果我想连接DB,我会创建一个带有“usr-pss-driver等”的类,好吗?如果我想创建一个web api,我也会这样做吗?一个有“usr,pss,driver”的类,或者我可以用另一种方式来做。例如没有类。@giorgo:是的,基本原理是一样的。由于几乎所有的web应用程序都需要一个DB,所以所有的web服务器(Tomcat、JBoss AS等)都有内置的连接池,它们为您完成所有繁琐的工作(因此您只需请求一个连接,容器就会为您创建并关闭它)。不过,你不必用这个。您仍然可以创建自己的连接并自己管理。”“因为几乎所有web应用程序都需要DB,所以所有web服务器(Tomcat、JBoss AS等)都有内置的连接池,它们为您完成所有的脏活(因此您只需请求连接,容器就会为您创建并关闭连接)。”是的,谢谢,这就是我要问的,我想现在已经清楚了。我怎么能要求转接?以Apache为例。