日期:2014-05-20  浏览次数:20688 次

java程序 怪问题
Java code


public static void main(String[] args) throws Exception{   
    String driverClassName="com.ibm.db2.jcc.DB2Driver";   
    String url="jdbc:db2://localhost:50000/TESTDB";   
    Class.forName(driverClassName);   
    Connection conn=DriverManager.getConnection(url, "test", "test");   
    String sql="select count(*) from T_USER where USER_ID =?";   
    PreparedStatement stmt=conn.prepareStatement(sql);   
    stmt.setString(1, "1234");   
    ResultSet rs=stmt.executeQuery();   
    while(rs.next()){   
        System.out.println(rs.getObject(1));   
    }   
    stmt.close();   
    conn.close();   
}  
USER_ID定义为3位,如果stmt.setString(1, "123"); 就不会出问题。 
或者直接写到SQL里面:String sql="select count(*) from T_USER where USER_ID ='1234'"; 也不会出问题。 
但是放在程序里就出问题?

我不想用先判断在截取的方法.
还有其他的办法吗?









------解决方案--------------------
没什么问题啊
jdbc报错是对的啊,这是你的数据错误,为什么一定要jdbc放弃处理你的错误???太奇怪的要求了

至于你说的为什么写sql和预处理语句处理结果不一样
这个你应该好好去看点基础书籍了
标准sql语句由服务器处理,这个不谈
预处理语句,分为3步
1.提交预编译sql,就是带有参数列表(?)的sql语句,由服务器判断是否是被缓存的指令集
2.提交参数列表,检查所有参数的有效性及安全性
3.执行缓存的指令集

至于为什么要用预编译语句来跑sql,一个最简单的安全考量就是防止sql注入,谁也不想留着sql语句的注入漏洞吧?