基本上我在带有MySql DB的java ee中有一个Web应用程序,在我的MySQl中我有一个唯一的ID列。现在,如果用户输入了已存在的ID,则会弹出重复条目' UserID'对于key' UID_UNIQUE',我发现错误代码612用于mysql中的Duplicate name。所以我的问题是如何获取Mysql错误代码以及如何通过已经使用ID的用户 这是我的用于将用户信息插入我的数据库的java代码
public void getData(String FName,String LName,
HttpServletRequest request, HttpServletResponse response){
PrintWriter out = null;
try{
int affectedRows;
out = response.getWriter();
String query = "INSERT INTO `duckdb`.`userstb` (`UFN`, `ULN`, `UID`) VALUES ('"+FName+"', '"+LName+"', '"+Uname+"')";
affectedRows = st.executeUpdate(query);
if (affectedRows == 0) {
throw new SQLException("Creating user failed, no rows affected.");
}
}catch(Exception ex){
System.out.println(ex);
}
}
答案 0 :(得分:0)
你应该抓住SQLIntegrityViolationException
,而不仅仅是Exception
。这就是它的用途。
你当然应该不只解析错误信息。例如,它可能是另一种语言。
至少你应该抓住SQLException
并检查SQL error code,尽管这将是特定于供应商的。
答案 1 :(得分:-1)
通常我们使用next()。 with(while或if)to子句并使用Java端简单地检查此查询是否返回任何结果:
如:
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps =
con.prepareStatement
("SELECT questid FROM completedQuests WHERE characterid = ? AND questid = ?");
ps.setInt (1, characterId);
ps.setInt (2, questId);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
// Quest already completed
} else {
// Quest not completed yet
}
答案 2 :(得分:-1)
不完全符合我的预期,但它解决了我的问题,认为其他人也可以使用它。
System.out.println(ex);
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
ex.printStackTrace(pw);
String error = sw.toString();
if(error.indexOf("Duplicate Entry") != -1)
out.print(error);
System.out.println("PW: " + error);
答案 3 :(得分:-1)
Statement stmt = con.createStatement();
String SQL = "SELECT * From tableName WHERE FName = ' "+FName+" ' ";
ResultSet rs = stmt.executeQuery(SQL);
if(rs.next()){
System.out.println("the Name is already registered in DB ");
}else
{
//write the query to register the name
}
}