Java 如何获取所有数据而不使用;“超出范围”;SQL异常?
我正在从数据库中提取数据,得到Java 如何获取所有数据而不使用;“超出范围”;SQL异常?,java,sql,Java,Sql,我正在从数据库中提取数据,得到com.microsoft.sqlserver.jdbc.SQLServerException:索引15超出范围。在运行时期间 我的连接类按如下方式执行: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.ResultSet; import java.sql.Statement; public class
com.microsoft.sqlserver.jdbc.SQLServerException:索引15超出范围。
在运行时
期间
我的连接类按如下方式执行:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
public class SQLConnection {
private String type = "jdbc:sqlserver:";
private String url = "//thinkThisIsAnActualAddress;";
private String database = "database=SomeDatabase;";
private String user = "user=NotAUser;";
private String password = "password=NotAPass;";
private String connectionURL;
private final String query = "SELECT FIELD1, FIELD2, FIELD3, FIELD4, FIELD4, FIELD5"
+ " FIELD6, FIELD7, FIELD8, FIELD9, FIELD10, FIELD11,"
+ " FIELD12, FIELD13, FIELD14"
+ " FROM TABLE_OWNER.TABLE_FIELDS_DTL"
+ " LEFT JOIN TABLE_OWNER2.TABLE_FIELDS_DTL2"
+ " ON TABLE_OWNER.TABLE_FIELDS_DTL.SOME_FOREIGN_KEY_SK = TABLE_OWNER2.TABLE_FIELDS_DTL.SOME_FOREIGN_KEY_SK"
+ " WHERE THIS_FIELD = 'X'";
ResultSet resultSet = null;
public String getURL(){
makeString();
return connectionURL;
}
public void makeString(){
connectionURL = type + url + database + user + password;
}
public void connect(){
// Load SQL Server JDBC driver and establish connection.
System.out.print("Dialing the Matrix... ");
try (Connection connection = DriverManager.getConnection(getURL());
Statement statement = connection.createStatement();) {
// Connection message
System.out.println("You are in, Neo...");
resultSet = statement.executeQuery(query);
int i = 1;
while(resultSet.next()){
System.out.println(resultSet.getString(i) + " ");
i++;
}
} catch (SQLException e) {
System.out.println();
e.printStackTrace();
}
}
}
虽然我理解它发生的原因,但在这个While
循环中:
int i = 1;
while(resultSet.next()){
System.out.println(resultSet.getString(i) + " ");
i++;
}
我不太明白如何在没有它的情况下获取数据,因为数据库中有14个字段,以及与该查询匹配的任意行数,具体取决于日期。一个简单的“修复”方法是将行while(resultSet.next())
替换为while(resultSet.next()&&i<14)
,这将修复异常,但无法实现我要寻找的结果,即能够遍历与查询匹配的所有行
这里我缺少什么?如果你想阅读每一行,你可以使用
while(rs.next())
循环,它将为每一行触发
如果要对单个行读取每一列,则应使用.getString(col)
或.getInt(col)
或.getObject(col,LocalDateTime.class)
或getWhateverYouWant方法,为col
参数传递一个基于1的索引或要获取的列的名称
如果两者都需要,那么,您必须获取元数据以了解有多少列,或者,您只需检查自己的查询并硬编码数字。因此,对于特定代码,如果要打印每行中的每一列:
while (rs.next()) {
for (int i = 1; i <= 14; i++) System.out.println(rs.getString(i));
}
while(rs.next()){
对于(It i=1;I我不理解你到底问什么,它是否与SQL有关或与循环有关。如果与SQL结果相关,它是正确的,并且将它保存在结果集中并能够迭代它。因此,您可能会要求循环,如果是这样的话,考虑检查我认为它与SQL有关的链接,我想我对数据ST如何感到困惑。结构在while循环下运行。我正在检查文档,似乎这是正确的答案:。我现在就检查一下。太好了!希望你找到你想要的答案。看看你正在打印的输出。你只得到第一条记录的第一个字段,第二条记录的第二个字段d记录等等。不用担心,卢克,请发送疫苗;-)哈哈,这正是我昨天在弄清楚发生了什么后编写的代码。无论如何,谢谢你在这里回答,你提供了更多的深度,我真的很感激,所以我接受它作为答案。非常感谢!