데이터베이스에 연결할 때 Class.forName("com.mysql.jdbc.Driver");
과 Class.forName("com.mysql.jdbc.Driver").newInstance();
이 모두 작동하는 이유가 궁금합니다. 새로운 인스턴스가 만들어지지 않았기 때문에 이전에는 작동하지 않아도되지 않습니다. 그리고 아직까지도 효과가 있습니다. 임 netbeans를 사용하여 6.9.1. 귀하의 의견을 보내 주셔서 감사합니다!JDBC 연결 - Class.forName과 Class.forName(). newInstance?
답변
Class.forName("xxx")
은 데이터베이스에 대한 연결을 생성하지 않고 단지 JDBC 드라이버를로드하고 이후에 DriverManager.getConnection(...)
호출이 작동하도록 등록합니다. 드라이버를 직접 인스턴스화 할 필요는 없습니다.
jdbc 4.0을 지원하는 드라이버를 사용하면 Class.forName()도 필요하지 않습니다. 드라이버는 DriverManager가 그것을 찾을 때 을 즉석에서로드 할 수있는 메커니즘을 가지고 있다고 가정합니다.
(참조 : http://download.oracle.com/javase/6/docs/api/java/sql/DriverManager.html) DriverManager 메소드 getConnection 및 getDrivers가 Java Standard Edition 서비스 제공자 메커니즘을 지원하도록 향상되었습니다. JDBC 4.0 드라이버는 META-INF/services/java.sql.Driver 파일을 포함해야합니다. 이 파일에는 java.sql.Driver의 JDBC 드라이버 구현 이름이 들어 있습니다.
응용 프로그램이 더 이상 필요
my.sql.Driver가 명시 적으로 예를 들어, my.sql.Driver가 클래스를로드하려면 META-INF/서비스/java.sql.Driver 파일 항목을 포함됩니다 Class.forName()을 사용하여 JDBC 드라이버를로드하십시오. 현재 Class.forName()을 사용하여 JDBC 드라이버를로드하는 기존 프로그램은 수정하지 않고 계속 작동합니다.
- 1. JDBC 연결 문제
- 2. MySQL에 대한 Java JDBC 연결
- 3. JDBC 및 연결 풀 옵션
- 4. JDBC | SQL Server 연결 오류
- 5. 왜 Java에 Class.forName 또는 동적로드가 필요합니까?
- 6. 암호화 된 JDBC 연결
- 7. JDBC - 여러 데이터베이스 연결
- 8. 안전한 JDBC 연결
- 9. JDBC 씬 연결
- 10. JDBC 연결 풀링 문제
- 11. jdbc 연결 오류
- 12. JDBC 연결 풀링
- 13. JDBC 연결 풀
- 14. GWT - Oracle JDBC 연결 문제
- 15. newInstance() vs new
- 16. 연결 풀링과 스레드 별 JDBC 연결
- 17. JDBC 연결 풀 모니터링 GlassFish
- 18. SQL Server/JDBC 연결 문제
- 19. JDBC 연결 및 명령문 클래스
- 20. ClassNotFoundException가 JDBC
- 21. 임의의 위치에서 JDBC 드라이버를 사용하는 방법
- 22. Java 데이터베이스에 연결 오류 : java.lang.ClassNotFoundException : com.mysql.jdbc.Driver
- 23. OSGI의 JDBC 드라이버 문제점
- 24. Wicket : JDBC 연결 오류를 처리 할 곳
- 25. 웹 응용 프로그램의 JDBC 데이터베이스 연결 DAL
- 26. 봄 JDBC 연결 풀 모범 사례
- 27. org.springframework.jdbc.CannotGetJdbcConnectionException에 대한 JDBC 연결 정보를 기록하는 방법
- 28. jdbc 연결 풀에서 가져온 연결을 닫아야합니까?
- 29. 자동 다시 연결을 사용하는 JDBC 연결
- 30. JDBC 연결 링크 오류 - 어떻게 장애 조치합니까?
감사합니다. 마지막으로 qn- 인스턴스화하면 이후의 DriverManager.getConnection (..)이 다시 인스턴스화하지 않습니다. 올바른가? 첫 번째 단계에서 인스턴스화하지 않은 경우에만 그렇게됩니다. – OckhamsRazor
클래스를로드하는 것만으로는 드라이버 관리자가 드라이버에서 정적 블록에 의해 트리거 된 것으로 이미 생각한 것 같습니다. 솔직히 말해서, 나는 완전히 확신하지 못합니다. 인스턴스화 한 드라이버 (예 : 랩 어라운드)를 사용하려면 DriverManager를 사용하여 연결을 피하거나 DriverManager 정적 메서드를 사용하여 드라이버 인스턴스를 등록해야합니다. – araqnid