【发布时间】:2016-09-27 19:31:35
【问题描述】:
我正在执行这样的句子。
fld1 VARCHAR(5);
Select * from MyTable where fld1 = 'HELLOWORLD';
表中只有 fld1='HELLO',由于某种原因,结果集给我的结果行是 fld1='HELLO'。
如果 fld1 是 VARCHAR 5,显然是在削减 'HELLOWORLD' 的值,为什么查询不按字面意思获取所有值?
我的方法:
public void Consulta(){
COB_ConexionModulo connPool = null;
COB_ResultadoConexion rc = null;
Connection con = null;
StringBuffer sbQry = new StringBuffer();
PreparedStatement pstm = null;
ResultSet rs = null;
COB_Utils util = new COB_Utils();
try {
connPool = COB_ConexionModulo.instance();
rc = connPool.getConnection();
con = rc.getConexion();
if(!(con == null)){
sbQry = new StringBuffer("SELECT NAME FROM TEST.MYTABLE WHERE NAME = ?");
pstm = con.prepareStatement(sbQry.toString());
pstm.setString(1, "HELLOWORLD");
util.setInicioEjecucion();
rs = pstm.executeQuery();
util.imprimeTiempoEjecucion(MSINF,sbQry.toString());
while (rs.next()){
System.err.println(rs.getString("NAME"));
}
} else {
logger.info(MSINF + "No hay conexion");
}
} catch (Exception e) {
logger.error(MSERR + "Consulta()_" + e);
}finally {
try {if (con != null) {con.close();con = null;}} catch (SQLException sqle) {con = null;}
}
}
Images in order: 1.- Table Script 2.- Table Values 3.- Query Result.
【问题讨论】:
-
你所描述的不应该发生(事实上,当我尝试使用 SQL 重现它时它不会发生)。您可能想要创建并发布一个完整 最小示例来演示此行为,并提及您的 DB2 版本和平台。我怀疑你的 Java 代码有错误。
-
你使用的是什么 JDBC 驱动程序?
-
我正在使用 com.ibm.as400.access.AS400JDBCDriver
-
驱动程序似乎有缺陷。如果绑定参数值被截断,标准 DB2 JCC 驱动程序将引发异常。 @CRPence 关于原因和解决方案是正确的。
-
显然是的,已经使用 2 个不同的 Web 服务器 IBM WebSphere Application Server、6.0.2.37 和 WebLogic Server 版本:12.2.1.0.0 使用相同的驱动程序进行了测试,结果相同。
标签: java db2 ibm-midrange weblogic12c db2-400