java - 代码在第一次执行查询后退出 try 并进入 catch ?

标签 java android sql exception

我是android开发的初学者。这是我的第一个 android studio 应用程序中的注册代码的一部分:代码在第一个执行查询行之后立即进入 catch 状态,并且不执行第二个查询。如果我检查数据库,则会添加用户,但不会添加粉丝。

知道为什么吗?如有任何帮助,我们将不胜感激。

    try {
         Connection con = connectionClass.CONN();
         if (con == null) {
             z = "Error in connection with SQL server";
         } else {
             Statement stmt = con.createStatement();
             String query1 = "INSERT INTO Usertb Values ('" + userid + "', '" + Password + "', '" + 1 + "')";
             stmt.executeQuery(query1);
             String query = "INSERT INTO Fan Values ('" + FirstName + "', '" + LastName + "','" + Age + "', '" + Email + "', '"
                            + null + "', '" + i + "', '" + null + "')";
             rs = stmt.executeQuery(query);
             if (rs.next()) {
                 z = "Sign Up successfull";
                 isSuccess = true;
             }
         }
     } catch (Exception ex) {
         isSuccess = false;
         z = "Exceptions";
     }

最佳答案

必须使用executeUpdate(INSERT/UPDATE)而不是executeQuery。

    String sql =  "INSERT INTO Usertb(userid, passw, n) VALUES (?, PASSWORD(?), ?)";
    try (PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
        stmt.setString(1, userName);
        stmt.setString(2, password);
        stmt.setInt(3, 1);
        int updateCount = stmt.executeUpdate(query1); // 1  when 1 record inserted

        if (updateCount != 0) {
            // If you want to use an autincrement primary key:
            try (ResultSet rsKeys = stm.getGeneratedKeys()) {
                if (rsKeys.next()) {
                    long id = rsKeys.getLong(1);
                }
            }
        }
    } // Closes stmt

此外,使用准备好的语句来防止SQL注入(inject)也非常重要。它还处理字符串中的单引号和反斜杠。

此外,还展示了如何使用 AUTOINCR 字段来检索数据库生成的 key ,例如用于第二个 INSERT。

第二次使用新的PreparedStatement。

密码最好以加密方式存储在数据库中,以防有人窃取数据。你可能会研究一下这个主题。我的解决方案非常简单,寻找种子和其他加密功能。

关于java - 代码在第一次执行查询后退出 try 并进入 catch ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389464/

相关文章:

php - 更新多行mysql

java - Java 如何处理整数下溢和上溢以及如何检查它?

android - 在 Android 上使用 FFmpeg 以错误的速度播放音频

android - MvvmCross ViewPager 不显示在 Activity 中

android - 我如何在不向 android 中的特定号码显示拨号器 Activity 的情况下调用电话?

C# 如何更新datagridview中的数据

SQL 查询 - 如何不包含某些结果

java - 从 array.xml 文件获取字符串列表并将它们解析为 float 组 android 时遇到问题

java - 如何使用 Point 类设置点的位置?

java - 如何在执行 java 代码时省略一些 System.out/logging 语句?