数据库连接断开后还有操作的异常

用的springmvc+c3p0连接池,服务器tomcat,内存不是很大。

在其中某个模块的一些功能访问时,间歇性的会出现以下这种错误,基本都是:数据库链接断开后还有动作执行。随后就是OOM,服务器崩溃。

ERROR - 2015-10-08 09:07:24.187; org.hibernate.transaction.JDBCTransaction; JDBC rollback failed com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

​Caused by: java.lang.OutOfMemoryError: Java heap space
ERROR - 2015-10-08 09:07:24.187; org.hibernate.transaction.JDBCTransaction; Could not toggle autocommit
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after connection closed.

下面是刚刚报错的异常栈

ERROR - 2015-10-08 14:11:43.203; org.springframework.transaction.interceptor.TransactionAspectSupport; Application exception overridden by rollback exception

org.hibernate.exception.JDBCConnectionException: could not load an entity: [net.shopxx.goodsmanagement.entity.GoodsShelve#12]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:99)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.loader.Loader.loadEntity(Loader.java:2041)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86)
at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76)
at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3294)
at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496)
at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477)
at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:147)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1090)
at org.hibernate.impl.SessionImpl.immediateLoad(SessionImpl.java:1026)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:176)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:190)
at net.shopxx.goodsmanagement.entity.GoodsShelve_$$_javassist_19.getShopManagerInfo(GoodsShelve_$$_javassist_19.java)
at net.shopxx.service.impl.OrderServiceImpl.build(OrderServiceImpl.java:562)
at net.shopxx.service.impl.OrderServiceImpl.create(OrderServiceImpl.java:825)
at net.shopxx.service.impl.OrderServiceImpl.updateOrder(OrderServiceImpl.java:2117)
at net.shopxx.service.impl.OrderServiceImpl$$FastClassByCGLIB$$42b70035.invoke()
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631)
at net.shopxx.service.impl.OrderServiceImpl$$EnhancerByCGLIB$$ed32199c.updateOrder()
at net.shopxx.zdlengineer.controller.ClientOrderController.updateOrder(ClientOrderController.java:342)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:936)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:838)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:812)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.planetj.servlet.filter.compression.CompressingFilter.doFilter(CompressingFilter.java:270)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at net.shopxx.filter.SiteStatusFilter.doFilterInternal(SiteStatusFilter.java:50)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 0 milliseconds ago. The last packet sent successfully to the server was 271,625 milliseconds ago.

... 77 more
Caused by: java.io.EOFException: Can not read response from server. Expected to read 5,349 bytes, read 1,362 bytes before connection was unexpectedly lost.
at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3119)
at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3626)
... 95 more

2个回答

看异常就是因为数据库连接关闭了,还进行数据库操作,所以才抛的异常,你先查查会有这种操作,如果是连接池每做一个数据库操作前会去连接池取一个连接,如果连接池初始化没有问题,就是没有空闲的连接了,

