如何找到控制MySQL异常

时间:2016-08-18 10:50:59

标签: java mysql

基本上我在带有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);
    }
}

4 个答案:

答案 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)

兄弟,我想在这里帮忙。看到我总是用php,java ..etc做验证,我会解释清楚。您只需编写一个查询(“选择*来自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 

    }
}