문제점 :com.mchange.v2.c3p0.ComboPooledDataSource에서 특정 연결을 요청하려면 어떻게해야합니까?
- 프로그램베이스 서버에 연결
com.mchange.v2.c3p0.ComboPooledDataSource
사용 - 프로그램 시퀀스에서 2 개 방법
runSQL1()
및runSQL2()
을 실행 runSQL1()
는 #temptableSELECT * INTO #myTemp FROM TABLE1 WHERE X=2
를 생성 SQL을 수행
runSQL2()
은이 #tem에서 읽는 SQL을 실행합니다. ptableSELECT * FROM #myTemp WHERE Y=3
문제 :
runSQL2()
는runSQL1()
을 물려 것보다 풀에서 다른 DB 연결을 건네됩니다.그러나 Sybase #temptables는 연결에 따라 다르므로 테이블을 찾을 수 없으면
runSQL2()
이 실패합니다. 내가 생각할 수있는
가장 확실한 해결책은 (옆으로 우리가 심지어 풀을 필요로하지 않는 점에서 풀 크기 (1) 만드는 퇴화 한에서) 어떻게 든이었다 특정되는 풀에서 연결을 기억하는 것입니다 runSQL1()
에 의해 사용되며 runSQL2()
요청 같은 연결 있습니다.
com.mchange.v2.c3p0.ComboPooledDataSource
에는이 방법이 있습니까?
가능하면 runSQL1()에 사용 된 연결이 다른 스레드에 의해 사용되는 경우 runSQL2()의 호출이 연결을 기다릴 때까지 기다릴 것입니다. 연결은 다른 스레드에 의해 해제됩니다).
그러나 불가능하다면 DB 연결 (내가 걱정하는 것)이 모든 단일 스레드에서 발생하므로 runSQL2()가 요청한 모든 연결이 100 %가 될 것이라고 가정합니다. SQL1()을 사용할 수 있었던 경우 사용 가능합니다.
해결 방법의 일부로 "#temptables 사용 중지"를 포함하지 않는 한 다른 방법으로 문제를 해결하는 모든 솔루션을 환영합니다.
part1을 실행하기 전에 연결을 요청한 다음 두 호출에 매개 변수로 전달할 수없는 이유는 무엇입니까? – Ivan
@ivan. 하지만이 솔루션을 좋아하지 않아 특정 연결을 얻는 방법을 알고 싶습니다. – DVK
@Ivan이 제안한 솔루션이 적절한 솔루션이라고 생각합니다. 다른 방법으로 얻으려면 먼저 연결을 수신 할 때 연결 식별자를 보유해야합니다. 이 작업을 수행 한 후 풀 관리자에서 리플렉션을 사용하여 일치하는 연결을 찾아야합니다. 이를 수행하는 대신 특정 연결에 대한 참조를 유지하는 것이 더 깨끗합니다. 식별자로 질의하여 실제로이 작업을 수행해야하는 경우 자체 래퍼 연결 관리자를 작성하여 사용할 수 있습니다. – Kaan