2012-08-29 1 views
4

를 사용하지 않고 JDBC 데이터베이스 연결을 얻기 :내가 데이터베이스 연결을 얻을하기 (ColdFusion)에 다음과 같은 자바 코드를 사용하고 Servicefactory

//Creating an object of servicefactory class 
local.theServiceFactory = createObject('java','coldfusion.server.ServiceFactory'); 

//Creating the connection object simply by passing the DSN name 
local.connect = theServiceFactory.getDataSourceService().getDataSource('dsnnane').getConnection(); 

큰 작동합니다. 유일한 문제는 보안상의 이유로 ServiceFactory을 사용할 수 없다는 것입니다. 연결 개체를 가져 오는 또 다른 방법이 있습니까?

+3

처럼 사용할 수 있습니까? 또한 공유 호스팅에 있습니까? – Leigh

+0

cfquery에서 데이터 소스 이름을 사용한다고해서 필자가 필요로하는 메소드에 액세스 할 수 없기 때문입니다. AutoCommit을 false로 설정하십시오. 나는 배치 삽입을하고있다. CF는 배치 삽입 이 무엇인지 알지 못합니다. –

+0

하지만 데이터베이스에는 ... SQL 자체에서 설정 한 사항을 설정하는 방법이 있습니까? 예를 들어'autocommit'을 false로 설정하면 다음과 같습니다. http://stackoverflow.com/questions/1090240/how-do-you-set-autocommit-in-an-sql-server-session –

답변

1

이런 종류의 일을하기 위해 호출 스택을 더 낮추는 대신, SQL 자체를 통해 직접 옵션을 설정하는 방법을 살펴볼 것입니다. 내 의견에 게시 했으므로 autocommitvalues in SQL Server via T-SQL 그 자체를 설정할 수 있습니다.

+0

그래, 대부분의 데이터베이스에서는 sql의 설정을 무시할 수 있습니다. 즉, cfquery 또는 저장 프로 시저 내에서 명령을 실행할 수 있습니다. (편집) 원래의 질문에 답하기 위해,'ServiceFactory' afaik에 접근하지 않고 CF 데이터 소스를 이용할 수 없습니다. * 새로운 * jdbc 연결을 만들 수 있지만 여기서는 불필요하게 보인다. – Leigh

+0

글쎄, 내가 SQL을 준비하는 데 연결 개체를 사용하여 볼 때, 그 생각은 그다지 생각하지 않습니다. local.sqlStatement.setString (2, "bar") end loop..local.sqlStatement.executeBatch(); local.connect.commit(); \t local.sqlStatement.close(); local.connect.close(); –

+0

우리에게 명확하지 않은 이유는''을 사용하여 보통의''에서 실행할 수 없다는 것입니다. 우리가 알고있는 표준 CF 코드로 돌아가는 것을 방해하는 것은 무엇입니까? :). –

0

나는 낮은 수준의 연결 개체를 사용하여 모든 대신에 단지`cfquery`에서 데이터 소스 이름을 사용하는 이유는 무엇입니까이

var datasourceService = createObject("Java", "coldfusion.server.ServiceFactory").getDataSourceService(); 
    var ds = datasourceService.getDatasource(variables.dsn).getConnection().getPhysicalConnection(); 
    ds.setAutoCommit(false); 
    ... 
    ds.setAutoCommit(true); 
+0

질문을 다시 읽으십시오. 보안 제한 때문에'ServiceFactory'를 사용할 수 없다고합니다. – Leigh

관련 문제