kal*_*kal 23 java oracle database-connection jdbc
我正在尝试使用标准JDBC方式连接到DB
connection = DriverManager.getConnection(url, username, password);
Run Code Online (Sandbox Code Playgroud)
连接上是否存在最大超时值,连接存在多长时间,是否可以增加该值.我希望在连接永远打开的情况下,这是一个好主意.
Vin*_*nie 30
您可以在DriverManager上设置Timeout,如下所示:
DriverManager.setLoginTimeout(10);
Connection c = DriverManager.getConnection(url, username, password);
Run Code Online (Sandbox Code Playgroud)
这意味着如果连接无法在给定时间内打开超时.
在保持连接永久打开方面,如果您不关闭连接,但可能不是一个好主意.连接完成后应立即关闭.
如果要优化连接的打开和关闭,则可以使用连接池.
Bal*_*usC 26
该值通常由DB控制.您无法使用代码控制它.这取决于使用的DB服务器.通常大约30分钟到一个小时.
另一方面,Connection
永远保持开放是一个非常糟糕的主意.最佳实践是获取和关闭Connection
,Statement
并ResultSet
在尽可能短的范围内避免资源泄漏和由泄漏和超时引起的潜在应用程序崩溃.
没错,连接数据库是一项昂贵的任务.如果您的应用程序应该运行相对较长的时间并且经常连接数据库,那么请考虑使用连接池来提高连接性能.如果您的应用程序是Web应用程序,那么请查看appserver的文档,它通常提供一个连接池设施DataSource
.如果它是一个客户端应用程序,那么寻找第三方连接池库,这些库已经证明了它们多年来的稳健性,例如Apache Commons DBCP(常用于批量应用服务器),C3P0(来自Hibernate)和Proxool(如果你想要的话) XA连接).
请记住,在使用连接池时,您仍然必须编写正确的JDBC代码,然后在尽可能短的范围内获取并关闭所有资源.连接池将担心实际关闭连接或仅将其释放回池以供进一步重用.
您可以从本文中获得更多有关如何以正确方式执行JDBC基础知识的见解.
希望这有助于编码.
小智 7
以下是使用Connector/J MYSQL驱动程序的方法:
String qqq = "jdbc:mysql://localhost/Test?connectTimeout=TIME_IN_MILLIS";
conn = DriverManager.getConnection(qqq, db_user, db_pass);
Run Code Online (Sandbox Code Playgroud)
之后setLoginTimeout()
无所事事,对我有用.
小智 7
只需从用户flamming_python中重新发布一个更完整的评论重新发布作为答案,因为它对我有用:
dbConnectionString = "jdbc:mysql://"+dbHost+":"+dbPort+"/"+dbTable+"?user="+dbUser+"&password="+dbPassword;
Properties properties = new Properties();
properties.put("connectTimeout", "2000");
dbConnect = DriverManager.getConnection(dbConnectionString, properties);
Run Code Online (Sandbox Code Playgroud)
原始评论:
"LoL @ your threads - 你可以通过创建一个Properties对象prop,然后prop.put("connectTimeout","2000")(其中"2000"是以ms为单位的超时)来完成它,然后将您的prop对象与您的url一起传递给DriverManager.getConnection()方法"
归档时间: |
|
查看次数: |
84130 次 |
最近记录: |