- PR -

SQLのUNIQUEについて

投稿者投稿内容
omopurike
常連さん
会議室デビュー日: 2008/04/03
投稿数: 38
投稿日時: 2008-10-02 06:38
MySQLでテーブルを作る際UNIQUEをつかいました。

javaでそのテーブルにデータを入れる際指定したカラムが重複した場合UNIQUEが作動してエラーを起こしてくれるのはわかるのですがどのExceptionでcatchすればいいのかわかりません。

エラーページを起動させるのにExceptionを使いたいので知りたいのですがどなたか教えてもらえませんか?
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2008-10-02 08:38
一般的にSQLExceptionだと思いますが、試してみたら違うということですか?
omopurike
常連さん
会議室デビュー日: 2008/04/03
投稿数: 38
投稿日時: 2008-10-02 09:03
私もそう思ったのですができなくて^^;

エラーではしっかり重複してるとでてるのですが。。。
例外が発生しました。
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException: Duplicate entry '1-2008-10-02-0' for key 1

ソースは
public static void time(int id ,int bool,String day,String time){

Connection con = null;
PreparedStatement ps = null;

try {
// MySQL JDBCドライバ-のロード
Class.forName("org.gjt.mm.mysql.Driver");
// MySQLの接続
con = DriverManager.getConnection("jdbc:mysql:///kintai?useUnicode=true&characterEncoding=SJIS");


// ステートメントオブジェクトを生成
ps = con.prepareStatement("INSERT INTO TIME_RECORD(ID,DAY,TIME,DECISION)"
+" VALUES(?,?,?,?)");
ps.setInt(1, id);
ps.setString(2, day);
ps.setString(3, time);
ps.setInt(4, bool);

//INSERT文の実行
ps.execute();

//ステートメントをクローズ
ps.close();

} catch (Exception e) {
System.out.println("例外が発生しました。");
e.printStackTrace();

try{
if(ps != null){
ps.close();
}
if(con != null){
con.close();
}
}
catch(SQLException se){
decision=false;
}
}//catch
}//closeと例外の共通処理終了

public static boolean isDecision() {
return decision;
}
}

decisionがfalseだった場合はエラーページを表示としてあるのですが。。。
書き方が悪いのでしょうか?
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2008-10-02 09:49
1つ目のcatchで捕捉されているので、2つ目のcatchの中に書かれているdecisionを偽にするコードは必ず実行されるとは限らないですよね?

ところで、MySQLのJDBCドライバのJavaDocはどこで読めますか?mysql.comのリンクをざっと探したけど見つけられなかった・・・
omopurike
常連さん
会議室デビュー日: 2008/04/03
投稿数: 38
投稿日時: 2008-10-02 10:01


本当ですね。
1つ目に変更してみたところ無事できました。

/*例外処理*/
} catch (SQLException e) {
decision=false;

} catch (ClassNotFoundException e) {
e.printStackTrace();

} finally {
try{
if(ps != null){
ps.close();
}
if(con != null){
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}//catch
}//closeと例外の共通処理終了




--------------------------------------------------------------------------------
ところで、MySQLのJDBCドライバのJavaDocはどこで読めますか?mysql.comのリンクをざっと探したけど見つけられなかった・・・
--------------------------------------------------------------------------------

あまりおっしゃってることが理解できません。
すいません。大分初心者なもので.....
sawat
大ベテラン
会議室デビュー日: 2006/08/02
投稿数: 112
投稿日時: 2008-10-02 11:42
SQLExceptionはネットワークの切断など、重複以外の要因でも発生します。
現象を切り分けるにはSQLExceptionのgetErrorCodeメソッドを使う必要があります。
Java僧
ぬし
会議室デビュー日: 2003/11/06
投稿数: 261
投稿日時: 2008-10-02 12:19
>sawatさん

一般的にはそうですね。
でも「MySQLIntegrityConstraintViolationException」はSQLExceptionのサブクラスではないのでしょうか?
それを調べようと思ってJavadocを探していたのですが。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2008-10-02 12:31
引用:

Java僧さんの書き込み (2008-10-02 09:49) より:
ところで、MySQLのJDBCドライバのJavaDocはどこで読めますか?mysql.comのリンクをざっと探したけど見つけられなかった・・・


24.4. MySQL Connector/J(mysql.com)

#お望みの品かどうかは分からないけど...

追記:
javadocね。上述のサイトはちがうわ。
「mysql jdbc javadoc」の検索で、
http://www.docjar.com/docs/api/com/mysql/jdbc/overview-summary.html
が引っ掛かった程度



[ メッセージ編集済み 編集者: かずくん 編集日時 2008-10-02 12:38 ]

スキルアップ/キャリアアップ(JOB@IT)