SQL:在ResultSet中设置MaxFieldSize

时间:2016-09-06 02:33:41

标签: java mysql sql jdbc resultset

我正在尝试将setMaxFieldSize(<int>)设置为将列值截断为512字节,但是当我遍历ResultSet时,它似乎对返回的行没有任何影响。此外,我可以让setMaxRows()工作。

'sample'表有8行,通过设置setMaxRows(1),我可以在迭代ResultSet时将返回的行限制为1(只是无法得到setMaxFieldSize() } 上班)。另外,我无法修改基础表。

这是我的SQL(理想情况下,我不想编辑SQL查询本身,而是希望使用上面列出的ResultSet函数截断字符串&gt; 512字节(1个字符= 1个字节)):

SELECT `col1`, `col2`, `col3`, `col4`, `col5`, `col6`, `col7`, `col8`, `col9` 
FROM `sample` LIMIT 1000

col1 - col7 are of Type LONGVARCHAR (-1: java.sql.Types)
col8 is of Type CHAR (1: java.sql.Types)
col9 is of Type VARCHAR (12: java.sql.Types)

根据Java文档,上述字段应该被截断,因为它们在支持的字段列表中:

  

此限制仅适用于BINARY,VARBINARY,LONGVARBINARY,CHAR,   VARCHAR,NCHAR,NVARCHAR,LONGNVARCHAR和LONGVARCHAR字段。

这是我的代码(“java.sql.Connection connection”作为函数的参数传入):

Statement stmt = null;
ResultSet resultSet = null;
try {
    stmt = connection.createStatement();
    stmt.setMaxFieldSize(4);
    stmt.setMaxRows(1);
    resultSet = stmt.executeQuery(sql);
    System.out.println(stmt.getMaxFieldSize() + " MaxFS");

    while (resultSet.next()) {
        for(int i = 1; i <= resultSet.getMetaData().getColumnCount(); i++) {
            System.out.println("ROW_DETAILS: " + resultSet.getMetaData().getColumnName(i) + ", " + resultSet.getMetaData().getColumnType(i) + ", " + 
                                resultSet.getString(i).length() + ", " + resultSet.getString(i));
        }
    }
}
....
....

输出(请注意col8和col9的类型不同,文字较少):

ROW_DETAILS: col1, -1, 2664, <text>
ROW_DETAILS: col2, -1, 2664, <text>
ROW_DETAILS: col3, -1, 2664, <text>
ROW_DETAILS: col4, -1, 2664, <text>
ROW_DETAILS: col5, -1, 2664, <text>
ROW_DETAILS: col6, -1, 2664, <text>
ROW_DETAILS: col7, -1, 2664, <text>
ROW_DETAILS: col8, 1, 255, <text>
ROW_DETAILS: col9, 12, 550, <text>

我的目的是使用setMaxFieldSize将行输出中返回的上述每个列值的长度截断为512,但不幸的是,长度始终设置为原始值。

0 个答案:

没有答案