- 浏览: 156510 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
sucheng2016:
Jboss那边怎么配呢?
Apache+mod_jk+JBoss集成 -
chaolong_wang:
没什么大的用处,没有说到实质性的东西~
使用Ant自动部署Tomcat应用 -
halu126:
好乱
XText简单例子入门 -
iffiffj:
royzs 写道cd /usr/src/redhat/SPEC ...
【原创】解决Piranah中"/sbin/ipvsadm command failed!"问题的过程 -
royzs:
cd /usr/src/redhat/SPECS rpmbu ...
【原创】解决Piranah中"/sbin/ipvsadm command failed!"问题的过程
DBUnit的NoPrimaryKey的解决
- 博客分类:
- 备份
DBUnit中的表如果没有主键那可能会出现NoPrimaryKey的异常,无法导入数据。这种现象特别是在Hibernate/JPA中的多对多关联产生的中间表中出现比较多。
解决的办法是重写DatabaseConfig.PROPERTY_METADATA_HANDLER中的getPrimaryKeys方法,当遇到没有主键的表,就把所有表字段都当成主键。在提供IDatabaseTester是就要把该Handler设置进去。
解决的办法是重写DatabaseConfig.PROPERTY_METADATA_HANDLER中的getPrimaryKeys方法,当遇到没有主键的表,就把所有表字段都当成主键。在提供IDatabaseTester是就要把该Handler设置进去。
package org.iata.ios.test.utils; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.dbunit.IDatabaseTester; import org.dbunit.JdbcDatabaseTester; import org.dbunit.database.DatabaseConfig; import org.dbunit.database.DefaultMetadataHandler; import org.dbunit.database.IDatabaseConnection; import org.h2.tools.SimpleResultSet; import org.h2.tools.SimpleRowSource; public class DBUnitHelper { private static IDatabaseTester tester; private DBUnitHelper() { } private static IDatabaseTester newDatabaseTester() throws Exception { JdbcDatabaseTester jdbcDatabaseTester = new JdbcDatabaseTester( Configuration.getValue("database.connection.driver_class"), Configuration.getValue("database.connection.url"), Configuration.getValue("database.connection.username"), Configuration.getValue("database.connection.password")) { public IDatabaseConnection getConnection() throws Exception { IDatabaseConnection connection = super.getConnection(); connection.getConfig().setProperty(DatabaseConfig.PROPERTY_METADATA_HANDLER, new MyDefaultMetadataHandler()); return connection; } }; return jdbcDatabaseTester; } private static IDatabaseTester getDatabaseTester() throws Exception { if (tester == null) { tester = newDatabaseTester(); } return tester; } public static void executeBeforeOperations(List<DataSetOperation> list) throws Exception { final IDatabaseTester databaseTester = getDatabaseTester(); if (databaseTester != null) { for (DataSetOperation dso : list) { databaseTester.setSetUpOperation(dso.getOperation()); databaseTester.setDataSet(dso.getDataSet()); databaseTester.onSetup(); } } } public static void executeAfterOperations(List<DataSetOperation> list) throws Exception { final IDatabaseTester databaseTester = getDatabaseTester(); if (databaseTester != null) { for (DataSetOperation dso : list) { databaseTester.setTearDownOperation(dso.getOperation()); databaseTester.setDataSet(dso.getDataSet()); databaseTester.onTearDown(); } } } static class MyDefaultMetadataHandler extends DefaultMetadataHandler { public ResultSet getPrimaryKeys(DatabaseMetaData metaData, String schemaName, String tableName) throws SQLException { ResultSet resultSet = super.getPrimaryKeys(metaData, schemaName, tableName); if (resultSet.next()) { resultSet.close(); resultSet = super.getPrimaryKeys(metaData, schemaName, tableName); } else { resultSet.close(); ResultSet pkRS = super.getColumns(metaData, schemaName, tableName); List<Object[]> list = new ArrayList<Object[]>(); SimpleResultSet simpleResultSet = new SimpleResultSet(new MySimpleRowSource(list)); int i = 1; boolean isInit = false; try { while (pkRS.next()) { if (!isInit) { ResultSetMetaData md = pkRS.getMetaData(); simpleResultSet.addColumn("TABLE_CAT", md.getColumnType(1), md.getPrecision(1), md.getScale(1)); simpleResultSet.addColumn("TABLE_SCHEM", md.getColumnType(2), md.getPrecision(2), md.getScale(2)); simpleResultSet.addColumn("TABLE_NAME", md.getColumnType(3), md.getPrecision(3), md.getScale(3)); simpleResultSet.addColumn("COLUMN_NAME", md.getColumnType(4), md.getPrecision(4), md.getScale(4)); simpleResultSet.addColumn("KEY_SEQ", md.getColumnType(5), md.getPrecision(5), md.getScale(5)); simpleResultSet.addColumn("COLUMN_NAME", md.getColumnType(4), md.getPrecision(4), md.getScale(4)); isInit = true; } Object[] objs = new Object[] { pkRS.getString(1), pkRS.getString(2), pkRS.getString(3), pkRS.getString(4), i++, pkRS.getString(4) }; list.add(objs); // String name = resultSet.getString(4); // int sequence = resultSet.getInt(5); // list.add(new PrimaryKeyData(name, sequence)); } } finally { pkRS.close(); } resultSet = simpleResultSet; } return resultSet; } } static class MySimpleRowSource implements SimpleRowSource { List<Object[]> datas = new ArrayList<Object[]>(); int current; public MySimpleRowSource(List<Object[]> datas) { this.datas = datas; current = 0; } public Object[] readRow() throws SQLException { return datas.size() > current ? datas.get(current++) : null; } public void close() { datas.clear(); } public void reset() throws SQLException { current = 0; } } }
发表评论
-
基于字符流命令的内容解释
2013-01-16 14:14 1056基于字符流命令的内容解释 1、概述 我们常常需要解释AS ... -
【Eclipse】Theme插件
2013-01-08 09:57 10981.变量转换 提供了多种样式供选择,可以试试,不错。 插件 ... -
Maven常用插件
2012-08-24 16:10 10619=========Maven Report Plugin=== ... -
使用PHP进行Apache+SVN的权限管理
2012-03-04 16:44 34291、解释SVN权限[web/secure/parse_auth ... -
Hibernate的配置
2012-02-10 15:57 1059###################### ### Q ... -
解决JasperReport在Linux系统下找不到字体的问题
2011-12-31 11:29 110061.异常信息 以JasperReport3.7.6为例: ... -
Maven生命周期与Ant插件
2011-12-18 00:09 1415Maven 对构建生命周期的 ... -
使用CXF调用Webservice
2011-12-07 15:01 24151.添加依赖 <dependency> & ... -
批处理设置ip和dns
2011-09-28 11:15 977批处理设置ip和dns 静态IP @echo off c ... -
JasperServer邮件设置
2011-08-09 22:10 11661、配置【jasperserver/WEB-INF/js.qu ... -
Weblogic JMS Client – java.rmi.UnmarshalException: failed to unmarshal…
2011-08-05 14:34 1063Fix for this error, I need to a ... -
IReport语言设置
2011-08-01 11:38 3747下面是我的IReport语言的设置 Tools->Opt ... -
手动安装 JRE Applet
2011-05-13 00:44 0手动安装 JRE Applet 文章分类:Java编程 如果 ... -
JBOSS AS4 配置数据源
2011-01-30 10:21 928最重要的一句: <use-java-context> ... -
Apache+mod_jk+JBoss集成
2011-01-10 23:28 43101.安装Apache 2.2.x 安装过程略 httpd ... -
LVS小试(RHEL5.4)
2010-08-22 20:50 21911.LVS/NAT 原理: 客户端—>LVS外网IP(V ... -
Windows下搭建SVN服务器
2010-08-21 11:45 16731.下载subversion 选择svn-wi ... -
【转载】Redhat启动服务详解
2010-08-02 09:21 1913acpid 配置文件:/proc/acpi/event ... -
一些有用的东西
2010-07-30 10:01 886Eclipse Proxy -Dorg.eclipse.ecf ... -
[转载]Oracle创建表空间、创建用户以及授权、查看权限
2010-07-14 08:34 1012创建临时表空间 CREATE TEMPORARY TABLES ...
相关推荐
DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类DBUNIT 基类...
最新的最全的dbunit jar包以及入门教程
dbunit-2.4.9 源码 http://www.dbunit.org/apidocs/index.html 代码 API
DBUNIT使用的详细文档
dbunit的jar包,版本2.2
dbunit入门实例 dbunit入门实例 dbunit入门实例 dbunit入门实例
Junit,dbunit单元测试jar包
dbunit开发文档,供需要用dbunit进行开发的人使用
dbunit2.2完全包 数据库单元测试
Dbunit 基本原理就是在跑测试用例运行之前对数据表做用户定义的操作,清空不想要的数据,插入用户自定义的数据,使得该数据表处于用户知道的一种状态。而用户自定义的数据使用项目里的一个 xml 文件来表示。 Xml ...
dbunit-2.2.3..jar dbunit-2.4.2.jar dbunit-2.5.3.jar dbunit-2.7.0.jar 发现每个版本对JDK是有要求的,比如2.7 只能用于JDK1.8版本,所以整理好几个jar包挑选适合自己的
文档是关于DBUnit的ant的使用文档,通俗易懂
一个很好的DBUnit的例子 博文链接:https://virgoooos.iteye.com/blog/186859
直接从http://www.dbunit.org/apidocs/index.html上下载的HTML文件的压缩包。 因为没有做成CHM,所以只要1分就行~
dbunit使用必需Jar包,总共4个必需Jar包
dbunit-2.4.2.jar dbunit 必要的一个jar
dbunit是一个基于junit扩展的数据库测试框架。 更多资源详见: http://blog.csdn.net/fanxiaobin577328725/article/details/51894331 (包含图书各部分和随书源码,还有其它资源的详细下载地址)
用dbunit的两个例子,很不错,有帮助
通过DBUNIT做批量对比测试
从http://www.dbunit.org/apidocs/index.html下载的HTML,然后自己制作的CHM,很辛苦,所以要2分吧~