[英]Proper way to "do while" SQL in Eclipse - worked prior to SSH connection to MySQL
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 隧道 session 连接到 MySQL 服务器。
我收到 SQLException“不允许对 ResultSet.TYPE_FORWARD_ONLY 类型的结果集进行操作”似乎当我获取最后一行然后尝试遍历以编写电子表格时,会抛出错误。
根据连接类型的不同,默认的 ResultSet 类型可能会有所不同。 具体来说,通过 JDBC 连接到数据库时的默认结果集类型可能与通过 SSH 隧道连接时不同。
在某些情况下,通过 JDBC 连接到数据库时的默认 ResultSet 类型可能会设置为 forward-only,这意味着 cursor 只能通过 ResultSet 向前移动而不能向后移动到之前的行。 但是,当通过 SSH 隧道连接时,默认的 ResultSet 类型可能不同,并且可能允许在两个方向上滚动 ResultSet。 默认的 ResultSet 类型还可能取决于所使用的特定 JDBC 驱动程序。 某些驱动程序可能具有默认的 ResultSet 类型 forward-only,而其他驱动程序可能具有默认类型的 scrollable。
在使用它创建结果集之前,您可以通过调用语句 object 上的方法 getResultSetType() 来检查 JDBC 驱动程序的默认结果集类型。
您可以尝试在创建语句 object 时明确设置 ResultSet 类型,方法是将常量 ResultSet.TYPE_SCROLL_INSENSITIVE 作为第一个参数传递。
您可以使用ResultSet#next()
在 ResultSet 行中前进并使用ResultSet#isLast()
知道何时停止,将您的外部循环重新设计为 do...while 样式。
添加电子表格行的for
循环仅在每个 ResultSet 行运行一次,但是您已经设置为循环遍历 ResultSet 行,因此您不需要在那里执行额外的循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.