为什么会连接关闭了还在执行操作呢,能不能再操作之前先进行异常检测,如果能正确获取到连接的话再进行操作呢。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
vs2010 mfc ADO连接SQL server 程序不解
各位网友, 我在网站下载的一个MFC ADO方式连接SQL server数据库代码有个地方不明白,请帮忙看看 新建一个按钮,加入如下代码: void CADOTESTDlg::OnBnClickedButton2() { // TODO: 在此添加控件通知处理程序代码 1. ADOConn conn; 2. conn.OnInitADOConn(); 3. _bstr_t vSQL; 4. vSQL = "INSERT INTO [dbtest].[dbo].[userinfo] ([username],[userpwd]) VALUES('seamanj','123')"; 5. conn.ExecuteSQL(vSQL); 6. conn.ExitConnect(); 7. conn.m_pConnection; } MFC 中debug执行完第2行,m_pConnection中就有了地址,SQL server 中执行Select * from sys.dm_exec_connections可看到新的连接,但是执行完第6行应该m_pConnection中的地址被清空,并且断开连接的,可是实际情况是一直到执行完所有的代码并结束,m_pConnection才被清空并断开连接。 哪位能帮我解释下,谢谢。 ``` void ADOConn::ExitConnect() { // 关闭记录集和连接 if (m_pRecordset != NULL) m_pRecordset->Close(); m_pConnection->Close(); // 释放环境 ::CoUninitialize(); //CString temp=_T("0"); } ``` ``` void ADOConn::OnInitADOConn() { // 初始化OLE/COM库环境 //CoInitialize(NULL)和AfxOleInit()的区别: https://blog.csdn.net/zhoubl668/article/details/4139933 ::CoInitialize(NULL); try { // 创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); // 设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect = "Provider=SQLOLEDB; Server=127.0.0.1;Database=dbtest; uid=lnhv013710; pwd=013710;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } // 捕捉异常 catch(_com_error e) { // 显示错误信息 AfxMessageBox(e.Description()); } } ``` ``` #pragma once class ADOConn { // 定义变量 public: //添加一个指向Connection对象的指针: _ConnectionPtr m_pConnection; //添加一个指向Recordset对象的指针: _RecordsetPtr m_pRecordset; // 定义方法 public: ADOConn(); virtual ~ADOConn(); // 初始化—连接数据库 void OnInitADOConn(); // 执行查询 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); // 执行SQL语句,Insert Update _variant_t BOOL ExecuteSQL(_bstr_t bstrSQL); void ExitConnect(); }; ```
sae mysql hibernate 30秒断开连接的问题
问题是这样的,我的微信公众号后台放在sae上,使用的是proxool连接池,刚部署时,可以正常读取数据库,每当过几分钟后数据库连接就异常了。ps:本地测试正常 101.226.62.81 [29/May/2015:20:47:23 +0800] JAVA_Error: Couldn't perform the operation prepareStatement: You can't perform any operations on this connection. It has been automatically closed by Proxool for some reason (see logs). yq34.javaruntime sae提示我说是使用了关闭的连接,我在hibernate中每次操作后都session关闭了。 proxool配置如下 <house-keeping-sleep-time>28000</house-keeping-sleep-time> <maximum-new-connections>10</maximum-new-connections> <prototype-count>0</prototype-count> <maximum-connection-count>20</maximum-connection-count> <minimum-connection-count>0</minimum-connection-count> <test-before-use>true</test-before-use> <test-after-use>true</test-after-use> <house-keeping-test-sql>select id from test</house-keeping-test-sql> 因为sae中mysql在没有连接后的30秒自动断开数据库连接,所以我把检查时间设置为了28秒,但是还是出现了空连接,请教大神帮忙解决。
java中用一个Timer类去每个10毫秒访问一次数据库,会不会出现于数据库断开的异常
今天做的测试,为什么会出现这个异常呢? Exception in thread "Timer-0" org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: 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:335) 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.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202) at $Proxy6.getId(Unknown Source) at com.test.serviceImpl.UsersServiceImpl.getId(UsersServiceImpl.java:43) at com.test.test.dongtai.run(dongtai.java:34) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462) Caused by: org.hibernate.exception.GenericJDBCException: Cannot open connection at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) 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:1353) at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:555) ... 10 more Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (到主机 的 TCP/IP 连接失败。 java.net.SocketException: No buffer space available (maximum connections reached?): connect) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1225) at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880) at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) ... 15 more Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 到主机 的 TCP/IP 连接失败。 java.net.SocketException: No buffer space available (maximum connections reached?): connect at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerConnection.loginWithoutFailover(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(Unknown Source) at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(Unknown Source) at org.apache.commons.dbcp.DriverConnectionFactory.createConnection(DriverConnectionFactory.java:38) at org.apache.commons.dbcp.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:294) at org.apache.commons.dbcp.BasicDataSource.validateConnectionFactory(BasicDataSource.java:1247) at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1221) ... 18 more
如何解决c#操作Access数据库时出现的“无法更新,当前被锁定”问题
1.目前正在用c#写一个上位机软件,需要每隔10秒备份一次数据,将数据写入一个名为“SpeedDB.mdb”的Access数据中。上位机软件与下位机通过tcp连接,单独使用了一个线程来进行每隔10秒的数据备份,程序第一次启动时运行没问题,当tcp连接断开后终止此线程,重新连接后再实例化并启动此线程,此时便会出现这个异常,提示“无法更新,当前被锁定”。同时还会导致整个程序其它操作变卡。 2.代码如下: (1)每次tcp连接上时会实例化并启动数据备份的线程 ``` SpeedDBThread = new Thread(new ThreadStart(AddSpeedDB)) { IsBackground = true };//实例化转速备份线程 SpeedDBThread.Start(); //启动转速备份线程 ``` (2)数据备份的函数如下: ``` private void AddSpeedDB() { OleDbConnection ODbCon = new OleDbConnection("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = D:\\SpeedDB.mdb"); //用连接字符串初始化OleDbConnection的实例对象ODbCon while (true) { if(tcpClient != null && tcpClient.Connected == true) //仅在连接时备份 { try { ODbCon.Open(); //调用Open方法打开数据库连接 string TimeStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //获取此次转速备份的时间 //写入数据 for (UInt16 JDZ_NUM = 1; JDZ_NUM <= 12; JDZ_NUM++) { for (UInt16 ZJ_NUM = 1; ZJ_NUM <= 20; ZJ_NUM++) { for (UInt16 JQ_NUM = 1; JQ_NUM <= 20; JQ_NUM++) { OleDbCommand AddRecordCommand = new OleDbCommand() { Connection = ODbCon }; if (AllSpeed_NormalMsg[JDZ_NUM - 1, ZJ_NUM - 1].uFrame != 0) { AddRecordCommand.CommandText = string.Format(DataBase.SpeedInfo_InsertStr, TimeStr, (AllSpeed_NormalMsg[JDZ_NUM - 1, ZJ_NUM - 1].uGroup - 1) * 400 + (AllSpeed_NormalMsg[JDZ_NUM - 1, ZJ_NUM - 1].uFrame - 1) * 20 + JQ_NUM, AllSpeed_NormalMsg[JDZ_NUM - 1, ZJ_NUM - 1].Info[JQ_NUM - 1].uSpeed); AddRecordCommand.ExecuteNonQuery(); } else { AddRecordCommand.CommandText = string.Format(DataBase.SpeedInfo_InsertStr, TimeStr, (JDZ_NUM - 1) * 400 + (ZJ_NUM - 1) * 20 + JQ_NUM, 9.99); AddRecordCommand.ExecuteNonQuery(); } } } } Thread.Sleep(1000); ODbCon.Close(); //关闭数据库连接 Thread.Sleep(9000); } catch (Exception ex) { //异常提示 Current_Inform.Items.Insert(0, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "转速备份异常:" + ex.Message); SpeedDBThread.Start(); } } else { ODbCon.Close(); SpeedDBThread.Abort(); //无连接时终止线程 Thread.Sleep(1); } } } ``` 3.可以看到代码里面都确定每次打开数据库连接最后都用ODbCon.Close();关闭了,但还是会有这个问题,我尝试过在捕获的异常处理中重启这个线程,代码如下: ``` catch (Exception ex) { //异常提示 Current_Inform.Items.Insert(0, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "转速备份异常:" + ex.Message); ODbCon.Close(); //关闭数据库连接 GC.Collect(); Thread.Sleep(1); SpeedDBThread.Abort(); //先终止此线程 Thread.Sleep(3000); //重启线程 SpeedDBThread = new Thread(new ThreadStart(AddSpeedDB)) //实例化转速备份线程 { IsBackground = true //设置为后台线程 }; SpeedDBThread.Start(); } ``` 还是会出现问题,并且会有新的异常提示“正在终止线程”。 目前很急,希望各位大佬看看能不能解决这个问题,拜托了!
MFC ADOC访问数据库用公共类报空指针异常,而不用公共类正常
先建立了个公共类用于数据库连接查询如下 ADOConn头文件 #pragma once //导入AOC动态链接库 #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\ rename("EOF","adoEOF")rename("BOF","adoBOF") class ADOConn { public: ADOConn(void); virtual~ADOConn(void); _ConnectionPtr m_pConnection; //链接对象指针 _RecordsetPtr m_pRecordset; //记录集对象指针 _CommandPtr m_pCommand; //记录 void OnInitADOConn(void); //连接数据库 void Exitconnect(void); //关闭记录集并断开数据库连接 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL); //执行SQL查询并返回记录集指针 BOOL ExecuteSQL(_bstr_t bstrSQL); //执行SQL语句 }; ADOConn源文件 #include "StdAfx.h" #include "ADOConn.h" #include "SM2.h" #include <comdef.h> ADOConn::ADOConn(void) { } ADOConn::~ADOConn(void) { } void ADOConn::OnInitADOConn(void) { try { m_pConnection.CreateInstance("ADODB.Connection"); //创建连接对象 // _bstr_t strConnect="Provider=MSDASQL;DSN=Supermarket;UID=sa;PWD=123456;"; _bstr_t strConnect ="Provider = SQLOLEDB; Data Source =localhost; Initial Catlog =Supermarket;\ User ID =sa; Password =123456;"; m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库 AfxMessageBox(_T("连接成功")); } catch(_com_error e) { AfxMessageBox(e.Description()); //错误消息 } } _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { //TODO: insert return statement here try { if(m_pConnection == NULL) //判断数据库是否连接,如果不连接 OnInitADOConn(); m_pRecordset.CreateInstance(__uuidof(Recordset)); //创建记录集对象实例 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText); //执行SQL到记录集 } catch(_com_error e) { e.Description(); } return m_pRecordset;//返回记录集指针 } BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) { try { if(m_pConnection == NULL) //判断数据库是否连接,如果不连接 OnInitADOConn(); m_pConnection->Execute(bstrSQL, NULL, adCmdText); //执行SQL语句 return true; //返回真 } catch( _com_error e) { e.Description(); return false; //返回假 } } void ADOConn::Exitconnect(void) { if(m_pRecordset != NULL) //判断记录集是否打开 m_pRecordset->Close(); //断开记录集 m_pConnection->Close(); //断开数据库 } 然后在查询的时候就会报空指针异常是什么情况 ADOConn m_AdoConnSP; //ADOConn对象 m_AdoConnSP.OnInitADOConn(); //连接数据库 CString sqlSP = _T("select * from Supermarket.dbo.tb_SP"); int i = 0; m_AdoConnSP.m_pRecordset = m_AdoConnSP.GetRecordSet((_bstr_t) sqlSP); //执行SQL语句 while( !m_AdoConnSP.m_pRecordset->adoBOF) { m_Grid.InsertItem(i,_T("")); //向列表中添加行 m_Grid.SetItemText(i, 0, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("SPID")); m_Grid.SetItemText(i, 1, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("SPName")); m_Grid.SetItemText(i, 2, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("SPClass")); m_Grid.SetItemText(i, 3, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("SPUnit")); m_Grid.SetItemText(i, 4, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("SPBarCode")); m_Grid.SetItemText(i, 5, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("PrimeCost")); m_Grid.SetItemText(i, 6, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("SellPrice")); m_Grid.SetItemText(i, 7, (LPCTSTR)(_bstr_t)m_AdoConnSP.m_pRecordset->GetCollect("SPProfit")); m_AdoConnSP.m_pRecordset->MoveNext(); i++; } m_AdoConnSP.Exitconnect(); 然而如果不用公共类的方法就不会报错 try { m_pConnection.CreateInstance("ADODB.Connection"); //创建连接对象 _bstr_t strConnect ="Provider = SQLOLEDB; Data Source =localhost; Initial Catlog =Supermarket;\ User ID =sa; Password =123456;"; m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库 AfxMessageBox(_T("连接成功")); } catch(_com_error e) { AfxMessageBox(e.Description()); //错误消息 } //建立查询 CString sql = _T("select * from Supermarket.dbo.tb_SP"); m_pRecordset.CreateInstance(_uuidof(Recordset)); m_pRecordset->Open((_bstr_t)sql,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockOptimistic,adCmdText); //添加到列表框 int i = 0; while( !m_pRecordset->adoEOF) { m_ListSP.InsertItem(0,_T("")); m_ListSP.SetItemText(i, 0, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SPID")); m_ListSP.SetItemText(i, 1, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SPName")); m_ListSP.SetItemText(i, 2, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SPClass")); m_ListSP.SetItemText(i, 3, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SPUnit")); m_ListSP.SetItemText(i, 4, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SPBarCode")); m_ListSP.SetItemText(i, 5, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("PrimeCost")); m_ListSP.SetItemText(i, 6, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SellPrice")); m_ListSP.SetItemText(i, 7, (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("SPProfit")); m_pRecordset->MoveNext(); } m_pRecordset->Close();
使用jdbc创建的connection时间久了会自动断开连接吗?
打算用java写一个建议的数据库连接池,其实就是将各数据库的connection存到数据组,要查询或更新时直接从数组中取出,这样就不用每次都创建连接了。但是我有一个疑问,就是connection创建好了之后可能很久之后才会用到,这个时候用这个连接去查询或更新会抛出异常吗?会的话抛出什么异常呢?顺便说一句,客户端到各数据库服务器端口都是短连接。
使用连接池时无法初始化,也不报错不知到哪出了问题
package com.server; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource; /** * 该类用于管理数据库连接 * @author adminitartor * */ public class DBUtil { //数据库连接池 private static BasicDataSource ds; static{ //初始化静态属性 //1加载配置文件 /* * java.util.Properties * 用来读取.properties文件,并解析其中 * 每一行内容,然后以key-value的形式保存 * 在当前实例中。 */ Properties prop = new Properties(); try { prop.load(new FileInputStream("config.properties")); String className = prop.getProperty("classname"); String url = prop.getProperty("url"); String username = prop.getProperty("username"); String password = prop.getProperty("password"); int maxActive = Integer.parseInt(prop.getProperty("maxactive")); int maxWait = Integer.parseInt(prop.getProperty("maxwait")); //初始化连接池 ds=new BasicDataSource(); //将JDBC建立连接所需要的信息设置到连接池中 //Class.forName(...) ds.setDriverClassName(className); //DriverManager.getConnection(...) ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); //设置连接池最大连接数 ds.setMaxActive(maxActive); //设置最大等待时间 ds.setMaxWait(maxWait); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally { System.out.println(123); } //2根据配置文件初始化 } /** * 获取数据库连接 * @return */ public static Connection getConnection() throws Exception{ /* * 连接池提供的方法: * Connection getConnection() * 该方法可以返回一个连接池中可用连接。 * 这是一个阻塞方法,当连接池中有空闲连接 * 可以使用时会立刻返回,若当前连接池没有 * 可用连接时,会进入阻塞,阻塞时间由创建 * 连接池时通过setMaxWait设置的时间为准 * 在等待期间若有空闲连接着立即返回,当 * 超过最大等待时间仍没有可用连接时,该方 * 法会抛出超时异常。 */ return ds.getConnection(); } /** * 关闭给定的连接 * @param conn */ public static void closeConnection(Connection conn){ try { conn.setAutoCommit(true); /* * 若该连接是通过连接池获取的,那么调用 * 这个连接的close方法并不是与数据库断开 * 连接了,而仅仅是将该连接还给连接池。 */ conn.close(); } catch (Exception e) { e.printStackTrace(); } } }
mysql wait_timeout太小和比较大都会导致连接异常,只不过还是有区别的,网上粘贴大军就不要答了
在使用c3p0连接池(在不配置maxIdleTime情况下,就使用默认值0,也就是一直保持着连接)连接远程服务器。 第一种情况: 3到5分钟没有操作后,再次操作,后台报错: The last packet successfully received from the server was 576,776 milliseconds ago 这样的错误,百度的帖子都说是修改wait_timeout但是没软用啊,因为我查了我的timeout时间是8小时,3到5分钟完全没有达到八小时啊!! 第二种情况: 后来尝试把wait_timeout调小:SET GLOBAL wait_timeout=10;调成连接超时为10s,测试结果也是当每隔时间段超过10s确实也报相同的错误。 但是反馈很快,不像第一种情况都会卡很久再报错,后来对比两种错误的reason by,还是有所不同的,这种和网络上人们解释的倒也想通,但是谁家的项目也不可能把timeout设置为10s啊!! 大神们,我想问问第一种情况到底是为什么,因为用mysql客户端连接3到5分钟不操作也会出现相同的断开问题。为什么连接远程数据库就会出现这种情况,而本地数据库就不会出现呢?
vs2012通过occi连接oracle出错,是连接语句出错吗
#include <iostream> #define WIN32COMMON //避免函数重定义错误 #include <occi.h> using namespace std; using namespace oracle::occi; int main() { Environment *env; Connection *conn; Statement *stmt; ResultSet *rs; string username = "collect"; string password = "1234"; string connstring = "192.168.11.40:1521/orcl"; string sql,strname; string isno; env = Environment::createEnvironment(); //创建一个环境变量 conn = env->createConnection(username,password,connstring); //创建一个数据库连接对象 sql = "SELECT host_name FROM m_host "; //拼接一个SQL语句 stmt = conn->createStatement(sql); //创建一个Statement对象 stmt ->executeUpdate(); try { rs = stmt->executeQuery();//执行SQL语句 while (rs->next()) { //用循环,一条一条地取得查询的结果记录 isno = rs->getString(1);//取出第一列的值(对应为int型) cout << isno ; } cout << "SELECT ―― SUCCESS" << endl; } catch (SQLException ex) { cout << " Error Number : "<< ex.getErrorCode() << endl; //取出异常代码 cout << ex.getMessage() << endl; //取出异常信息 } conn->terminateStatement(stmt); //终止Statement对象 env->terminateConnection(conn); //断开数据库连接 Environment::terminateEnvironment(env); //终止环境变量 return 0; } 已经加载了头文件库文件还有lib文件,运行会有这个错误,是连接的语句出错了吗,![图片说明](https://img-ask.csdn.net/upload/201606/08/1465348771_880678.png)
请问 c++builder2010 在事件中如何调用const参数,编译出错了
刚学习 c++builder 2010,在ADOconnect组件的 onExecuteComplete事件中,检测数据库是否断开,然后再触发定时器 重连。但在 onExecuteComplete中 获取 错误码时 编译出错了,不知道要怎么调用这个 错误码 才正常,求大神们 帮帮忙! (c++builder 2010) void __fastcall TForm1::ADOConnectionSQLExecuteComplete(TADOConnection *Connection, int RecordsAffected, const Error *Error, TEventStatus &EventStatus, const _Command *Command, const _Recordset *Recordset) { if(EventStatus == esErrorsOccured) //=esErrorsOccured 执行异常 { Error->Get_Number((int&)SQLErrCode); //这里编译出错了 Form2->Label5->Caption = Command->CommandText;//获取 当前的sql语句 这里编译也 出错了 if(SQLErrCode == ConnectFail)// ConnectFail = -2147217900 数据库断开连接错误码 { if(SQLErrCode == 1) //启动定时器 尝试重新连接数据库 { DatabaseERR = 0; //0 表示数据库连接失败 Form2->warn->Caption=L"数据库连接失败..."; Form2->warn->Visible=true; TestConnect->Enabled=True; TestConnect->OnTimer; } } } } 编译报错: [BCC32 Error] Unit1.cpp(1042): E2522 Non-const function __stdcall Adoint::Error::Get_Number(int &) called for const object Unit1.cpp(1007): parsing: void _fastcall TForm1::ADOConnectionSQLExecuteComplete(TADOConnection *,int,const Adoint::Error *,TEventStatus &,const _Command *,const _Recordset *)
请问 c++builder2010 在事件中如何调用const参数
**我想在 ADOconnect组件的 onExecuteComplete事件中,检测数据库是否断开,然后再触发定时器 重连。但在 onExecuteComplete中 获取 错误码时 编译出错了,不知道要怎么调用这个 错误码 才正常,求大神们 帮帮忙! (c++builder 2010)** ``` void __fastcall TForm1::ADOConnectionSQLExecuteComplete(TADOConnection *Connection, int RecordsAffected, const Error *Error, TEventStatus &EventStatus, const _Command *Command, const _Recordset *Recordset) { if(EventStatus == esErrorsOccured) //=esErrorsOccured 执行异常 { Error->Get_Number((int&)SQLErrCode); //这里编译出错了 Form2->Label5->Caption = Command->CommandText;//获取 当前的sql语句 这里编译也 出错了 if(SQLErrCode == ConnectFail)// ConnectFail = -2147217900 数据库断开连接错误码 { if(SQLErrCode == 1) //启动定时器 尝试重新连接数据库 { DatabaseERR = 0; //0 表示数据库连接失败 Form2->warn->Caption=L"数据库连接失败..."; Form2->warn->Visible=true; TestConnect->Enabled=True; TestConnect->OnTimer; } } } } ``` 编译报错: ``` [BCC32 Error] Unit1.cpp(1042): E2522 Non-const function __stdcall Adoint::Error::Get_Number(int &) called for const object Unit1.cpp(1007): parsing: void _fastcall TForm1::ADOConnectionSQLExecuteComplete(TADOConnection *,int,const Adoint::Error *,TEventStatus &,const _Command *,const _Recordset *) ```
c3p0死锁的问题求高手解决
由于使用的是hibernate的事务所以每执行一次sql语句就会提交,并发量较大,在执行插入的时候,会出现连接池死锁的情况 Feb 6, 2015 4:06:57 PM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run 网上的很多配置都改了将 <property name="maxStatements" value="0"/>设为0,<property name="preferredTestQuery"> <value>SELECT 1</value> </property>, <property name="checkoutTimeout" value="100"/>这些都配了还是不行 求大虾指教,新手实在没分T-T sql语句的提交是 public void doTransSqlByJDBC(String jdbcName,final String sql,final List<String> params) { this.getRealTemplate(jdbcName).execute(new HibernateCallback() { public Object doInHibernate(Session session)throws HibernateException, SQLException { Transaction tx=session.getTransaction(); tx.begin(); SQLQuery sq = createSQLQuery(session, sql, params); sq.executeUpdate(); tx.commit(); session.close(); return null; } }); } 是用的hibernate的事时没用spring,但是插入的数据量比较大,是不停的向数据库里插入数据 不知道为什么会死锁,理论上用过的之后的Connection在close之后会放回连接池中,而且我插入sql语句时又是单线程的,不知道为什么会死锁 c3p0的配置是 <property name="driverClass" value="${jdbc.AppTencentCollection_BC_driverClassName}" /> <property name="jdbcUrl" value="${jdbc.AppTencentCollection_BC_url}" /> <property name="user" value="${jdbc.AppTencentCollection_BC_username}" /> <property name="password" value="${jdbc.AppTencentCollection_BC_password}" /> <!--连接池中保留的最小连接数。--> <property name="minPoolSize" value="5"/> <!--连接池中保留的最大连接数。Default: 15 --> <property name="maxPoolSize" value="500"/> <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 --> <property name="initialPoolSize" value="10"/> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime" value="60"/> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> <property name="acquireIncrement" value="5"/> <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0--> <property name="maxStatements" value="0"/> <property name="maxStatementsPerConnection" value="0"/> <!--连接池用完时客户调用getConnection()后等待获取连接的时间,单位:毫秒。超时后会抛出--> <!--SQLEXCEPTION,如果设置0,则无限等待。Default:0--> <property name="checkoutTimeout" value="90000"/> <!--每60秒检查所有连接池中的空闲连接。Default: 0 --> <property name="idleConnectionTestPeriod" value="60"/> <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> <property name="acquireRetryAttempts" value="30"/> <!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试 获取连接失败后该数据源将申明已断开并永久关闭。Default: false--> <property name="breakAfterAcquireFailure" value="false"/> <!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable 等方法来提升连接测试的性能。Default: false --> <property name="testConnectionOnCheckout" value="false"/> <property name="preferredTestQuery"> <value>SELECT 1</value> </property>
SSM框架Tomcat跑一段时间后抛异常
用的是Spring + SpringMVC+ Mybatis 项目部署后跑一段时间后会跑异常 但是可以正常访问 下面是抛出的异常: 2017-08-10 03:20:46 [Prototyper] ERROR org.logicalcobwebs.proxool.lvseu - Prototype com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 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:406) at com.mysql.jdbc.Util.getInstance(Util.java:381) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2270) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:723) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) at sun.reflect.GeneratedConstructorAccessor57.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:406) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at java.sql.DriverManager.getConnection(DriverManager.java:571) at java.sql.DriverManager.getConnection(DriverManager.java:187) at org.logicalcobwebs.proxool.DefaultConnectionBuilder.buildConnection(DefaultConnectionBuilder.java:39) at org.logicalcobwebs.proxool.Prototyper.buildConnection(Prototyper.java:159) at org.logicalcobwebs.proxool.Prototyper.sweep(Prototyper.java:102) at org.logicalcobwebs.proxool.PrototyperThread.run(PrototyperThread.java:44) Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 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:406) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:335) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2194) ... 14 more Caused by: java.net.ConnectException: Connection timed out: connect at java.net.DualStackPlainSocketImpl.connect0(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:579) at java.net.Socket.connect(Socket.java:528) at java.net.Socket.<init>(Socket.java:425) at java.net.Socket.<init>(Socket.java:241) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253) at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:284) ... 15 more 我的配置文件 proxool.prototypeCount=5 proxool.maximumActiveTime=300000 proxool.maximumConnectionLifetime=18000000 proxool.minimumConnectionCount=5 proxool.maximumConnectionCount=40 proxool.alias=lvseu proxool.simultaneous-build-throttle=20 proxool.prototype-count=2 proxool.houseKeepingTestSql=select CURRENT_DATE proxool.hourseKeepingSleepTime=30000 <property name="driver" value="${connection.driver_class}" /> <property name="driverUrl" value="${connection.url}" /> <property name="user" value="${connection.username}" /> <property name="password" value="${connection.password}" /> <!-- 测试的SQL执行语句 --> <property name="houseKeepingTestSql" value="${proxool.houseKeepingTestSql}"/> <!-- 最少保持的空闲连接数 (默认2个) --> <property name="prototypeCount" value="${proxool.prototypeCount}" /> <!-- 最大活动时间(超过此时间线程将被kill,默认为5分钟) --> <property name="maximumActiveTime" value="${proxool.maximumActiveTime}" /> <!-- 最小连接数 (默认2个) --> <property name="minimumConnectionCount" value="${proxool.minimumConnectionCount}" /> <!-- 最大连接数 (默认10个) --> <property name="maximumConnectionCount" value="${proxool.maximumConnectionCount}" /> <!-- 连接最长时间(默认为4个小时) --> <property name="maximumConnectionLifetime" value="${proxool.maximumConnectionLifetime}" /> <!-- 数据库别名 --> <property name="alias" value="${proxool.alias}" /> <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒) --> <property name="houseKeepingSleepTime" value="${proxool.hourseKeepingSleepTime}" /> 求大神给看一下 自己找了很久 曾百度说是数据库8个小时断开连接 按这个结果也试了 还是报
WEBLOGIC的BUG??? 关闭的连接
各位达人,最近在生产环境上碰到一个很奇异的问题: 生产环境: weblogic815集群, oracle9i集群... 操作: 更改数据库的密码, 更改weblogic连接池的密码, 重新启动weblogic(受管和管理服务器), 未重启oracle(不能重启) 现象: 有一些操作正常, 但是有一些操作报错,错误信息如下 [code="java"] java.sql.SQLException: 关闭的连接 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :125) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :162) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :227) at oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnectio n.java:930) at weblogic.jdbc.wrapper.PoolConnection.setAutoCommit(PoolConnection.jav a:141) at net.sf.hibernate.transaction.JDBCTransaction.toggleAutoCommit(JDBCTra nsaction.java:104) at net.sf.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction .java:95) at common.blh.XcBLH.execute(XcBLH.java:99) at common.bizDelegate.FakeDelegate.invokeTask(FakeDelegate.java:58) at common.bizDelegate.FakeDelegate.delegate(FakeDelegate.java:24) at gov.gwssi.xcweb.common.XCAction.execute(XCAction.java:93) at org.apache.struts.action.RequestProcessor.processActionPerform(Reques tProcessor.java:484) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja va:274) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:148 2) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run (ServletStubImpl.java:1072) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm pl.java:465) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.DoTimeoutFilter.doFilter(DoTimeoutFilt er.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.SetCharacterEncodingFilter.doFilter(Se tCharacterEncodingFilter.java:59) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio n.run(WebAppServletContext.java:6987) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate dSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java: 121) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe rvletContext.java:3892) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm pl.java:2766) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) common.exception.XcBlException: at gov.gwssi.xccore.blh.business.zhcx.PretreatYcfpZhcxBlh.performTask(Pr etreatYcfpZhcxBlh.java:76) at common.blh.XcBLH.execute(XcBLH.java:61) at common.bizDelegate.FakeDelegate.invokeTask(FakeDelegate.java:58) at common.bizDelegate.FakeDelegate.delegate(FakeDelegate.java:24) at gov.gwssi.xcweb.common.XCAction.execute(XCAction.java:93) at org.apache.struts.action.RequestProcessor.processActionPerform(Reques tProcessor.java:484) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja va:274) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:148 2) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run (ServletStubImpl.java:1072) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm pl.java:465) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.DoTimeoutFilter.doFilter(DoTimeoutFilt er.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.SetCharacterEncodingFilter.doFilter(Se tCharacterEncodingFilter.java:59) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio n.run(WebAppServletContext.java:6987) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate dSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java: 121) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe rvletContext.java:3892) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm pl.java:2766) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) 当前jsp的URI:/dkpz/default/syserror.jsp <2008-11-12 上午10时00分01秒 CST> <Error> <JDBC> <BEA-001112> <Test "SELECT 1 FR OM DUAL" set up for pool "DkpzPool1" failed with exception: "java.sql.SQLExcepti on: 必须登录到服务器".> [/code] 敬请达人们指点 [b]问题补充:[/b] 各位达人,最近在生产环境上碰到一个很奇异的问题: 生产环境: weblogic815集群, oracle9i集群... 操作: 更改数据库的密码, 更改weblogic连接池的密码, 重新启动weblogic(受管和管理服务器), 未重启oracle(不能重启) 现象: 有一些操作正常, 但是有一些操作报错,错误信息如下 [code="java"] ERROR [ExecuteThread: '11' for queue: 'weblogic.kernel.Default'] (JDBCTransactio n.java:90) - Rollback failed java.sql.SQLException: 关闭的连接 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :125) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :162) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :227) at oracle.jdbc.driver.PhysicalConnection.rollback(PhysicalConnection.jav a:1031) at weblogic.jdbc.wrapper.PoolConnection_oracle_jdbc_driver_T4CConnection .rollback(Unknown Source) at net.sf.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction .java:86) at common.blh.XcBLH.execute(XcBLH.java:99) at common.bizDelegate.FakeDelegate.invokeTask(FakeDelegate.java:58) at common.bizDelegate.FakeDelegate.delegate(FakeDelegate.java:24) at gov.gwssi.xcweb.common.XCAction.execute(XCAction.java:93) at org.apache.struts.action.RequestProcessor.processActionPerform(Reques tProcessor.java:484) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja va:274) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:148 2) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run (ServletStubImpl.java:1072) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm pl.java:465) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.DoTimeoutFilter.doFilter(DoTimeoutFilt er.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.SetCharacterEncodingFilter.doFilter(Se tCharacterEncodingFilter.java:59) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio n.run(WebAppServletContext.java:6987) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate dSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java: 121) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe rvletContext.java:3892) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm pl.java:2766) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) ERROR [ExecuteThread: '11' for queue: 'weblogic.kernel.Default'] (JDBCTransactio n.java:108) - Could not toggle autocommit java.sql.SQLException: 关闭的连接 at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :125) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :162) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java :227) at oracle.jdbc.driver.PhysicalConnection.setAutoCommit(PhysicalConnectio n.java:930) at weblogic.jdbc.wrapper.PoolConnection.setAutoCommit(PoolConnection.jav a:141) at net.sf.hibernate.transaction.JDBCTransaction.toggleAutoCommit(JDBCTra nsaction.java:104) at net.sf.hibernate.transaction.JDBCTransaction.rollback(JDBCTransaction .java:95) at common.blh.XcBLH.execute(XcBLH.java:99) at common.bizDelegate.FakeDelegate.invokeTask(FakeDelegate.java:58) at common.bizDelegate.FakeDelegate.delegate(FakeDelegate.java:24) at gov.gwssi.xcweb.common.XCAction.execute(XCAction.java:93) at org.apache.struts.action.RequestProcessor.processActionPerform(Reques tProcessor.java:484) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja va:274) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:148 2) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run (ServletStubImpl.java:1072) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm pl.java:465) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.DoTimeoutFilter.doFilter(DoTimeoutFilt er.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.SetCharacterEncodingFilter.doFilter(Se tCharacterEncodingFilter.java:59) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio n.run(WebAppServletContext.java:6987) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate dSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java: 121) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe rvletContext.java:3892) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm pl.java:2766) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) common.exception.XcBlException: at gov.gwssi.xccore.blh.business.zhcx.PretreatYcfpZhcxBlh.performTask(Pr etreatYcfpZhcxBlh.java:76) at common.blh.XcBLH.execute(XcBLH.java:61) at common.bizDelegate.FakeDelegate.invokeTask(FakeDelegate.java:58) at common.bizDelegate.FakeDelegate.delegate(FakeDelegate.java:24) at gov.gwssi.xcweb.common.XCAction.execute(XCAction.java:93) at org.apache.struts.action.RequestProcessor.processActionPerform(Reques tProcessor.java:484) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja va:274) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:148 2) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507) at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run (ServletStubImpl.java:1072) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubIm pl.java:465) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.DoTimeoutFilter.doFilter(DoTimeoutFilt er.java:27) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at gov.gwssi.xcweb.common.filters.SetCharacterEncodingFilter.doFilter(Se tCharacterEncodingFilter.java:59) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.ja va:27) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationActio n.run(WebAppServletContext.java:6987) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Authenticate dSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java: 121) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppSe rvletContext.java:3892) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestIm pl.java:2766) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:224) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:183) 当前jsp的URI:/dkpz/default/syserror.jsp <2008-11-12 上午10时00分01秒 CST> <Error> <JDBC> <BEA-001112> <Test "SELECT 1 FR OM DUAL" set up for pool "DkpzPool1" failed with exception: "java.sql.SQLExcepti on: 必须登录到服务器".> [/code] 敬请达人们指点 [b]问题补充:[/b] 之前只设置了Test Reserved Connections 但是刚刚把 Test Reserved Connections Test Created Connections Test Released Connections 都设置上了也不行 [b]问题补充:[/b] oracle没有超过连接数,任何时候都只有 特定的 业务模块才会出现这种现象,其它的模块没有 而有问题的业务的实现方式与正常的实现方式是一样的 [b]问题补充:[/b] Web用的是Struts1.2, 持久层用的是Hibernate,封装的Session. 具体的流程是 BaseAction是一个基于Struts的模板模式,里面通过代理来调用业务逻辑方法 在代理中,首先获取一个hibernate的session,hibernate引用的是WEBLOGIC配置的数据源,用之前创建,用完后关闭(只关闭session,没有关闭对应的连接) 也就是说,在进行业务操作之前,都会新创建一个会话 另外,出现问题的业务模板与正常的业务模块都是基于这种框架 public abstract class BaseAction{ final ... execute(...){ ... prepareRequest();////这是个抽象方法,处理请求的数据 .....////这儿通过代理调用业务方法,即BaseBlh.performTask() processResponse(...);/////抽象方法,处理业务生成的数据 abstract DTO prepareRequest(...); abstract ActionForward processResponse(...); } public abstract class BaseBlh(){ abstract DTO performTask(Session session); } public BlhProxy{ public DTO performTask(...){ Session session = ////通过hibernate获取,用的是Weblogic配置的数据源 BaseBlh blh = ...../////2.通过反射,获取当前具体的业务类 DTO dto = blh.performTask(session); session.close(); return dto; ////这里面省略了事务等等的操作 } } 不知道我描述清楚了没有 再次谢谢 [b]问题补充:[/b] 另外,就是在进行数据库密码修改之前,一切正常 [b]问题补充:[/b] to: bohemia 非常感谢你的关注, 今天去了一趟生产环境的现场, 通过日志(之前的异常信息是技术支持传过来的)发现, 在业务操作过程中, 有一个过程出现问题 抛出了 ora-00600 internal error code [...] [][][][] 异常 导致程序没能正常执行 但是存储过程编译没有出现任何问题,经过排查,发现,在存储过程中有一个游标 select column1, column2...., functionName(...) columnN from tableName; 无法执行,将其单独执行抛出ora-00600异常 后来将functionName(...) columnN这一列去掉后,查询正常. 此时, 发现, 通过plsql直接打开(利用右键)时,居然提示该函数不存在!!! 但是该函数的确存在,并且编译存储过程也没有任何问题. 通过其它方式打开该函数,尝试重新编译, 重新查询, 问题解决. 问题虽然解决,但是还是有几个疑问: 1. 为什么函数functionName(...)为出现这个问题 2. 为什么在oracle出现异常后连接会关闭 [b]问题补充:[/b] ora-00600是一个oracle内容错误,出现错误的原因在oracle日志里面给的不是很详细,现在虽然找着了解决问题的办法. 另外,在业务操作的过程中,每一次操作之前获取一个连接,这个连接是有效的,但是在oracle抛出了那个ora-00600异常之后,这个连接居然"自动"断开了,很是费解, 因为业务操作过程是这样子的 1. 打开连接,开启事务 2.1 业务操作a 需要访问数据库 2.2 业务操作b 需要访问数据库 3. 提交(回滚)事务,关闭连接 在整个流程中,只有步骤3才会关闭连接,而在2.1操作抛出ora-00600错误后,再进行2.2操作时,就发现连接已经断开了
Spring mvc 空指针错误
LoginController ``` @Controller public class LoginController { @RequestMapping("test") public void login() { LoginServiceImp loginService = new LoginServiceImp(); loginService.loadUserInfo(); } } ``` LoginServiceImp ``` public class LoginServiceImp implements ILoginService { LoginDaoImp loginDao = new LoginDaoImp(); /* * (non-Javadoc) * * @see * com.sani.service.ILoginService#loadUserInfo(com.sani.bean.UserInfoBean) */ public List loadUserInfo() { return loginDao.loadUserInfo(); } } ``` LoginDaoImp ``` public class LoginDaoImp extends BaseDao implements ILoginDao { /* * (non-Javadoc) * * @see com.sani.dao.ILoginDao#loadUserInfo() */ public List<UserInfoBean> loadUserInfo() { String sql = "select NOW();"; List tmpList = this.getJdbcTemplate().queryForList(sql); System.out.println(tmpList.size()); return tmpList; } } ``` BaseDao ``` public class BaseDao extends JdbcDaoSupport { Logger log = Logger.getLogger(this.getClass().getName()); } ``` web.xml ``` <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <!-- 字符编码过滤器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>classpath:log4j.properties</param-value> </context-param> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- 应用上下文配置文件 --> <!-- Spring 容器加载 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-db.xml</param-value> </context-param> <!-- 配置spring核心servlet --> <servlet> <servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- url-pattern配置为/,不带文件后缀,会造成其它静态文件(js,css等)不能访问。如配为*.do,则不影响静态文件的访问 --> <servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <session-config> <session-timeout>30</session-timeout> </session-config> <!-- 欢迎页面 --> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> ``` spring-servlet.xml ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- 启动注解驱动的Spring MVC功能,注册请求url和注解POJO类方法的映射--> <mvc:annotation-driven /> <!-- 允许对静态资源文件的访问 --> <mvc:default-servlet-handler /> <!-- 启动包扫描功能,以便注册带有@Controller、@Service、@repository、@Component等注解的类成为spring的bean --> <context:component-scan base-package="com.sani.controller" /> <context:component-scan base-package="com.sani.service" /> <context:component-scan base-package="com.sani.dao" /> <!-- 对模型视图名称的解析,在请求时模型视图名称添加前后缀 --> <!-- jsp视图解析器 --> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="order" value="1" /> </bean> </beans> ``` spring-db.xml ``` <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:jaxws="http://cxf.apache.org/jaxws" xmlns:task="http://www.springframework.org/schema/task" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" default-autowire="byName"> <!-- <context:property-placeholder location="classpath:jdbc.properties" /> --> <!-- 配置数据源 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close" lazy-init="false"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/wms" /> <property name="user" value="root" /> <property name="password" value="123" /> <!--连接池中保留的最小连接数。 --> <property name="minPoolSize"> <value>5</value> </property> <!--连接池中保留的最大连接数。Default: 15 --> <property name="maxPoolSize"> <value>30</value> </property> <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 --> <property name="initialPoolSize"> <value>10</value> </property> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime"> <value>60</value> </property> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> <property name="acquireIncrement"> <value>5</value> </property> <!-- JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements 属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。 如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 --> <property name="maxStatements"> <value>0</value> </property> <!--每60秒检查所有连接池中的空闲连接。Default: 0 --> <property name="idleConnectionTestPeriod"> <value>60</value> </property> <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 --> <property name="acquireRetryAttempts"> <value>30</value> </property> <!-- 获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效 保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试 获取连接失败后该数据源将申明已断开并永久关闭。Default: false --> <property name="breakAfterAcquireFailure"> <value>true</value> </property> <!-- 因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的 时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable 等方法来提升连接测试的性能。Default: false --> <property name="testConnectionOnCheckout"> <value>false</value> </property> </bean> <!-- 配置Jdbc模板 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate" lazy-init="false"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="baseDAO" class="com.sani.dao.imp.BaseDao" lazy-init="false"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> </beans> ``` 现在只要调用action—test就会空指针 是什么原因?应该这么改?
综合人事管理系统登录模块出现debug error
一个星期都没有解决,我都哭了,一个小项目就止步这了,请各位大神帮帮我吧..... ![图片说明](https://img-ask.csdn.net/upload/201610/08/1475891359_978636.png) ![怎么样都取消不了,帮帮忙啊](https://img-ask.csdn.net/upload/201610/08/1475891407_89270.png) //我也只能附加个大概,我百度云有完整代码http://pan.baidu.com/s/1jIg6DJg void CLoginDlg::OnOK() //这是登录模块 { // TODO: Add extra validation here CDialog::OnOK(); UpdateData(TRUE);//把对话框中的值传递到变量中 //检查数据有效性 if(m_username=="") { MessageBox("请输入用户名:"); return; } if(m_pwd=="") { MessageBox("请输入密码:"); return; } //定义CUsers对象,用于从数据库Users中读取数据 CUsers user; user.getdata(m_username);//从数据库读取到c++的类中 //如果读取的数据与用户输入数据不同则返回 if(user.getpwd()!=m_pwd) //getpwd从类中返回列中的值 { MessageBox("用户输入不正确!"); return; } CDialog::OnOK(); } CUsers::CUsers()//这是把users表封装成类 { username=""; pwd=""; user_type=0; } CString CUsers::getusername() //从类中返回username { return username; } CString CUsers::getpwd() { return pwd; } int CUsers::getuser_type() { return user_type; } void CUsers::set_username(CString cusername) { username=cusername; } void CUsers::set_pwd(int cpwd) { pwd=cpwd; } void CUsers::set_user_tupe(int cusertype) { user_type=cusertype; } void CUsers::getdata(CString cusername) //从数据库读取到c++【不能用cusername,因为是从数据库读】 { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); _bstr_t vSQL; vSQL="select *from users where username='cusername'";//字符串的sql语句 //执行select语句 _RecordsetPtr m_precordset; m_precordset=m_adoconn.GetRecordSet(vSQL); //返回结果集到m_precordset //返回各列的值 if(m_precordset->adoEOF==1) CUsers(); else { //atoi()把int改为CString username=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("username"); //getcollect()从结果集中读取相应列的值,返回值为_variant_t型 pwd=(LPCTSTR)(_bstr_t)m_precordset->GetCollect("pwd"); user_type=atoi((LPCTSTR)(_bstr_t)m_precordset->GetCollect("user_type")); } //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_insert() { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="insert into users values(username,pwd,user_tupe))"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_update_pwd(CString cusername) { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="updata users set pwd=pwd where username='cusername'"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } void CUsers::sql_delete(CString cusername) { ADOConn m_adoconn; m_adoconn.OnInitDBConnect(); //设置insert语句 //CString strWage; //strWage.Format("%f,Wage"); float转换为字符串形式 _bstr_t vSQL; vSQL="delete from users where username='cusername'"; //执行insert语句 m_adoconn.ExecuteSQL(vSQL); //断开与数据库的链接 m_adoconn.ExitConnect(); } BOOL CFwzlDlg::OnInitDialog() //这是在主对话框初始化时候调用登录模块 { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here _variant_t vIndex; vIndex=long(0); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(0); //_variant_t类型在 COMDEF.H中 vIndex=long(1); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(80); vIndex=long(2); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(40); vIndex=long(3); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(100); vIndex=long(4); m_datagrid.GetColumns().GetItem(vIndex).SetWidth(90); CLoginDlg dlg; extern CUsers curUser; //c++声明必须在前面 if(dlg.DoModal()!=IDOK) //domadal()函数返回对话框的传递的消息 OnOK(); else //读取用户信息到 全局类curUser对象 curUser.getdata(dlg.m_username); return TRUE; // return TRUE unless you set the focus to a control } void ADOConn::OnInitDBConnect() //以下是连接数据库的函数 { //初始化ole/com库环境,为访问ado接口做准备 ::CoInitialize(NULL); //I的大写,和l的小写尽然一样!!!!!!!!!!!!!!!!!!!!!!!! try { //创建Connection对象 m_pConnection.CreateInstance("ADODB.Connection"); //设置连接字符串,必须是BSTR型或者_bstr_t类型 _bstr_t strConnect="Provider=SQLOLEDB;Server=LIQI;Database=fwzl;uid=sa;pwd=qi7250831;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } //捕捉异常 catch(_com_error e) { //显示错误信息 AfxMessageBox(e.Description()); } } _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { try { //连接数据库,如果connection对象为空,则重新连接数据库 if(m_pConnection==NULL) OnInitDBConnect(); //创建记录集对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); //用来获取 某种结构、接口及其指针、引用、变量 所关联的GUID,类似于某些语言中获取类型 typeof 这样的操作。 //取得表中的记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);//源,activestring,游标类型,锁定类型,option(source参数的类型) } //捕捉异常 catch(_com_error e) { //显示出错信息 AfxMessageBox(e.Description()); } //返回结果集 return m_pRecordset; } BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) { try { //是否已经连接数据库 if(m_pConnection==NULL) OnInitDBConnect(); m_pConnection->Execute(bstrSQL,NULL,adCmdText); return true; } catch(_com_error e) { AfxMessageBox(e.Description()); return false; } }//程序调用Connetion对象的Execute方法执行SQL语句,不返回结果集,如果执行成功,则返回true void ADOConn::ExitConnect() { //关闭记录集和连接 if(m_pRecordset!=NULL) m_pRecordset->Close(); m_pConnection->Close(); //释放环境 ::CoUninitialize(); //关闭ole/com数据库,释放资源 }
hibernate 查询出现回滚 为什么
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnection.rollback(LocalManagedConnection.java:97) at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.tidyup(TxConnectionManager.java:783) at org.jboss.resource.connectionmanager.BaseConnectionManager2.returnManagedConnection(BaseConnectionManager2.java:453) at org.jboss.resource.connectionmanager.TxConnectionManager$TxConnectionEventListener.connectionClosed(TxConnectionManager.java:734) at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.closeHandle(BaseWrapperManagedConnection.java:362) at org.jboss.resource.adapter.jdbc.WrappedConnection.close(WrappedConnection.java:155) at org.hibernate.connection.DatasourceConnectionProvider.closeConnection(DatasourceConnectionProvider.java:97) at org.hibernate.jdbc.ConnectionManager.closeConnection(ConnectionManager.java:474) at org.hibernate.jdbc.ConnectionManager.aggressiveRelease(ConnectionManager.java:429) at org.hibernate.jdbc.ConnectionManager.afterStatement(ConnectionManager.java:304) at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:572) at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:291) at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:307) at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:234) at org.hibernate.loader.Loader.doQuery(Loader.java:749) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) at org.hibernate.loader.Loader.doList(Loader.java:2228) at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) at org.hibernate.loader.Loader.list(Loader.java:2120) at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:118) at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1596) at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:306) 数据源用的JNDI配置在JBOSS服务器下,获取连接都没有问题,但是在执行查询的时候出现了回滚,因为数据库是mysql autocommit=true所以回滚不了,异常被抛了出来,我的问题是为什么这里查询会出现回滚?查看了hibernate和jboss源码,只能猜测是在close连接的发现连接已经断开,所以回滚,但是这项目在做JBOSS隔离之前没有这个问题,做了JBOSS隔离只有出现了这个问题,而且还不是必然的是偶然的,找了好几天,实在无能无力,求民间大神指一条明路吧
搭建一个框架,如何做到事务在service层处理
想搭一个基础的框架,不想用spring和hibernate那些东西.... 自己写连接池连接(连接池代码就不想多说,主要是能获取一个connection对象). 想自己写事务处理.service和dao层尽量解耦合(所有的关于业务的事务处理都在service层解决,dao层只做数据库操作) [code="java"] import java.io.*; import java.util.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import javax.transaction.*; import java.sql.ResultSet; /**基类**/ public class BaseDAL implements java.io.Serializable { protected java.sql.Connection myConn=null; public java.sql.Statement stmt = null ; protected java.sql.PreparedStatement pstmt = null; //public java.sql.ResultSet rs = null; private javax.sql.DataSource ds =null; private javax.transaction.UserTransaction transaction =null; private Context ctx =null; public int makeTrans=0; //表示是否启动了事务,为0表示没有启动事务,1表示有启动事务 public int connCount =0; //表示数据库连接的次数,每调用一次Connection,加1,每调用一次Disconnect,减1 protected java.lang.String JNDIName; public BaseDAL() throws Exception { try { JNDIName ="jdbc/TripDataSource"; ctx =new InitialContext(); } catch (Exception e) { throw e; } } public void setTransactionTimeOut(int time) { try { this.transaction.setTransactionTimeout(time); } catch (Exception e) { } } /**修改JNDIName**/ public void setJNDIName(String JNDIName) { this.JNDIName = JNDIName; myConn = null; } /**事务创建**/ public void begin() throws Exception { try { if (transaction == null) { transaction =(javax.transaction.UserTransaction) ctx.lookup("javax.transaction.UserTransaction"); transaction.setTransactionTimeout(120); } if (ds==null) { ds = (javax.sql.DataSource) ctx.lookup(JNDIName); } //获得当前的事务状态,如果不为0,表示当前没有事务在处理 int tranStatus = transaction.getStatus(); if ( tranStatus != 0) { //启动一个事务,记录当前有事务处理 makeTrans = 1; transaction.begin(); } } catch( Exception E) { throw E; } } /**事务提交**/ public void commit() throws Exception { try { //如果当前有提交事务 if ( makeTrans != 0) { transaction.commit(); makeTrans = 0; } } catch(Exception E) { throw E; } } /**事务回滚**/ public void rollback() throws Exception { try { //如果当前有提交事务 if ( makeTrans != 0) { transaction.rollback(); makeTrans = 0; } } catch(Exception E) { throw E; } } /**连接数据库**/ protected void connection() throws Exception { try { if (ds==null) { ds = (javax.sql.DataSource) ctx.lookup(JNDIName); } //如果连接计数为0,连接数据库 if (connCount==0) { myConn = ds.getConnection(); stmt = myConn.createStatement(); } connCount ++; } catch (Exception E) { throw E; } } /**断开数据库**/ protected void disConnection() throws Exception { try { connCount --; if (connCount == 0) { try { if (stmt != null) stmt.close(); myConn.close(); } catch ( Exception e) { e.printStackTrace(); } } } catch (Exception E) { throw E; } } /**创建事务,包括数据连接**/ public void transactionBegin() throws Exception { begin(); connection(); } /**事务提交,包括断开数据库**/ public void transactionCommit() throws Exception { disConnection(); commit(); } /**事务回滚、包括断开数据库**/ public void transactionRollback() throws Exception { disConnection(); rollback(); } public void showmessage(String str) { } [/code] 上面是一个事务处理的基类,以前写的dao都是继承这个基类再实现一个接口 [code="java"] this.transactionBegin(); /** 处理SQL,如果有多样执行的话,多条SQL涉及多张表 **/ this.stmt.executeUpdate(sql); this.transactionCommit(); 失败 this.transactionRollback(); [/code] 以前写的service是使用实现接口的dao来访问dao层 现在脑袋进入死锁状态,想不出,该如何解开这块事物,也就是把事务处理放在service.. 怎么设计,该使用什么事务处理.. [b]问题补充:[/b] 如果用spring和hibernate我就自己去看书了..希望各位别在用框架回答了... [b]问题补充:[/b] 谢谢抛出异常的爱 大概意思我明白.. [code="java"] public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; try { //事务开始 begin(); result = method.invoke(this.delegate, args); //执行原来的方法之后记录日志 commit(); //事务结束 } catch (Exception e) { rollback(); e.printStackTrace(); }finally{ logger.error("finally运行"); } //返回方法返回值给调用者 return result; } public static void main(String arg[]) throws SQLException, InterruptedException{ MixUpper mx = (MixUpper) new DynaProxyHello().bind(new Tmalple()); mx.sonMother(); mx.updateFather(); } [/code] 这样当mx.sonMonther()的时候就执行一次事务. mx.updateFather()的时候又执行一次事务,如果updateFather的时候失败,不会回滚回mx.sonMonther() 还是说我理解错误 [b]问题补充:[/b] 如果涉及到多张表操作.. 因为我想,每张表都有自己的dao处理方式,不会耦合在一起.... 如何用一个代理类实现多个代理方法 [b]问题补充:[/b] 尝试了下代理,好象没什么效果..可能是我写错了 代理类 [code="java"] import javax.transaction.UserTransaction; import javax.naming.NamingException; import javax.naming.InitialContext; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.InvocationHandler; import javax.naming.Context; public class DynaProxyTransaction implements InvocationHandler { private Object object; public Object bind(Object obj) { this.object = obj; return Proxy.newProxyInstance(this.object.getClass().getClassLoader(), this.object.getClass().getInterfaces(), this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object result = null; InitialContext ic = null; UserTransaction ut = null; ic = getContext(); ut = getUserTransaction(); try { System.out.println("事务开始"); ut.begin(); // JVM通过这条语句执行原来的方法(反射机制) result = method.invoke(this.object, args); ut.commit(); System.out.println("事务提交"); } catch (Exception e) { System.out.println("事务回滚"); ut.rollback(); e.printStackTrace(); } // 返回方法返回值给调用者 return result; } private InitialContext getContext() { InitialContext ic = null; try { ic = new InitialContext(); } catch (NamingException e) { e.printStackTrace(); } return ic; } private UserTransaction getUserTransaction() { UserTransaction ut = null; try { ut = (UserTransaction) getContext().lookup( "javax.transaction.UserTransaction"); } catch (NamingException e) { e.printStackTrace(); } return ut; } } [/code] dao层 [code="java"] public class AdminDALImpl implements AdminDAL { Connection con = null; private Context ctx = null; private javax.sql.DataSource ds = null; public AdminDALImpl() { String JNDIName = "***"; try { ctx = new InitialContext(); ds = (javax.sql.DataSource) ctx.lookup(JNDIName); try { con = ds.getConnection(); } catch (SQLException ex1) { ex1.getMessage(); } } catch (NamingException ex) { ex.getMessage(); } } public void saveBean(String name, String pwd) throws Exception { java.sql.Statement st = null; String sql = "insert into t_admin (name,pwd) values ('" + name + "','" + pwd + "')"; try { st = con.createStatement(); st.executeUpdate(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); throw new Exception(e.getMessage()); } finally { con.close(); st.close(); } } } [/code] dao层 [code="java"] public class TestDALImpl implements TestDAL { Connection con = null; private Context ctx = null; private javax.sql.DataSource ds = null; public TestDALImpl() { String JNDIName = "***"; try { ctx = new InitialContext(); ds = (javax.sql.DataSource) ctx.lookup(JNDIName); try { con = ds.getConnection(); } catch (SQLException ex1) { ex1.getMessage(); } } catch (NamingException ex) { ex.getMessage(); } } public void saveBean(String id, String name) throws Exception { java.sql.Statement st = null; String sql = "insert into test (id,name) values ('" + id + "','" + name + "')"; try { st = con.createStatement(); st.executeUpdate(sql); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); throw new Exception(e.getMessage()); } finally { st.close(); con.close(); } } } [/code] 服务层 [code="java"] public class TestBusinessImpl implements TestBusiness{ public TestBusinessImpl() { } public void saveTest() throws Exception { AdminDAL adminDal = new AdminDALImpl(); TestDAL testDal = new TestDALImpl(); adminDal.saveBean("abcd", "abcd"); testDal.saveBean("test","testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttest"); } } [/code] servlet 类 [code="java"] public class TestServlet extends HttpServlet { public TestServlet() { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("**进入servlet**"); TestBusiness business = (TestBusiness)new DynaProxyTransaction().bind(new TestBusinessImpl()); try { business.saveTest(); } catch (Exception ex) { ex.getMessage(); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } [/code] 随便搭了一个平台,接口类我就没写了... 试了好多次..保存test的时候执行SQL是错误的,应该执行事务回滚.第一条好是插入进去了 sdh5724说的Anotation还没去研究 谢谢 [b]问题补充:[/b] 可能你们没看到我这样写是错误的... 我也知道没关联上.但是我不知道该如何关联上... [b]问题补充:[/b] 既然决定发这个贴,就不怕受打击了... 但是还是请多多指教.既然不需要.为什么希望指明点,对事务处理这块碰到的比较少.. [b]问题补充:[/b] [quote] 单一数据库, Connetion就能完成事务了, 也就是所说的数据库自身的事务管理:) [/quote] 你是说jdbc自带的事务处理? con.setAutoCommit(false);设置为手动提交? 那是如何让dao只执行数据库操作 难道把connection做参数传进去? [b]问题补充:[/b] 我只是想理解这块的设计方式,如何设计是比较OK的,代码如何写才是比较好的.如何解决类似这样的问题.. 抛出异常的爱让我知道可以用代理模式(很早以前就看过代理,一直没想到该用在什么地方) sdh5724也让我知道我还有好都东西搞的乱七八糟,现在恶补中... 谢谢几位, 大家有什么意见还可以提,这并不是说要解决具体什么问题,只是一个想了解设计 思路来彻底的解开这耦合.我会准时结帖... 备注:Anotation应该是Annotation
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
使用 Docker 部署 Spring Boot 项目
Docker 技术发展为微服务落地提供了更加便利的环境,使用 Docker 部署 Spring Boot 其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的 S...
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
redis分布式锁,面试官请随便问,我都会
文章有点长并且绕,先来个图片缓冲下! 前言 现在的业务场景越来越复杂,使用的架构也就越来越复杂,分布式、高并发已经是业务要求的常态。像腾讯系的不少服务,还有CDN优化、异地多备份等处理。 说到分布式,就必然涉及到分布式锁的概念,如何保证不同机器不同线程的分布式锁同步呢? 实现要点 互斥性,同一时刻,智能有一个客户端持有锁。 防止死锁发生,如果持有锁的客户端崩溃没有主动释放锁,也要保证锁可以正常释...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Java世界最常用的工具类库
Apache Commons Apache Commons有很多子项目 Google Guava 参考博客
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
【技巧总结】位运算装逼指南
位算法的效率有多快我就不说,不信你可以去用 10 亿个数据模拟一下,今天给大家讲一讲位运算的一些经典例子。不过,最重要的不是看懂了这些例子就好,而是要在以后多去运用位运算这些技巧,当然,采用位运算,也是可以装逼的,不信,你往下看。我会从最简单的讲起,一道比一道难度递增,不过居然是讲技巧,那么也不会太难,相信你分分钟看懂。 判断奇偶数 判断一个数是基于还是偶数,相信很多人都做过,一般的做法的代码如下...
为什么要学数据结构?
一、前言 在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件: 1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...
Android 9.0 init 启动流程
阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android本篇文章主要介绍Android开发中的部分知识点,通过阅读本篇文章,您将收获以下内容:一、启动流程概述一、 启动流程概述Android启动流程跟Linux启动类似,大致分为如下五个阶段。1.开机上电,加载固化的ROM。2.加载BootLoader,拉起Android OS。3.加载Uboot,初始外设,引导Kernel启动等。...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问