再次感谢这篇博客的作者。有的读者会问你上一篇写的是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);
}
}
}