데이터베이스: MySQL
응용 프로그램을 작성할 때 프로그램 디버깅의 편의를 위해 예외 정보를 예외 처리 코드에 표시하여 오류 프롬프트에 따라 코드를 디버깅할 수 있습니다. 예외 처리 코드는 일반적으로 다음과 같이 작성할 수 있습니다.
노력하다{
…
}catch(예외 e){
System.out.println(e.toString());
}
다음은 몇 가지 일반적인 오류 메시지입니다.
(1) 드라이버가 없을 때 나타나는 오류 메시지는 다음과 같습니다.
java.lang.ClassNotFoundException: com.mysql.jdbc.Drive
후반부는 프로그램에 작성한 드라이버의 이름입니다.
해결책: 클래스 이름이 잘못 작성되었는지 주의 깊게 확인하십시오. 클래스 이름이 잘못 작성되지 않았다면 드라이버가 있는 압축 패키지가 프로젝트에 도입되지 않았음을 의미합니다.
(2) URL을 잘못 기재한 경우 나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: 적합한 드라이버가 없습니다.
해결책: URL 형식이 올바른지 주의 깊게 확인하십시오. 서로 다른 데이터베이스의 URL 형식이 다릅니다.
(3) 호스트 IP 주소가 올바르지 않거나 네트워크를 사용할 수 없는 경우 나타나는 오류 메시지는 다음과 같습니다.
com.mysql.jdbc.CommunicationsException: 기본 예외로 인한 통신 링크 실패:
** 중첩된 예외 시작 **
java.net.ConnectException
메시지: 연결 시간이 초과되었습니다: 연결
스택 추적:
java.net.ConnectException: 연결 시간이 초과되었습니다: 연결
java.net.PlainSocketImpl.socketConnect(네이티브 메소드)
java.net.PlainSocketImpl.doConnect(알 수 없는 소스)에서
java.net.PlainSocketImpl.connectToAddress(알 수 없는 소스)에서
java.net.PlainSocketImpl.connect(알 수 없는 소스)에서
java.net.SocksSocketImpl.connect(알 수 없는 소스)에서
java.net.Socket.connect(알 수 없는 소스)에서
java.net.Socket.connect(알 수 없는 소스)에서
java.net.Socket.<init>(알 수 없는 소스)
java.net.Socket.<init>(알 수 없는 소스)
com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:132)에서
com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)에서
com.mysql.jdbc.Connection.createNewIO(Connection.java:1639)에서
com.mysql.jdbc.Connection.<init>(Connection.java:393)에서
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:262)에서
java.sql.DriverManager.getConnection(알 수 없는 소스)에서
java.sql.DriverManager.getConnection(알 수 없는 소스)에서
test.JDBCTest.oracleTest(JDBCTest.java:25)에서
test.JDBCTest.main(JDBCTest.java:12)에서
** 중첩된 예외 종료 **
해결책: IP 주소가 올바른지, 네트워크에 문제가 있는지 확인하세요.
(4) 포트가 잘못되었거나 데이터베이스 서버가 시작되지 않은 경우 오류 메시지는 다음과 같습니다.
com.mysql.jdbc.CommunicationsException: 기본 예외로 인한 통신 링크 실패:
** 중첩된 예외 시작 **
java.net.ConnectException
메시지: 연결이 거부되었습니다: 연결
스택 추적:
java.net.ConnectException: 연결이 거부되었습니다: 연결
java.net.PlainSocketImpl.socketConnect(네이티브 메소드)에서
java.net.PlainSocketImpl.doConnect(알 수 없는 소스)에서
java.net.PlainSocketImpl.connectToAddress(알 수 없는 소스)에서
java.net.PlainSocketImpl.connect(알 수 없는 소스)
java.net.SocksSocketImpl.connect(알 수 없는 소스)에서
java.net.Socket.connect(알 수 없는 소스)에서
java.net.Socket.connect(알 수 없는 소스)에서
java.net.Socket.<init>(알 수 없는 소스)
java.net.Socket.<init>(알 수 없는 소스)
com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:132)에서
com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:273)에서
com.mysql.jdbc.Connection.createNewIO(Connection.java:1639)에서
com.mysql.jdbc.Connection.<init>(Connection.java:393)에서
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:262)에서
java.sql.DriverManager.getConnection(알 수 없는 소스)에서
java.sql.DriverManager.getConnection(알 수 없는 소스)에서
test.JDBCTest.oracleTest(JDBCTest.java:25)에서
test.JDBCTest.main(JDBCTest.java:12)에서
** 중첩된 예외 종료 **
해결책: 포트가 올바른지, 데이터베이스 서버가 시작되었는지 확인하십시오.
(5) 데이터베이스 이름이 잘못된 경우 나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: 알 수 없는 데이터베이스 'test2'
해결 방법: 데이터베이스가 존재하는지 확인하십시오.
(6) 사용자 이름이나 비밀번호가 올바르지 않을 경우 나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: 사용자 'roo'@'localhost'에 대한 액세스가 거부되었습니다(비밀번호 사용: YES).
해결책: 사용자 이름과 비밀번호가 올바른지 확인하십시오.
(7) 테이블 이름 오류로 인해 나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: 'test.student1' 테이블이 존재하지 않습니다.
해결 방법: 테이블이 존재하는지, 테이블 이름이 잘못 작성되었는지 확인하세요.
(8) 컬럼명 오류로 인해 나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: '필드 목록'의 알 수 없는 열 'sid'
해결책: 데이터베이스 테이블의 열 이름을 자세히 살펴보십시오.
(9) 결과 셋 처리 시, 얻어지는 컬럼의 시퀀스 번호가 컬럼 개수보다 크거나, 0보다 작다.
나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: 열 인덱스가 범위를 벗어났습니다. 4 > 3.
이 오류의 배경은 데이터베이스 테이블에 3개의 열만 있고 정보를 가져올 때 rs.getString(4)이 사용된다는 것입니다. 특히 루프 처리를 사용할 때 이 오류가 발생하기 쉽습니다.
(10) Insert 문 실행 시, 테이블의 컬럼 수가 Insert 문의 내용과 다를 경우 나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: 열 개수가 행 1의 값 개수와 일치하지 않습니다.
이 오류의 배경은 데이터베이스 테이블에 3개의 열이 있고 삽입 시 4개의 값이 제공되었다는 것입니다.
학생 값('0011323','Li Xu',22,99)에 삽입합니다.
(11) insert문을 실행하면 기본키가 반복된다.
나타나는 오류 메시지는 다음과 같습니다.
java.sql.SQLException: 키 1에 '0011323' 항목이 중복되었습니다.
이 오류의 배경은 다음과 같습니다. SQL 문이 두 번 연속으로 실행되었으며 두 번째로 오류가 발생했습니다.
(12) insert 문을 실행할 때 값이 너무 길면 다음과 같은 오류 메시지가 나타납니다.
java.sql.SQLException: 행 1의 'id' 열에 대한 데이터가 너무 깁니다.
해결책, 데이터베이스의 열 길이를 확인하십시오.