这是我的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块,然后我只能捕获整个错误但我不知道哪个值违反了约束。
简而言之,如果用户的数据违反了名称的约束,我想显示:"该用户名已经存在"。或者,如果它只违反电子邮件的约束:"该电子邮件已经存在"
答案 0 :(得分:0)
如果在异常类型为SQLException时调用getNextException,则会从Postgres获取实际描述错误的消息。
catch (SQLException e) {
String nextExceptionMessage = e.getNextException().getMessage();
System.err.println(
"Could not save the record:" + nextExceptionMessage);
flag = false;
}