MySQL 테이블의 데이터를 Java로 업데이트하는 방법
MySQL 데이터베이스 테이블의 기존 데이터를 수정하려면 UPDATE 명령어를 사용합니다. 기본 문법은 다음과 같습니다.
update yourTableName set yourColumnName1 = value1,....N where condition;
UPDATE 문은 WHERE 조건절과 함께 사용해야 원하는 레코드만 정확하게 수정할 수 있습니다. WHERE 절을 생략하면 테이블의 모든 행이 변경되므로 각별히 주의해야 합니다.
1단계: 테이블 생성하기
먼저 실습에 사용할 테이블을 생성합니다. 다음 쿼리를 실행하세요.
mysql> create table UpdateDemo -> ( -> id int, -> Name varchar(200) -> ); Query OK, 0 rows affected (0.67 sec)
2단계: 샘플 데이터 삽입하기
테이블에 테스트용 레코드를 삽입합니다. 아래는 해당 쿼리입니다.
mysql> insert into UpdateDemo values(101,'John'); Query OK, 1 row affected (0.19 sec) mysql> truncate table UpdateDemo; Query OK, 0 rows affected (0.86 sec) mysql> insert into UpdateDemo values(1,'John'); Query OK, 1 row affected (0.13 sec) mysql> insert into UpdateDemo values(2,'Carol'); Query OK, 1 row affected (0.13 sec) mysql> insert into UpdateDemo values(3,'Smith'); Query OK, 1 row affected (0.18 sec) mysql> insert into UpdateDemo values(4,'David'); Query OK, 1 row affected (0.15 sec)
3단계: 현재 데이터 확인하기
SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from UpdateDemo;
실행 결과는 다음과 같습니다.
+------+-------+ | id | Name | +------+-------+ | 1 | John | | 2 | Carol | | 3 | Smith | | 4 | David | +------+-------+ 4 rows in set (0.00 sec)
Java 코드로 MySQL 데이터 업데이트하기
이제 JDBC(Java Database Connectivity)를 활용하여 MySQL 데이터베이스에 연결하고 레코드를 업데이트하는 Java 코드를 살펴보겠습니다. 이 예제에서는 id가 1과 4인 레코드의 Name 컬럼 값을 'Johnson'으로 변경합니다.
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
public class JavaUpdateDemo {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
try {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
System.out.println(e);
}
conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/business", "Manish", "123456");
System.out.println("Connection is created successfully:");
stmt = (Statement) conn.createStatement();
String query1 = "update UpdateDemo set Name='Johnson' " + "where id in(1,4)";
stmt.executeUpdate(query1);
System.out.println("Record has been updated in the table successfully..................");
} catch (SQLException excep) {
excep.printStackTrace();
} catch (Exception excep) {
excep.printStackTrace();
} finally {
try {
if (stmt != null)
conn.close();
} catch (SQLException se) {}
try {
if (conn != null)
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
System.out.println("Please check it in the MySQL Table. Record is now updated.......");
}
}코드 핵심 흐름 설명
위 코드의 동작 과정을 단계별로 정리하면 다음과 같습니다.
1. 드라이버 로딩: Class.forName() 메서드로 MySQL JDBC 드라이버를 메모리에 로드합니다.
2. 데이터베이스 연결: DriverManager.getConnection() 메서드를 통해 JDBC URL, 사용자명, 비밀번호를 지정하여 연결 객체를 생성합니다.
3. Statement 생성: createStatement() 메서드로 SQL 문을 실행할 수 있는 Statement 객체를 만듭니다.
4. UPDATE 쿼리 실행: executeUpdate() 메서드로 UPDATE 문을 실행하여 id가 1 또는 4인 레코드의 이름을 'Johnson'으로 변경합니다.
5. 자원 해제: finally 블록에서 Statement와 Connection 객체를 닫아 리소스 누수를 방지합니다.
업데이트 결과 확인하기
Java 프로그램 실행 후, SELECT 문으로 테이블 데이터가 실제로 변경되었는지 확인할 수 있습니다.
mysql> select *from UpdateDemo;
실행 결과는 다음과 같습니다.
+------+---------+ | id | Name | +------+---------+ | 1 | Johnson | | 2 | Carol | | 3 | Smith | | 4 | Johnson | +------+---------+ 4 rows in set (0.00 sec)
출력 결과를 보면 id가 1인 'John'과 id가 4인 'David'가 모두 'Johnson'으로 성공적으로 업데이트된 것을 확인할 수 있습니다. 나머지 레코드(id 2, 3)는 WHERE 조건에 해당하지 않으므로 그대로 유지되었습니다.
마무리 및 추가 팁
이처럼 Java와 JDBC를 활용하면 MySQL 데이터베이스의 데이터를 손쉽게 업데이트할 수 있습니다. 실무 환경에서는 다음 사항도 함께 고려하는 것이 좋습니다.
- PreparedStatement 사용: SQL 인젝션 공격을 방지하고 성능을 개선하려면 Statement 대신 PreparedStatement와 파라미터 바인딩을 사용하는 것이 권장됩니다.
- try-with-resources 활용: Java 7 이상에서는 try-with-resources 구문을 사용하면 자원 해제 코드를 더욱 간결하게 작성할 수 있습니다.
- WHERE 절 필수 확인: UPDATE 문 실행 시 반드시 WHERE 조건을 검토하여 의도하지 않은 전체 데이터 변경을 방지하세요.