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

如何获得预编译sql中问号的数据类型?
比如,我有一条预编译sql语句 select * from user u where u.id<? and u.name=?
怎么才能获得这两个问号的数据类型呢?
按照文档上的说法,我写了如下代码:
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?generateSimpleParameterMetadata=true", "root", "root");
String sql = "select * from user u where u.user_berthday<? and u.user_id<?";
PreparedStatement ps = conn.prepareStatement(sql);
ParameterMetaData pmd = ps.getParameterMetaData();
int count = pmd.getParameterCount();
for (int i = 0; i < count; i++) {
System.out.println(pmd.getParameterTypeName(1));
}
按照文档上的说法,那应该答应date和int类型,但事实上,打印的结果全是varchar,换了好多驱动都一样,
oracle的驱动甚至连getParameterTypeName()这个方法都不支持!
求解决啊!!!!!

------解决方案--------------------
这还真是个事,路过!
------解决方案--------------------
com.mysql.jdbc.MysqlParameterMetadata,as of version 5.1.18
Java code
    public String getParameterTypeName(int arg0) throws SQLException {
        if (this.returnSimpleMetadata) {
            checkBounds(arg0);

            return "VARCHAR";
        }

        checkAvailable();

        return (this.metadata.getColumnTypeName(arg0));
    }

------解决方案--------------------
你都还没往里面传参数
怎么去获得参数类型...