Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取所有数据而不使用;“超出范围”;SQL异常?_Java_Sql - Fatal编程技术网

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记录等等。不用担心,卢克,请发送疫苗;-)哈哈,这正是我昨天在弄清楚发生了什么后编写的代码。无论如何,谢谢你在这里回答,你提供了更多的深度,我真的很感激,所以我接受它作为答案。非常感谢!