java 在Eclipse中“do while”SQL的正确方法-在SSH连接到MySQL之前工作

z9smfwbn  于 2023-01-24  发布在  Java
关注(0)|答案(2)|浏览(138)
Class.forName("com.mysql.cj.jdbc.Driver");
                    Connection connection = DriverManager.getConnection(
                            "jdbc:mysql://127.0.0.1:3306/wp_dashort", "dashort",
                            "gt9wkk6r1TPnkgrY");

                    PreparedStatement ps = null;

                    ps = connection.prepareStatement(mark_complete);
                    System.out.println("dateset");
                    dateof = dateof + " 00:00";
                    // ps.setString(1, dateof);

                    connection.createStatement();
                    ResultSet rs = ps.executeQuery();

                    Sheet sheet = workbook.createSheet("Security_Completions");
                    org.apache.poi.ss.usermodel.Row rowhead = sheet.createRow((short) 0);
                    System.out.println("Sheet created");
                    rowhead.createCell((short) 0).setCellValue("Column 1");
                    rowhead.createCell((short) 1).setCellValue("Column 2");

                    int size = 0;
                    rs.last();
                    size = rs.getRow();
                    rs.beforeFirst();

                    System.out.println("Number of records =  " + size);

                    // Running thru the ResultSet

                    int index = 0;
                    int r = 0;
                    rs.next();

                    while (r < size) {

                        index = index + 1;
                        Row row = sheet.createRow((short) index);

                        for (int i = 0; i < 1; ++i) {
                            String value = rs.getString(1);
                            row.createCell(i).setCellValue(value);
                            row.createCell(1).setCellValue(StringUtils.left((rs.getString(2)), 16));
                            rs.next();
                        }
                        ++r;
                    }

所以这段代码上周还工作得很好,这周我被迫使用SSH隧道会话连接MySQL服务器。
我得到SQLException“不允许对ResultSet.TYPE_FORWARD_ONLY类型的结果集执行操作”。似乎当我得到最后一行,然后尝试遍历以编写电子表格时,抛出了错误。

kx1ctssn

kx1ctssn1#

默认的ResultSet类型可能因连接类型而异。具体来说,通过JDBC连接到数据库时的默认ResultSet类型可能与通过SSH隧道连接时的不同。
在某些情况下,通过JDBC连接数据库时,默认的ResultSet类型可能设置为forward-only,这意味着游标只能在ResultSet中向前移动,而不能向后移动到前面的行。但通过SSH隧道连接时,默认结果集类型可以不同,并且可以允许在两个方向上滚动结果集。默认的结果集类型也可能取决于所使用的特定JDBC驱动程序。某些驱动程序的默认结果集类型可能为“仅向前”,而其他驱动程序的默认结果集类型可能为“可滚动”。
在使用Statement对象创建ResultSet之前,可以通过调用该对象上的getResultSetType()方法来检查JDBC驱动程序的默认ResultSet类型。
您可以尝试在创建Statement对象时通过传递常量ResultSet.TYPE_SCROLL_INSENSITIVE作为第一个参数来显式设置ResultSet类型。

jjjwad0x

jjjwad0x2#

您可以将外部循环重新设计为do...while样式,使用ResultSet#next()在ResultSet行中前进,使用ResultSet#isLast()知道何时停止。
添加电子表格行的for循环对于每个ResultSet行只运行一次,但是您已经设置为循环通过ResultSet行,因此不需要在那里执行额外的循环。

相关问题