DriverManager.getConnection 메서드를 사용하여 데이터베이스 연결을 열고 닫는 작업은 시간이 걸립니다. 특히 웹 애플리케이션에서는 매 사용자 액션마다 새로운 데이터베이스 연결을 열기보다는 항상 열려 있고 사용자 간에 공유되는 소규모 커넥션 풀을 사용하는 것이 좋습니다.JDBC 커넥션 풀의 목적은 다음과 같습니다. 커넥션 풀은 소수의 데이터베이스 연결을 열어 두고, 매번 직접 데이터베이스 연결을 여는 대신 커넥션 풀에서 이 중 하나를 요청하여 사용할 수 있습니다.JDBC 커넥션 풀Apache Commons DBCP 및 C3P0HikariCP(추천)Vibur-dbcpOracle's UCPTomcat JDBC Connection PoolJDBC 커넥션 풀 사용법JDBC 코드에서는 더 이상 ..
setAsciiStream()을 사용하여 ASCII 값을 데이터베이스에 저장import java.io.ByteArrayInputStream;import java.sql.*;public class TestApplication { static final String DB_URL = "jdbc:mysql://localhost/YOUR_DATABASE"; static final String USER = "yourUsername"; static final String PASS = "yourPassword"; static final String XML = "ToveJaniReminderDon't forget me this weekend!"; static final String DROP_T..
저장 프로시저 생성하기DELIMITER $$DROP PROCEDURE IF EXISTS `EMP`.`getEmpName` $$CREATE PROCEDURE `EMP`.`getEmpName` (IN EMP_ID INT, OUT EMP_FIRST VARCHAR(255))BEGIN SELECT first INTO EMP_FIRST FROM Employees WHERE ID = EMP_ID;END $$DELIMITER ;프로시저에는 IN, OUT, INOUT 매개변수가 있습니다. PreparedStatement 객체는 IN 매개변수만 사용하지만, CallableStatement 객체는 모두 사용할 수 있습니다.IN: SQL 문이 생성될 때 값이 알려지지 않은 매개변수. setXXX() 메서드를 ..
배치 처리를 사용하면 관련 SQL 문을 하나의 배치로 그룹화하여 데이터베이스에 한 번에 제출할 수 있습니다. 여러 SQL 문을 한 번에 데이터베이스에 보내면 통신 오버헤드를 줄일 수 있어 성능이 향상됩니다.JDBC 드라이버가 이 기능을 지원해야 하는 것은 아니며, DatabaseMetaData.supportsBatchUpdates() 메서드를 사용하여 대상 데이터베이스가 배치 업데이트 처리를 지원하는지 확인해야 합니다. 이 메서드는 JDBC 드라이버가 이 기능을 지원하면 true를 반환합니다.try (Connection conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD)) { Statement st = conn.createSta..
예외 처리를 통해 프로그램에서 정의한 오류와 같은 예외 상황을 제어된 방식으로 처리할 수 있습니다. 예외 상황이 발생하면 예외가 throw됩니다. throw된다는 것은 현재 프로그램 실행이 중단되고, 제어가 가장 가까운 적절한 catch 블록으로 전달된다는 것을 의미합니다. 만약 적절한 catch 블록이 없다면, 프로그램의 실행은 종료됩니다.SQLException 메서드드라이버와 데이터베이스 모두 발생할 수 있습니다. 예외가 발생하면 SQLException 타입의 객체가 catch 블록으로 전달됩니다.메서드설명getErrorCode()예외와 관련된 오류 번호getMessage()JDBC 드라이버 오류 또는 데이터베이스 오류 번호와 메시지getSQLState()데이터베이스 오류일 경우 XOPEN SQL 상..
JDBC 연결이 자동 커밋 모드인 경우 기본적으로 각 SQL 문이 완료되면 데이터베이스에 커밋됩니다.간단한 애플리케이션에서는 괜찮지만 자동이 아닌 수동으로 트랜잭션을 직접 관리하는 이유는 3가지 있습니다.성능 향상무결성 유지분산 트랜잭션 사용트랜잭션을 사용하면 데이터베이스에 변경 사항이 적용되는 시점과 여부를 제어할 수 있습니다. 이는 하나의 SQL 문 또는 그룹의 SQL 문을 하나의 노리적 단위로 처리하며, 어떤 문에서든 오류가 발생하면 전체 트랜잭션이 실패합니다.JDBC 드라이버가 기본적으로 사용하는 자동 커밋 모드 대신 수동 트랜잭션 지원을 활성화하려면 Connection 객체의 setAutoCommit() 메서드를 사용하여 false로 파라미터를 전달합니다.conn.setAutoCommit(fal..