Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何查找控件MySQL异常_Java_Mysql - Fatal编程技术网

Java 如何查找控件MySQL异常

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,

基本上,我在JavaEE中有一个web应用程序和MySql数据库,在我的MySql中有一个ID列,它是唯一的。现在,如果用户输入了一个已经存在于其中的ID,它会弹出键“UID_UNIQUE”的重复条目“UserID”,我发现错误代码612表示mysql中的重复名称。因此,我的问题是如何获取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);
    }
}
通常我们使用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中注册用户名时看到的那样,现在已经有人知道怎么做了吗?