任何人都可以建议我在这里做错了什么,尝试在控制台中打印 SQL 查询输出,但收到错误“java.sql.SQLException:无效的列索引”。
import java.io.*;
import java.sql.*;
public class RetrieveFile {
public static void main(String args[]) throws Exception {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@123.43.23.43:8080/orcl", "Test", "*****");
PreparedStatement ps = con.prepareStatement("select * from MSG where MSD='1234'");
ResultSet rs = ps.executeQuery();
// rs.next();//now on 1st row
while (rs.next()) {
int numberOfColumns = 0;
for (int column = 1; column >= numberOfColumns; column++) {
if (column > 1)
System.out.print(", ");
System.out.print(rs.getString(column));
}
}
con.close();
// System.out.println("success" + (rs.getString(1)));
} catch (Exception e) {
e.printStackTrace();
}
}
}
我收到了部分响应,但最终收到以下错误。
ERROR:
null, 1234, 389, OUR, NOW, USD, 0, 0, FR1, wert, USD, 0, null, 0, 0, null, DR, null, null, 0, 0, null, null, null, null, null, null, null, null, null, 0, 2, 2019-06-11 00:00:00.0, null, null, null, null, null, null, null, java.sql.SQLException: Invalid column index at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146) at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:379) at RetrieveFile.main(RetrieveFile.java:20) Picked up JAVA_TOOL_OPTIONS: -Duser.home=C:\Users\45060849
请在输出中包含MSG的表结构 提前致谢。
最佳答案
如果您既不知道列数,也不知道它们的数据类型,则必须通过 ResultSetMetaData
检查它们。
下面的示例在一个单独的方法中执行此操作,该方法尚未考虑所有可能的 SQL 数据类型,但考虑了一些非常常见的数据类型。
public static void main(String args[]) throws Exception {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@123.43.23.43:8080/orcl", "Test", "*****");
PreparedStatement ps = con.prepareStatement("select * from MSG where MSD='1234'");
ResultSet rs = ps.executeQuery();
try {
printResultColumns(rs);
} catch (SQLException e) {
System.err.println(e.getMessage());
}
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
您基本上请求列的数量,将其用作迭代边框,然后您可以检查列i
的类型。这是必需的,因为不同的数据类型有不同的方法。
public static void printResultColumns(ResultSet resultSet) throws SQLException {
ResultSetMetaData rsmd = resultSet.getMetaData();
int columnCount = rsmd.getColumnCount();
while (resultSet.next()) {
// you get a single result row in here, not the entire ResultSet
for (int i = 1; i <= columnCount; i++) {
switch (rsmd.getColumnType(i)) {
case Types.VARCHAR:
case Types.LONGVARCHAR:
case Types.CHAR:
System.out.println(resultSet.getString(i));
break;
case Types.DOUBLE:
System.out.println(resultSet.getDouble(i));
break;
case Types.INTEGER:
System.out.println(resultSet.getInt(i));
break;
case Types.DATE:
System.out.println(resultSet.getDate(i).toString());
break;
case Types.TIMESTAMP:
System.out.println(resultSet.getTimestamp(i).toString());
break;
case Types.BOOLEAN:
System.out.println(resultSet.getBoolean(i));
break;
case Types.DECIMAL:
case Types.NUMERIC:
System.out.println(resultSet.getBigDecimal(i));
break;
default:
System.out.println("This column type ("
+ rsmd.getColumnTypeName(i)
+ ") is currently not supported in method \"printResultColumns\""
+ ".\nAdd it as case there.");
}
}
}
}
关于java - 通过java执行SQL查询时出现错误 "java.sql.SQLException: Invalid column index",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57178320/