データベース: 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 つの値が指定されました。SQL ステートメントは次のとおりです。
学生の値('0011323','Li Xu',22,99)に挿入します。
(11)insert文を実行すると主キーが繰り返されます。
表示されるエラー メッセージは次のとおりです。
java.sql.SQLException: キー 1 のエントリ '0011323' が重複しています
このエラーの背景は、SQL ステートメントが 2 回連続して実行され、2 回目にエラーが発生したことです。
(12) Insert ステートメントを実行するとき、値が長すぎる場合のエラー メッセージは次のとおりです。
java.sql.SQLException: 行 1 の列 'id' のデータが長すぎます
解決策として、データベース内の列の長さを確認してください。