본문으로 바로가기

[JSP][mysql][mariadb] 다중 쿼리 입력하기

category 개발/JSP 2021. 8. 9. 16:12
728x90

- 개발환경 : (eclipse IDE)

- 언어 : jsp

 

- 의도 :  한 개의 동작에 여러 개의 쿼리문을 실행하기

 

- 해결

 

단순 JSP공부를 하다보면 DAO에서 이뤄지는 DB 접속 작업이 필수로 있을 것이다.

쿼리문 사용에 능숙하다면 서브 쿼리를 이용하여 해결하기도 하겠지만, 서브 쿼리를 쓰지 않고 사용하는 방법이 있다.

 

public testDAO() {
	try {
	    String dbURL = "jdbc:mariadb://localhost:3306/test";
	    String dbID = "root";
	    String dbPassword = "root";
	    Class.forName("org.mariadb.jdbc.Driver");
	    conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
	    
	} catch (Exception e) {
	    e.printStackTrace();
	}
 }

위와 같이 DB에 접속하는 코드에서 멀티 쿼리를 적용하게 되는데

 

?allowMultiQueries=true

문장을 URL 뒤에 붙이면 된다.

 

보통 쿼리 작업 수행시 

쿼리문 전송방법은

String sql = "insert into tt values(?,?,?,?,?,?)";

방식으로 하나의 쿼리만 전송하고 연속적으로 전송하려면 재 호출을 해야만 했다.

 

하지만 ?allowMultiQueries=true를 사용하게 되면 같은 줄에 여러 쿼리를 보낼 수 있다

 

- 접속 설정

public testDAO() {
	try {
	    String dbURL = "jdbc:mariadb://localhost:3306/test?allowMultiQueries=true";
	    String dbID = "root";
	    String dbPassword = "root";
	    Class.forName("org.mariadb.jdbc.Driver");
	    conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
	    
	} catch (Exception e) {
	    e.printStackTrace();
	}
 }

 

- 다중 쿼리 실행

String sql = "insert into tt values(?,?,?,?,?,?); update tt set user where cnt = 1";

이렇게 사용하면 한번의 호출로 여러 개의 쿼리를 실행할 수 있게 된다.

 

 

만약 dbURL 설정시 이미 적용된 ?serverTimezone=UTC 같은 문구가 있을 경우 연장하는 방법은

public testDAO() {
	try {
	    String dbURL = "jdbc:mariadb://localhost:3306/test?allowMultiQueries=true&serverTimezone=UTC";
	    String dbID = "root";
	    String dbPassword = "root";
	    Class.forName("org.mariadb.jdbc.Driver");
	    conn = DriverManager.getConnection(dbURL, dbID, dbPassword);
	    
	} catch (Exception e) {
	    e.printStackTrace();
	}
 }

이렇게 &로 연결해주면 모두 적용 된다.

728x90