[Jdbc] DriverPropertyInfo를 이용해 현재 드라이버 연결의 파라미터 값 확인하기
jdbc에서 useAffectedRows
파라미터를 테스트해보던 중에 현재 jdbc 드라이버에 제대로 적용이 되어있는 것인지 확인이 필요했는데, java.sql.DriverPropertyInfo
를 이용해서 확인할 수 있었다.
아래와 같이 테스트 소스를 작성하고 파라미터 설정을 바꿔가면서 확인해보니 제대로 동작하는 것을 확인할 수 있었다. 출력 부분은 필요에따라 변형하면될 것 같고 어플리케이션 개발 단계에서는 DEBUG 모드로 현재 커넥션 상태를 로깅해주는 것도 좋을 것 같다.
import java.util.Arrays;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.DriverPropertyInfo;
import java.sql.SQLException;
public class DriverPropertyInfoTest {
static Connection conn = null;
public static void main(String[] argv) {
try{
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e){
e.printStackTrace();
}
try{
String url = "jdbc:mysql://localhost:3306/employees?useAffectedRows=true";
conn = DriverManager.getConnection(url, "root", "password");
Driver driver = DriverManager.getDriver(url);
DriverPropertyInfo[] props = driver.getPropertyInfo(url, null);
for(int i=0; i<props.length; i++) {
System.out.println("Name: " + props[i].name );
System.out.println("Required: " + props[i].required );
System.out.println("Value : " + props[i].value );
System.out.println("Description: " + props[i].description );
String[] choices = props[i].choices;
System.out.println("Choices: " + (choices!=null ? Arrays.asList(choices) : null) );
System.out.println();
}
conn.close();
} catch (SQLException e){
e.printStackTrace();
}
}
}
connection string 을 아래와 같이 설정했을 때에는
String url = "jdbc:mysql://localhost:3306/employees?useAffectedRows=true";
다음과 같이 Value: true
로 확인이 되고
Name: useAffectedRows
Required: false
Value : true
Description: Don't set the CLIENT_FOUND_ROWS flag when connecting to the server (not JDBC-compliant, will break most applications that rely on "found" rows vs. "affected rows" for DML statements), but does cause "correct" update counts from "INSERT ... ON DUPLICATE KEY UPDATE" statements to be returned by the server.
Choices: [true, false, yes, no]
다음과 같이 연결했을 때에는
String url = "jdbc:mysql://localhost:3306/employees";
기본값으로 Value: false
로 확인이 된다.
Name: useAffectedRows
Required: false
Value : false
Description: Don't set the CLIENT_FOUND_ROWS flag when connecting to the server (not JDBC-compliant, will break most applications that rely on "found" rows vs. "affected rows" for DML statements), but does cause "correct" update counts from "INSERT ... ON DUPLICATE KEY UPDATE" statements to be returned by the server.
Choices: [true, false, yes, no]
DriverPropertyInfo 를 통해서 jdbc 파라미터 값을 확인할 수 있다는 수확과 함께 jdbc 파라미터가 이렇게 많다는 것에 놀랐고 하나하나 공부해봐야겠다는 숙제를 얻은 것 같다. 데이터베이스 별로 지원하는 파라미터 종류도 다를 수 있겠다는 생각이 드는데 표준 항목부터 찾아봐야겠다.