mysql 循环建立连接 异常_MySql连接异常解决

这两天遇到一个mysql连接的问题,找人弄了好几天也没弄好,先看一下报错信息:

====================================================================

org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Cannot open connection

at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596)

at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)

at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:334)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:105)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)

at hitec.dms.element.service.biz.impl.DmsMonitorThreadServiceImpl$$EnhancerByCGLIB$$a293fc8f.findList()

at hitec.influence.platform.quartz.ThreadListener.monitorThread(ThreadListener.java:117)

at hitec.influence.platform.quartz.job.GatherJob.process(GatherJob.java:12)

at hitec.influence.platform.quartz.QuartzDispatcher$QuartzJob.execute(QuartzDispatcher.java:377)

at org.quartz.core.JobRunShell.run(JobRunShell.java:202)

at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:525) Caused by: org.hibernate.exception.JDBCConnectionException: Cannot open connection

at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:97)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)

at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52)

at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449)

at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)

at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)

at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)

at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354)

at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:555)

... 11 more Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.

at sun.reflect.GeneratedConstructorAccessor248.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)

at com.mysql.jdbc.MysqlIO.(MysqlIO.java:350)

at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2393)

at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215)

at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:813)

at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)

at sun.reflect.GeneratedConstructorAccessor43.newInstance(Unknown Source)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:526)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)

at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38)

at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:582)

at org.apache.commons.pool.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:1148)

at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:106)

at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)

at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81)

at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)

... 16 more Caused by: java.net.SocketException: 打开的文件过多

at java.net.Socket.createImpl(Socket.java:447)

at java.net.Socket.(Socket.java:421)

at java.net.Socket.(Socket.java:241)

at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)

at com.mysql.jdbc.MysqlIO.(MysqlIO.java:300)

... 34 more

====================================================================

看到这些报错信息,一直以为是代码里的hibernate建立连接后一直没有断开,直到连接空闲8小时后mysql给断开不让连接,后来一同事以前遇到过这样的问题,其实一直没有注意到下方的一个异常“more Caused by: java.net.SocketException: 打开的文件过多”,因为我的程序是部署在linux上,因为linux有一个ulimit最大打开文件个数,默认是1024(ulimit -a即可查看相关信息),后来查到是别人封装好的jar包里有一个InputStream只有新建打开没有关闭,一直在循环新建打开文件,直到打开超过1024报错,把inputstream加上关闭就OK啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: VB6.0连接MySQL数据库需要使用第三方库"ADO"(ActiveX Data Objects)。 首先,我们需要在VB6.0的开发环境中添加对ADO的引用。在VB6.0的工具栏中选择"项目",再选择"引用",在弹出的对话框中勾选"Microsoft ActiveX Data Objects x.x Library",然后点击确定。 接下来,我们需要在代码中使用ADO对象来连接MySQL数据库。首先,我们需要创建一个连接对象,并指定连接的数据库类型和连接字符串。连接字符串的格式如下: conn.ConnectionString = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=服务器地址;Database=数据库名;User=用户名;Password=密码;" 然后,我们使用连接对象打开数据库连接: conn.Open 接下来,我们就可以执行SQL语句来操作MySQL数据库了。比如,我们可以通过创建一个命令对象,然后指定要执行的SQL语句,最后执行该命令: Dim cmd As New ADODB.Command Dim rs As ADODB.Recordset cmd.ActiveConnection = conn cmd.CommandText = "SELECT * FROM 表名" Set rs = cmd.Execute 如果需要执行更新操作,可以使用cmd.Execute方法,如: cmd.CommandText = "UPDATE 表名 SET 字段名=值 WHERE条件" cmd.Execute 当完成所有的数据库操作后,我们需要关闭数据库连接: conn.Close 以上就是使用VB6.0连接MySQL数据库的基本步骤。需要注意的是,连接MySQL数据库时,需要确保正确填写数据库的相关信息,并且确保MySQL ODBC驱动已正确安装。 ### 回答2: VB6.0可以通过使用MySQL提供的ODBC驱动程序来连接MySQL数据库。下面是连接MySQL数据库的步骤: 1. 首先,你需要在计算机上安装MySQL ODBC驱动程序。你可以从MySQL官方网站下载并安装适合你操作系统的最新的ODBC驱动程序。 2. 打开VB6.0,创建一个新的VB项目。 3. 在VB6.0中,你需要添加对ADODB库的引用。在项目菜单上选择"引用",然后在弹出的对话框中找到并勾选"Microsoft ActiveX Data Objects Library",点击"确定"按钮。 4. 在VB6.0中,可以使用以下代码来连接MySQL数据库: ``` Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Set conn = New ADODB.Connection Set rs = New ADODB.Recordset conn.ConnectionString = "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=YourServerName;DATABASE=YourDatabaseName;UID=YourUsername;PWD=YourPassword;" conn.Open rs.Open "SELECT * FROM YourTableName", conn, adOpenStatic, adLockOptimistic ``` 在上述代码中,你需要根据你的MySQL服务器设置来修改“SERVER”、“DATABASE”、“UID”和“PWD”。 5. 使用完成后,不要忘记关闭连接和清理对象,以便释放资源: ``` rs.Close conn.Close Set rs = Nothing Set conn = Nothing ``` 这是一个简单的示例,连接MySQL数据库并执行了一个查询。你可以根据自己的需求进行更多的操作,如插入、更新和删除数据等。 请注意,VB6.0已经过时且不再得到官方支持,建议使用更新的开发工具和技术来连接数据库。 ### 回答3: VB6.0是一种开发环境,用于创建Windows应用程序。要连接MySQL数据库,需要使用第三方组件来实现。 首先,需要下载和安装一个名为"MySQL ODBC Connector"的组件。该组件允许VB6.0与MySQL数据库进行通信。 安装完成后,打开VB6.0环境,并创建一个新的项目。在项目中引用MySQL组件,这样就可以在代码中访问它们。 通过使用连接字符串,可以建立VB6.0与MySQL数据库的连接连接字符串包含了连接数据库所需的信息,如数据库地址、用户名、密码等。下面是一个示例: ``` Dim conn As ADODB.Connection Set conn = New ADODB.Connection conn.ConnectionString = "Driver={MySQL ODBC 5.1 Driver};Server=数据库地址;Database=数据库名;User=用户名;Password=密码;Option=3;" ' 打开数据库连接 conn.Open ``` 通过上述代码,VB6.0就可以成功连接MySQL数据库。现在可以执行SQL查询语句了,如SELECT、INSERT、UPDATE、DELETE等操作。 以下是一个执行SELECT语句并读取数据的示例: ``` Dim rs As ADODB.Recordset Set rs = New ADODB.Recordset ' 执行查询语句 rs.Open "SELECT * FROM 表名", conn ' 循环读取查询结果 Do While Not rs.EOF MsgBox rs.Fields("字段名").Value rs.MoveNext Loop ' 关闭记录集和连接 rs.Close conn.Close ``` 以上是连接MySQL数据库的基本步骤。当然,根据实际需求,可能还需要处理异常、进行事务管理等更复杂的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值