CallableStatement,ResultSet,ResultSetMetaData

CallableStatement是在存储过程调用过程中使用的,方法是prepareCall。当自定义的存储过程包含参数,我们需要在执行前对参数进行设置:

private void setStatement(PreparedStatement stmt, Object... params) throws SQLException { if (params == null) { return; } ParameterMetaData pmd = null; if (!pmdKnownBroken) { pmd = stmt.getParameterMetaData(); if (pmd.getParameterCount() < params.length) { throw new SQLException("Too many parameters: expected " + pmd.getParameterCount() + ", was given " + params.length); } } for (int i = 0; i < params.length; i++) { if (params[i] != null) { stmt.setObject(i + 1, params[i]); } else { // VARCHAR works with many drivers regardless // of the actual column type. Oddly, NULL and // OTHER don't work with Oracle's drivers. int sqlType = Types.VARCHAR; if (!pmdKnownBroken) { try { sqlType = pmd.getParameterType(i + 1); } catch (SQLException e) { pmdKnownBroken = true; } } stmt.setNull(i + 1, sqlType); } } }设置参数用到的类是ParameterMetaData,它的getParameterCount和getParameterType两个方法是很重要的,通常我们在写JDBC时不会想到这两个方法,只是简单的setObject就了事了,在商业项目当中还是需要考虑全面的。

当我们需要将执行之后的数据返回为一个Object[],可以:

rs = cstmt.executeQuery(); rs.next(); objs = toArray(rs);将执行后的ResultSet先使用next方法使指针指向数据库中有数据的第一行,然后就可以将整个ResultSet toArray了。

通常我们要获得一个query返回的记录总数,我们可以使用count(*)来获得,还有一种方法就是:

rs = pstmt.executeQuery(); rs.last(); icount = rs.getRow();先将ResultSet指向last,这时指针即指向了查出数据中的最后一行,然后使用getRow方法来获得最后一行的行编号即为记录总数了。
将ResultSet的一行数据转化为Object[],这时我们要用到ResultSetMetaData这个类的相关方法了:

private Object[] toArray(ResultSet rs) throws SQLException { ResultSetMetaData meta = rs.getMetaData(); int cols = meta.getColumnCount();//返回此ResultSet对象中的列数 Object[] result = new Object[cols]; for (int i = 0; i < cols; i++) { result[i] = rs.getObject(i + 1);//getObject返回的是保存列值得java object } return result; }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值