Tag: 数据库连接

如何使用Hibernate处理多个数据库模式?

在我的一个项目中,我有一个管理多个客户的应用程序(如果您愿意,还可以管理客户)。 对于它们中的每一个,我在数据库上都有一个专用的模式。 但是,应用程序一次只处理一个客户端,即用户必须在应用程序中从一个客户端切换到另一个客户端(在运行时,不重新启动应用程序)才能从此新客户端访问数据。 对于这种项目,您将如何管理连接以及持久层? 我想使用Hibernate。 在处理多个数据库/模式时,我必须非常小心的要点是什么? 在这种情况下,Spring可以提供任何帮助吗? 如果我不够清楚,让我用一个例子解释一下这种情况。 想象一下,我的应用程序可以处理两个客户端: clientONE和clientTWO 。 我已经实现了一个类,它可以为我提供给定客户端的数据库模式,用户,密码和连接字符串。 每个客户都有一个债务人列表,但遗憾的是,DEBTOR表结构对于clientONE和clientTWO并不相同。 即使表/列的名称也不一样…… 所以我可以为每个客户端创建一个debtor类(我使用Hibernate注释): @Entity @Table(name = “T_DEBTOR_ONE”) … public class ClientOneDebtor { @Id @Column(name = “ID_DEBTOR”) private String idDebtor; … } 和: @Entity @Table(name = “T_DEBTOR_TWO”) // Table names are not the same among the different schemas… … public class ClientTwoDebtor { @Id […]

错误:与主机的TCP / IP连接失败。 java.net.ConnectException:连接被拒绝:连接

