如何检查唯一数据

时间:2014-08-02 21:12:58

标签: sql postgresql

这是我的postgresql用户表

create table users(
    id    serial primary key,
    name  text unique not null,
    email text unique not null,
    password text not null,
)

这是我将用户数据插入users表的代码:

        String insertQuery = "INSERT INTO users (name, email, password) VALUES (?, ? ,?)";
        // Perform insertion.
        try {       
            conn.setAutoCommit(false);
            pstmt = conn.prepareStatement(insertQuery);

            pstmt.setString(1, name);
            pstmt.setString(2, email);
            pstmt.setString(3, pwd);
            int rowCount = pstmt.executeUpdate();

            conn.commit();
            flag = true;
            conn.setAutoCommit(true);
        } catch (SQLException e) {
            //e.printStackTrace();

            System.err.println(
                "There Is Something Wrong. I Don't Know Where. SOS...");
            flag = false;
        } 

因为我设置了名称并且数据库中的电子邮件是唯一的,如何以友好的方式验证用户的数据是否违反了唯一约束?我明白如果没有违规,rowCount将返回1,否则,它将返回2.如果rowCount为2,它将落入catch块,然后我只能捕获整个错误但我不知道哪个值违反了约束。

简而言之,如果用户的数据违反了名称的约束,我想显示:"该用户名已经存在"。或者,如果它只违反电子邮件的约束:"该电子邮件已经存在"

1 个答案:

答案 0 :(得分:0)

如果在异常类型为SQLException时调用getNextException,则会从Postgres获取实际描述错误的消息。

   catch (SQLException e) {
        String nextExceptionMessage = e.getNextException().getMessage();
        System.err.println(
            "Could not save the record:" + nextExceptionMessage);
        flag = false;
    }