Java 如何查找控件MySQL异常
基本上,我在JavaEE中有一个web应用程序和MySql数据库,在我的MySql中有一个ID列,它是唯一的。现在,如果用户输入了一个已经存在于其中的ID,它会弹出键“UID_UNIQUE”的重复条目“UserID”,我发现错误代码612表示mysql中的重复名称。因此,我的问题是如何获取Mysql错误代码,以及如何传递已经获取ID的用户 下面是我的java代码,用于将用户信息插入数据库Java 如何查找控件MySQL异常,java,mysql,Java,Mysql,基本上,我在JavaEE中有一个web应用程序和MySql数据库,在我的MySql中有一个ID列,它是唯一的。现在,如果用户输入了一个已经存在于其中的ID,它会弹出键“UID_UNIQUE”的重复条目“UserID”,我发现错误代码612表示mysql中的重复名称。因此,我的问题是如何获取Mysql错误代码,以及如何传递已经获取ID的用户 下面是我的java代码,用于将用户信息插入数据库 public void getData(String FName,String LName,
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);
}
}
通常我们使用next()。使用(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
}
不完全是我期望的方式,但它解决了我的问题,认为其他人也可以使用它
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);
兄弟,我想帮你。我总是用php、java等进行验证,我会解释得非常清楚。您只需要编写一个查询(“Select*from userstb,其中FName=”“+FName+””),检查返回的值是否表示FName已经存在,否则表示可以注册该值。这里有一个非常简单的例子
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
}
}
您应该捕获异常,而不仅仅是异常
。这就是它的目的
您当然不应该只解析错误消息。例如,它可以是另一种语言
至少您应该捕获
SQLException
并检查,尽管这将是特定于供应商的。为什么不从UID=user\u input的\u表中用SELECT*执行另一个查询,并检查结果集是否有任何条目?@Blobonat,因为这将浪费时间和空间,并引入计时窗口问题。我认为最好使用try-and-catch来控制异常除了if语句之外,try-and-catch可以非常顺利地调试。通常,我们会进行原子插入,并将随后出现的问题作为异常捕获。您的方式会出现计时窗口问题,而且速度会慢一倍。在这里,您可以获取ID并查看,但我更喜欢使用next()Statement stmt=db.prepareStatement(query,Statement.RETURN\u GENERATED\u key);numero=stmt.executeUpdate();ResultSet rs=stmt.getGeneratedKeys();如果(rs.next()){risultato=rs.getInt(1);}
我想你没有理解这个问题,我问你如何获取MySql错误代码,以及如何将ID传递给用户,就像你在gmail或facebook中注册用户名时看到的那样,现在已经有人知道怎么做了吗?