Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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结果集异常返回空字段_Java_Jdbc_Resultset - Fatal编程技术网

Java结果集异常返回空字段

Java结果集异常返回空字段,java,jdbc,resultset,Java,Jdbc,Resultset,我正在努力处理一个resultset,它在通常应该有值的地方显示空字段(我在Oracle SQL dev中测试了该查询)。这很奇怪,因为我的一个字段(“openDate”->rs.getDate(5))被正确获取,而其他字段则没有。这是我的密码: public void refreshData() { try { Globals.itrackDatabase.connect(); ResultSet rs;

我正在努力处理一个resultset,它在通常应该有值的地方显示空字段(我在Oracle SQL dev中测试了该查询)。这很奇怪,因为我的一个字段(“openDate”->rs.getDate(5))被正确获取,而其他字段则没有。这是我的密码:

public void refreshData() {

        try {

            Globals.itrackDatabase.connect();

            ResultSet rs;
            rs = Globals.itrackDatabase.execQuery(Globals.caseRankingQuery + " WHERE case_num = '19816641'");

//          ResultSetMetaData metaData = rs.getMetaData();
//            int numberOfColumns = metaData.getColumnCount();

            while (rs.next()) {

                System.out.println(rs.getString(1));
                Case caseObj = new Case(rs.getString(1), rs.getString(2), rs.getString(3), 
                        rs.getString(4), rs.getDate(5), rs.getString(6), rs.getString(7), 
                        rs.getString(8), null, rs.getString(9), rs.getString(10), 0);

                Globals.caseList.add(caseObj);
            }

            for (int i = 0; i <= Globals.caseList.size()-1; i++) {

                data[i][1] = Globals.caseList.get(i).id;
                data[i][2] = Globals.caseList.get(i).service;
                data[i][3] = Globals.caseList.get(i).module;
                data[i][4] = Globals.caseList.get(i).summary;
                data[i][5] = Globals.caseList.get(i).openDate;
                data[i][6] = Globals.caseList.get(i).hub;
                data[i][7] = Globals.caseList.get(i).endUser;
                data[i][8] = Globals.caseList.get(i).endUserGroup;
                data[i][9] = Globals.caseList.get(i).assignationDate;
                data[i][10] = Globals.caseList.get(i).timeSpent;
                data[i][11] = Globals.caseList.get(i).assignee;
                data[i][12] = Globals.caseList.get(i).assigneeBacklog;
            }

            Globals.itrackDatabase.disconnect();
            System.out.println(Arrays.deepToString(data));
            this.fireTableDataChanged();

        } catch (SQLException e) {
            System.out.println("Query failed.");
            e.printStackTrace();
        }
    }
案例对象构造函数:

public Case(String id, String service, String module, String summary, 
                Date openDate, String hub, String endUser, String endUserGroup, 
                Date assignationDate, String timeSpent, String assignee, int assigneeBacklog) {

        this.id = id;
        this.service = service;
        this.module = module;
        this.summary = summary;
        this.openDate = openDate;
        this.hub = hub;
        this.endUser = endUser;
        this.endUserGroup = endUserGroup;
        this.endUserGroup = endUserGroup;
        this.assignationDate = assignationDate;
        this.timeSpent = timeSpent;
        this.assignee = assignee;
        this.assigneeBacklog = assigneeBacklog;
    }
查询是:

SELECT case_num, service, module, summary, open_date, case_hub, end_user, end_user_site, end_user_dept, time_spent, assignee 
FROM CASE 
WHERE case_num = '19816641';
我的控制台调试:

-------- Oracle JDBC Connection Testing ------
Connected to Itrack database.
Executing: SELECT case_num, service, module, summary, open_date, case_hub, end_user, end_user_site, end_user_dept, time_spent, assignee FROM CASE WHERE case_num = '19816641'

[[null, , , null, , 2015-07-19, , , , null, , , 0]]

好的,找到了:我必须使用resultset中的ascii流getter,然后创建以下函数将其更改为字符串:

public String getStringFromInputStream(InputStream is) {

        InputStreamReader in = new InputStreamReader(is);
        String str = "";

        try {
            while (in.ready()) {
                str = str + (char) in.read();  
            }
            return str;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
您可以这样称呼它:

getStringFromInputStream(rs.getAsciiStream(1))

希望这能有所帮助。

您传递给方法的查询在哪里?请显示
Case
的构造函数。我认为它与Case对象无关,因为我首先调试了我的resultset(我用查询和Case构造函数更新了帖子)。表名
Case
也是一个SQL关键字,也许您需要在java中将其引用为
“CASE”
。也许CASE WHERE是一个合法的条件表达式。@JoopEggen刚刚试过,仍然是空字段
getStringFromInputStream(rs.getAsciiStream(1))