我在用 Windows 7的 Netbeans IDE 7.1.2 SQL Server Management Studio Express 2005 JDK1.6 连接到数据库时出现以下错误: com.microsoft.sqlserver.jdbc.SQLServerException:与主机的TCP / IP连接失败。 java.net.ConnectException:连接被拒绝:连接 我的连接字符串是: Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”); Connection connection = DriverManager.getConnection( “jdbc:sqlserver://127.0.0.1:1433;databaseName=dbcm;” + “user=sa;password=sa”); 我检查过下面的事情: 在SQL Server配置管理器中,SQLEXPRESS的协议:TCP / IP已启用实际上我也启用了3。 SQL Server(SQLExpress)和SQL Browser Service都在运行。

关闭H2的正确方法是什么?

这与这篇文章有关 。 我认为我遇到H2问题意味着它没有正确关闭。 我怀疑这是因为当我关闭tomcat并且进程没有停止时我看到myDB.lock.db 我使用Tomcat的连接池,数据库的URL是: url=”jdbc:h2:file:/opt/myOrg/tomcat/webapps/MyApplication/db/myDatabase;SCHEMA=myschema” 来自doc close H2 : 通常,数据库在最后一次连接关闭时关闭….默认情况下,数据库在最后一个连接关闭时关闭。 但是,如果它从未关闭,则在虚拟机使用关闭挂钩正常退出时,数据库将关闭 我无法理解我是否做错了什么。 我应该通过命令强制关闭数据库吗? 这是关机钩子的意思吗? 我在这做错了什么? 注意: 我在Google中找不到如何正确关闭H2的示例(除了它在上次连接关闭时自动关闭的声明)。 我应该自己打电话给SHUTDOWN吗? 这是正确的方法吗? 我已经看到投票来结束这个问题了,但我正在调查的一个例子没有理由或联系 更新: 在Joonas Pulakka回答一些额外信息之后: 从javacore我使用kill -3我看到线程: “H2 Log Writer MYAPPLICATION”J9VMThread:0x08DC6F00,j9thread_t:0x08C9B790,java / lang / Thread:0xE7206CC8,状态:CW,prio = 5 3XMTHREADINFO1(本机线程ID:0xA32,原生优先级:0x5,本机策略:UNKNOWN)3XMTHREADINFO2 (本机堆栈地址范围从:0xE5E26000,到:0xE5E67000,大小:0x41000)3XMTHREADINFO3 Java callstack: java / lang / Object.wait中的4XESTACKTRACE(本机方法) 4XESTACKTRACE at java / lang / Object.wait(Object.java:196(Compiled Code))4XESTACKTRACE at org […]

Java Connection.close是否会回滚?

Java Connection.close是否会回滚到finally块? 我知道.Net SqlConnection.close可以做到。 有了这个,我可以在没有捕获的情况下制作try / finally块… 例: try { conn.setAutoCommit(false); ResultSet rs = executeQuery(conn, …); …. executeNonQuery(conn, …); …. conn.commit(); } finally { conn.close(); }

关闭Connection会自动关闭语句和结果集吗?

我知道Java中的安全模式是在finally块中按顺序关闭ResultSet,Statement和Connection。 如果你关闭连接然后尝试关闭语句(不抛出exception)。 但是,如果您尝试从语句中调用任何方法,则会抛出exception。 我想知道关闭连接会自动关闭从该连接创建的所有语句对象吗? 更新: 我使用的是DatabaseProductVersion:Oracle Database 11g 11.1.0.0.0版 DriverName:Oracle JDBC驱动程序 DriverVersion:10.2.0.4.0

使用C3P0的JDBC连接池

以下是我的帮助程序类来获取数据库连接: 我已经使用了如此处所述的C3P0连接池。 public class DBConnection { private static DataSource dataSource; private static final String DRIVER_NAME; private static final String URL; private static final String UNAME; private static final String PWD; static { final ResourceBundle config = ResourceBundle .getBundle(“props.database”); DRIVER_NAME = config.getString(“driverName”); URL = config.getString(“url”); UNAME = config.getString(“uname”); PWD = config.getString(“pwd”); dataSource = setupDataSource(); } public […]

是否需要Class.forName()机制?

以下代码: Class.forName(dbDriver); // “org.postgres.Driver” or “com.mysql.jdbc.Driver” 是/必须打开JDBC连接。 我听说现代JDBC驱动程序不再需要它。 但是我无法在我的项目中删除它,因为我No suitable driver foundexception。 我使用的是postgresql-9.1-901.jdbc3.jar ,Java7和tomcat7。 我什么时候可以省略Class.forName(…)构造?

MySQL通过Java代理连接

我正在开发客户端 – 服务器软件,其中客户端连接到数据库服务器,如下所示。 … try { Class.forName(“com.mysql.jdbc.Driver”); Connection conexion = DriverManager.getConnection(“jdbc:mysql://localhost/agenda”, “root”, “LA_PASSWORD”); }catch…. … 两个应用程序始终位于同一本地网络上。 我遇到的问题是当本地网络使用代理时,在这种情况下MySQL连接失败。 如何在本地网络上代理时使用Java编程语言,MySQL数据库进行连接? 谢谢您的帮助。 问候!

java – 独立应用程序的DataSource – 没有应用程序服务器

我想从独立的应用程序连接到MySQL数据库。 没有应用程序/ Web服务器。 此页面建议我应该使用DriverManager来创建连接。 但是, 此页面表明无法合并从DriverManager创建的连接。 但是连接池对我来说是必须的,因为应用程序使用各种线程同时写入数据库,因此关闭/重新创建连接不是最佳选择。 我应该为此目的使用哪种DataSource实现? 我查看了MysqlConnectionPoolDataSource,但我不确定它是否实际实现了连接池。 我还查看了Tomcat DataSource ,我确信它实现了一个连接池,但我不确定它是否可以在Tomcat之外使用。 当我关闭独立应用程序时,我该怎么做才能正确释放连接/池? 编辑:看起来Tomcat DataSource 可以从独立应用程序中使用,所以我将使用它。 它还有一个close方法,我假设它将释放连接。

DriverManager getConnection的连接超时

我正在尝试使用标准JDBC方式连接到DB connection = DriverManager.getConnection(url, username, password); 连接上是否存在最大超时值,连接存在多长时间,是否可以增加该值。 我希望在连接永远打开的情况下,这是一个好主意。