사용자 도구

사이트 도구


java:jdbc

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:jdbc [2015/02/09 09:32]
kwon37xi
java:jdbc [2021/02/16 18:24] (현재)
kwon37xi [SQL Logging]
줄 7: 줄 7:
   * [[http://www.java2s.com/Tutorials/Java/JDBC/index.htm|Java2s JDBC Tutorial]]   * [[http://www.java2s.com/Tutorials/Java/JDBC/index.htm|Java2s JDBC Tutorial]]
  
 +===== Timeout =====
 +  * DB 연결 설정에서 Timeout은 매우 중요한 부분임. 모두 설정하고 의미 숙지
 +  * [[http://d2.naver.com/helloworld/1321|JDBC Internal - 타임아웃의 이해]]
 +  * connection timeout
 +  * socket timeout
 +  * statement timeout(query timeout)
 +  * 각 Connection Pool에서 커넥션을 가져오는 최대 대기시간 설정도 꼭 해준다. connection timeout보다 약간 더 길게 하면 될까?
 +===== 편리 라이브러리 =====
 +  * [[java:jinq|Jinq]]
 +  * [[java:jooq|jOOQ]]
 +  * [[java:jdbi|JDBI]]
 +  * [[springframework:jdbc|Springframework JDBC]]
 +  * [[java:fluent_jdbc|Fluent JDBC]]
 +  * [[java:jdbc:datasource_proxy|DataSource Proxy]]
  
 ===== SQL Logging ===== ===== SQL Logging =====
 +  * 대부분의 JDBC Driver는 자체적으로 logging 기능을 끄고 켤 수 있는 경우가 많다.
   * [[http://zer0.free.fr/craftsman/spy.php|Craftsman Spy 1.0.5]] : SQL 구문, 실행 시간등을 일괄적으로 로그로 남길 수 있다.   * [[http://zer0.free.fr/craftsman/spy.php|Craftsman Spy 1.0.5]] : SQL 구문, 실행 시간등을 일괄적으로 로그로 남길 수 있다.
     * [[http://java.dzone.com/articles/logging-spring-jdbc-and|Logging with Spring JDBC and Craftsman Spy]]     * [[http://java.dzone.com/articles/logging-spring-jdbc-and|Logging with Spring JDBC and Craftsman Spy]]
   * [[http://www.javabeat.net/2012/06/new-features-jdbc-3-0/|New Features of JDBC 3.0]]   * [[http://www.javabeat.net/2012/06/new-features-jdbc-3-0/|New Features of JDBC 3.0]]
 +  * [[https://github.com/p6spy/p6spy|P6Spy]]
   * [[https://code.google.com/p/log4jdbc-log4j2/|Log4jdbc-log4j2]] : JDBC 로깅 with log4j2 and slf4j   * [[https://code.google.com/p/log4jdbc-log4j2/|Log4jdbc-log4j2]] : JDBC 로깅 with log4j2 and slf4j
 +  * [[https://vladmihalcea.com/2016/05/03/the-best-way-of-logging-jdbc-statements/|The best way of logging JDBC statements]] 
 +  * [[java:jdbc:datasource_proxy|DataSource Proxy]]
 ===== Db 접속 테스트. 가장 기본 JDBC 접속 및 쿼리 ===== ===== Db 접속 테스트. 가장 기본 JDBC 접속 및 쿼리 =====
 <code java> <code java>
줄 34: 줄 51:
         try {         try {
             System.out.println(">> Processing JDBC URL : "+ jdbcUrl);             System.out.println(">> Processing JDBC URL : "+ jdbcUrl);
 +            Class.forName(“driverClassFQCN”); // no need in Java 6/JDBC 4
             con = DriverManager.getConnection(jdbcUrl, username, password);             con = DriverManager.getConnection(jdbcUrl, username, password);
             statement = con.createStatement();             statement = con.createStatement();
줄 50: 줄 68:
  
 </code> </code>
 +  * Java 6, JDBC 4.0 부터는 ''Class.forName()''이 불필요하다. [[https://www.mkyong.com/jdbc/jdbc-class-forname-is-no-longer-required/|JDBC Class.forName() is no longer required – Mkyong.com]]
  
 ===== JDBC Driver ===== ===== JDBC Driver =====
줄 120: 줄 139:
   * 따라서 Tomcat에 웹 애플리케이션으로 올리거나 할 때는 ''WEB-INF/lib''에 JDBC 드라이버가 있으면 JDBC 드라이버 자동로딩 기능은 작동하지 않는 것으로 보인다.   * 따라서 Tomcat에 웹 애플리케이션으로 올리거나 할 때는 ''WEB-INF/lib''에 JDBC 드라이버가 있으면 JDBC 드라이버 자동로딩 기능은 작동하지 않는 것으로 보인다.
   * ''${CATALINA_HOME}/lib''에 두어야 올바로 작동하는 듯 하다.   * ''${CATALINA_HOME}/lib''에 두어야 올바로 작동하는 듯 하다.
 +
 +===== 특정 Table 의 meta data 얻기 =====
 +<code java>
 +try (Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3307/dbname", "username", "password")) {
 +    final DatabaseMetaData metaData = con.getMetaData();
 +
 +    final ResultSet rs = metaData.getTables(null, null, "[tableName]", new String[] { "TABLE" });
 +
 +    while(rs.next()) {
 +        final ResultSetMetaData rsMetaData = rs.getMetaData();
 +        final int columnCount = rsMetaData.getColumnCount();
 +        for (int i = 1; i <= columnCount; i++) {
 +            System.out.println("column " + i + ", column name: " + rsMetaData.getColumnName(i) + " , value: " + rs.getString(i)));
 +        }
 +    }
 +}
 +</code>
 +
 +===== SQL 생성 =====
 +  * [[https://github.com/OpenGamma/ElSql|ElSql]]
  
 ===== 참고 ===== ===== 참고 =====
   * [[http://examples.javacodegeeks.com/core-java/sql/jdbc-databasemetadata-example/|JDBC DatabaseMetaData Example]]   * [[http://examples.javacodegeeks.com/core-java/sql/jdbc-databasemetadata-example/|JDBC DatabaseMetaData Example]]
 +  * [[http://openhms.sourceforge.net/sqlbuilder/|Builder style classes for creating SQL queries]] 
 +  * [[https://examples.javacodegeeks.com/core-java/sql/jdbc-resultsetextractor-example/|JDBC ResultSetExtractor Example | Examples Java Code Geeks - 2017]] 
 +  * [[http://www.baeldung.com/jdbc-batch-processing|Batch Processing in JDBC]] 
 +  * [[https://www.javaworld.com/article/3388036/what-is-jdbc-introduction-to-java-database-connectivity.html|What is JDBC? Introduction to Java Database Connectivity | JavaWorld]]
java/jdbc.1423441964.txt.gz · 마지막으로 수정됨: 2015/02/09 09:32 저자 kwon37xi