Apache POI系列教程2-2:初学JDBC__第七节(DatabaseMetaData和ParameterMetaData)

本文介绍了如何结合Apache POI和JDBC的ParameterMetaData解决Excel2003数据导入Oracle时出现的串行问题。通过比较参数个数和单元格内容,成功避免了因单元格为空导致的数据串行。博客作者分享了关键代码片段,展示了如何获取数据库元数据和参数元数据,从而进行正确赋值。
摘要由CSDN通过智能技术生成
        再次感谢这篇博客的作者。有的读者会问你上一篇写的是Apache的poi,这一篇写的却是JDBC的ParameterMetaData,你这篇要是写jdbc连接数据库,然后读取excel,可能还和上篇博文相关,但是你这篇博客写的是 JDBC的 ParameterMetaData,和上一篇博文完全不沾边,难道你已经忘记你上篇博客填的坑吗?你不是说这篇要写excel的百万数据的导入导出吗?呵呵,相反,没有这篇博客带来的灵感,我也不能这么快的解决"excel2003数据导入到oracle中出现串行"的问题。用 驱动模式读取excel2003时,遇到了因为excel单元格为空导致数据库中数据串行问题,注意这里是 单元格为空,不是单元格为空字符串,在网上搜了一周,没有看到解决方案,或者解决方案只是猜想,并不可行,我最后看到这篇博客无意中来个灵感,把插入数据库的参数个数和读取到的excel的单元格个数比较,解决了串行问题。有人看吗?没人看我就不往下写了。要代码关注新浪微博"三更子午"并私信。我所有博客所有文章目录: 点击打开链接下面是我看到的博客。
--------------------------------------------------------------------------分割线----------------------------------------------------------------------------------------------------
DatabaseMetaData meta = connection.getMetaData();
通过DatabaseMetaData可以获得数据库相关的信息如:数据库版本、数据库名、数据库厂商信息、是否支持事务、是否支持某种事务隔离级别,是否支持滚动结果集等。
 
ParameterMetaData pmd = preparedStatement.getParameterMetaData();
通过 ParameterMetaData可以获得参数信息
下面通过例子测试ParameterMetaData
public class ParameterMateTest {  
  
    /** 
     * @param args 
     * @throws SQLException  
     */  
    public static void main(String[] args) throws SQLException {  
        // TODO Auto-generated method stub  
        Object[] para=new Object[]{100,"name13",1000};  
  read("select * from T_Users where id<? and name=? and money<?",para);  
    }  
    static void read(String sql,Object[] parame) throws SQLException{  
        Connection conn=null;  
        PreparedStatement ps=null;  
        ResultSet rs=null;  
        try{  
            conn=jdbcUtils.getConnection();  
            ps=conn.prepareStatement(sql);  
            ParameterMetaData pmd=ps.getParameterMetaData();  
            int count=pmd.getParameterCount();//获得参数的数量  
            for(int i=1;i<=count;i++){  
                System.out.println(pmd.getParameterClassName(1));//参数CLASS名字  
                System.out.println(pmd.getParameterType(i));//参数类型  
                System.out.println(pmd.getParameterTypeName(i));//参数类型名字  
                ps.setObject(i, parame[i-1]);//给参数赋值(parame里面的值要和sql里面的占位符一一对应)  
            }  
            rs=ps.executeQuery();         
            while(rs.next()){  
            System.out.println(rs.getObject("name")+"   "+rs.getObject("money"));  
        }  
              
        }  
        finally{  
            jdbcUtils.free(conn, ps, rs);  
        }  
    }  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值