java - 循环try/catch语句

标签 java sqlite

我正在尝试从数据库中获取两个随机 rowid。一切正常,但我有一种情况,只有一个 rowid。我想在我的 try/catch 上进行循环,直到数据库中出现第二个数字。
我做错了什么?谢谢

public void Kaslaimejo() {
    String sql = "SELECT rowid FROM Zaidejai WHERE Pirmas < 4 ORDER BY random() LIMIT 2";
    Integer value1 = null, value2 = null; 
    Integer judesiukas1 = null, judesiukas2 = null;

    int a = 0;
    int k = 15; // kiek kartu? Reikia infinity padaryti

    for (a = 0; a < 3; a++) {
        try {
            Connection conn = Serveris.connect();
            Statement stmt  = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql)) {
                if (rs.next()) {
                    value1 = rs.getInt("rowid");
                    if (rs.next()) {
                        value2 = rs.getInt("rowid");
                        PreparedStatement buvo = conn.prepareStatement("UPDATE Zaidejai SET Numeriukas = ? WHERE rowid = ?");
                        buvo.setInt(1, i);
                        buvo.setInt(2, value1);
                        int buvolala = buvo.executeUpdate  ();
                        PreparedStatement buvo2 = conn.prepareStatement("UPDATE Zaidejai SET Numeriukas = ? WHERE rowid = ?");
                        buvo2.setInt(1, i);
                        buvo2.setInt(2, value2);
                        int buvolala2 = buvo2.executeUpdate  ();// 
                        i++;
                    }
                System.out.println("Pirmas zaidejas" + value1); // atspausdina 1 random zaideja is duomenu bazes
                System.out.println("Antras zaidejas" + value2); // atspausdina 2 random zaideja is duomenu bazes
            }
        } catch (SQLException e) {
            a--;
            //System.out.println(e.getMessage());
        }
    }
}

现在我的程序循环两次,然后给出SQLException。如何循环我的程序直到没有SQLException

最佳答案

好吧,我试着写下我认为你想做的事情。 您会一直等待,直到有人在数据库中添加了至少两个条目。 您提取两个值,处理它们,然后再等待。

需要注意的几点: 1. 对象比较需要使用.equals()而不是== 2. 您可能希望提供某种方法来打破我编写的无限循环 (while(true))。 3. 小心 null 值。它们可能会产生 NullPointerException。 4. 尝试将代码分解为方法。每个大代码块都可以进入每个自己的方法。

public void Kaslaimejo(){
    String sql = "SELECT rowid FROM Zaidejai WHERE Pirmas < 4 ORDER BY random() LIMIT 2";
    Integer judesiukas1 = null, judesiukas2 = null;


    while(true) {

        List<Integer> values = new ArrayList<>();

        while (values.size() < 2) {
            try (Connection conn = Serveris.connect();
                 Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery(sql)) {
                if( rs.next() ){
                    Integer value = rs.getInt("rowid");
                    values.add(value);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        try( Connection conn = Serveris.connect()) {
            PreparedStatement buvo = conn.prepareStatement("UPDATE Zaidejai SET Numeriukas = ? WHERE rowid = ?");
            buvo.setInt(1, i);
            buvo.setInt(2, values.get(0));
            int buvolala = buvo.executeUpdate  ();
            PreparedStatement buvo2 = conn.prepareStatement("UPDATE Zaidejai SET Numeriukas = ? WHERE rowid = ?");
            buvo2.setInt(1, i);
            buvo2.setInt(2, values.get(1));
            int buvolala2 = buvo2.executeUpdate  ();//
            i++;
        }catch (SQLException e) {
            e.printStackTrace();
        }

        Connection conn = Serveris.connect();

        try {
            PreparedStatement pstmt = conn.prepareStatement("SELECT Pirmas FROM Zaidejai WHERE rowid = ?");
            PreparedStatement pstmt2 = conn.prepareStatement("SELECT Pirmas FROM Zaidejai WHERE rowid = ?");
            pstmt.setInt(1, values.get(0));
            pstmt2.setInt(1, values.get(1));
            ResultSet myrsv = pstmt.executeQuery();
            ResultSet myrsv2 = pstmt2.executeQuery();


            {

                if (myrsv.next()) {
                    judesiukas1 = myrsv.getInt("Pirmas");
                    if (myrsv2.next()) {
                        judesiukas2 = myrsv2.getInt("Pirmas");
                    }

                }
                //System.out.println("Pirmo zaidejo veiksmas" + myrsv.getInt("Pirmas"));
                //System.out.println("Antro zaidejo veiksmas" + myrsv2.getInt("Pirmas"));

            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();

        }

        if (judesiukas1.equals(judesiukas2)) // careful here. NullPointerException may happen.
        {
            try {
                PreparedStatement laim = conn.prepareStatement("UPDATE Zaidejai SET Rezultatas = ? WHERE rowid = ?"); // ble ble update reikia naudoti , o ne insert into. Insert kai sukuriame nauja kazka tik
                PreparedStatement laim2 = conn.prepareStatement("UPDATE Zaidejai SET Rezultatas = ? WHERE rowid = ?");
                laim.setString(1, "Lygiosios");
                laim.setInt(2, values.get(0));
                laim2.setString(1, "Lygiosios");
                laim2.setInt(2, values.get(1));
                int irasyk = laim.executeUpdate  (); // kodel executeupdate, o ne executequery????
                int irasyk2 = laim2.executeUpdate  (); // kodel executeupdate, o ne executequery????
                {


                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.print("Lygiosios");
        } else {

            //  (1) - Rock
            //  (2)  Scissors
            //  (3) - Paper
            switch (values.get(0)){
                case 1:
                    if (judesiukas2 == 2)
                        System.out.print("Zaidejas 1 wins!");

                    else
                        System.out.print("Zaidejas 2 wins!");
                    break;
                case 2:
                    if (judesiukas2 == 3)
                        System.out.print("Zaidejas 1 wins!");
                    else
                        System.out.print("Zaidejas 2 wins!");
                    break;
                case 3:
                    if (judesiukas2 == 1)
                        System.out.print("Zaidejas 1 wins!");
                    else
                        System.out.print("Zaidejas 2 wins!");
                    break;
            }
        }

        try {
            conn.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

关于java - 循环try/catch语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53923829/

相关文章:

java - 自定义二分查找功能无法正常工作

java.sql.SQLException : No suitable driver found for jdbc:microsoft

java - 如何获得 Ivy 的依赖

android - 将房间数据库导出到 json 文件

SQLITE,创建一个临时表然后从中选择

perl - 数百万条目的 SQLite 优化?

java - 如何避免此 PMD 错误 - 字符串文字 "TEST"在此文件中出现 X 次;

java - 如何让 matcher.find while 循环写入文本文件? java

python - Django SQlite 配置

android - 在 fragment 中复制数据库然后在 Android Studio 中使用它