dbUnit对mssqlserver自增长主键的处理

server|sqlserver

 
package com.sourceware.test;

/*******************************************************************************
 * Copyright (c) 2000, 2005 ZhongKe Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.source-ware.com/
 *
 * Contributors:
 *    ZhongKe Corporation - initial API and implementation
 *******************************************************************************/

import java.io.InputStream;
import java.sql.Connection;

import org.dbunit.DatabaseTestCase;
import org.dbunit.database.DatabaseConfig;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.IDatabaseConnection;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.xml.FlatXmlDataSet;
import org.dbunit.operation.DatabaseOperation;

import com.sourceware.sms.platform.dao.SMSDAO;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.ApplicationContext;
import javax.sql.DataSource;

/**
 *
 * <p>标题: 消息服务</p>
 *
 * <p>描述: 消息服务平台</p>
 *
 * <p>版权: 宁波中科信息产业有限公司 Copyright (c) 2004</p>
 *
 * <p>公司: 宁波中科信息产业有限公司</p>
 *
 * @author 吴锋彬(woowind@sina.com)
 * @version 1.0
 */
public class BaseDatabaseTestCase
    extends DatabaseTestCase {
  static ApplicationContext appContext;
  private final static String batchID =
      "http://www.dbunit.org/features/batchedStatements";
  static DataSource ds;
 
  static {
    appContext =
        new ClassPathXmlApplicationContext("xml/sms-platform-context.xml");
     ds = (DataSource) appContext.getBean("dataSource");

  }

  protected void setUp() throws Exception {
    super.setUp();
  }

  protected void tearDown() throws Exception {
    super.tearDown();
    this.getConnection().close();
  }

  /* (non-Javadoc)
   * @see org.dbunit.DatabaseTestCase#getConnection()
   */
  protected IDatabaseConnection getConnection() throws Exception {

    IDatabaseConnection iDataBaseConnection = new DatabaseConnection(ds.
        getConnection());
    DatabaseConfig config = iDataBaseConnection.getConfig();

    //Enable Batched statements
    if (!config.getFeature(batchID)) {
      config.setFeature(batchID, true);
    }

    return iDataBaseConnection;

  }

  /* (non-Javadoc)
   * @see org.dbunit.DatabaseTestCase#getDataSet()
   */
  protected IDataSet getDataSet() throws Exception {
    InputStream is = this.getClass().getClassLoader().getResourceAsStream(
        "dataset/fmsDomain.xml");
    return new FlatXmlDataSet(is);
  }

  protected DatabaseOperation getSetUpOperation() throws Exception {
    return org.dbunit.ext.mssql.InsertIdentityOperation.INSERT;

  }

  protected DatabaseOperation getTearDownOperation() throws Exception {
    return  org.dbunit.ext.mssql.InsertIdentityOperation.CLEAN_INSERT;
  }

}

时间: 2024-11-03 20:47:47

dbUnit对mssqlserver自增长主键的处理的相关文章

MyBatis获取自增长主键值的两种方式及源码浅析

昨天在做项目的时候遇到了一个坑,没错,就是获取MyBatis自增长主键值的坑.因为之前一直用ibatis,所以惯性的用了ibatis的写法,结果返回的值一直是1(受影响的行数).于是去翻了翻MyBatis的源码,发现它把主键值放到了参数对象上,获取主键值需要用参数对象去get主键值.真是坑.我先把解决办法放出来,然后再接着分析MyBatis的源码是怎么做的. 环境: 数据库MySql.User表,主键设置为自增长. CREATE TABLE `user` ( `id` INT(11) NOT N

mysql 插入数据失败防止自增长主键增长的方法

mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次AUTO_INCREMENT就不是顺序的了. innodb的自增是缓存在内存字典中的,分配方式是先预留,然后再

Mysql设置自增长主键的初始值

alter table table_name auto_increment=n; 注意n只能大于已有的auto_increment的整数值,小于的值无效. show table status like 'table_name' 可以看到auto_increment这一列是表现有的值. 步进值没法改变.只能通过下面提到last_inset_id()函数变通使用 Mysql可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1,如果想把它的初始值设置为1000,比较笨的办法是先插

mysql修改自增长主键int类型为char类型示例_Mysql

原来有一个表中的主键是int自增长类型, 因为业务变化需要把int改成char类型的主键.同时因为原来的表中已经存在了数据,不能删除表重建,只能修改表结构. 首先去掉自增长属性: alter table table_name  change indexid indexid int; 然后去掉主键: ALTER TABLE table_name   DROP   primary key; 修改表结构为char类型: alter table table_name change indexid ind

Mysql设置自增长主键的起始值

Mysql可以使用AUTO_INCREMENT来设定主键的值为自增长的,其默认值是1,如果想把它的初始值设置为1000,比较笨的办法是先插入一条记录并指定主键的值为999,然后delete改行记录,例如:  代码如下 复制代码 insert into test(pk) values(999); delete from test where pk = 999; 更好的方法是使用alter的方法来直接修改,例如:  代码如下 复制代码 alter table test AUTO_INCREMENT

mybatis数据表(mysql)的主键非自增长,如何插入数据(需插入主键)实现主键自增长?

问题描述 mybatis数据表(mysql)的主键非自增长,如何插入数据(需插入主键)实现主键自增长? 举例来说就是有表person,person有id(mysql数据库,主键,非自增),和name,pswd三个字段.如果是自增的情况,我们通常是这样处理 insert into person(name,pswd) values(#{name},#{pswd}) 这种情况不许要插入主键,因为person表主键是自增长的.但如果主键不是增长的情况呢?如何处理.主键不是自增长就应该必须插入主键. 在步

oracle主键的设置方法

 主键: 1.主键约束: 一个表只能有一个主键约束.主键可以是单个字段,也可以是多个字段.无论是哪种情况,其所有字段都是NOT NULL. 2.Unique约束:一个表可以有多个Unique约束,Unique的字段可以为NULL. 3.主键与Unique:不同点在于一个表只能有一个主键约束,但是可以有多个Unique约束:主键所有字段都是not null,unique可以是 null:相同点在于都能保证唯一性. 4.主键.Unique与索引:主键约束与Unique约束默认会成为索引.当主键和Un

MyBatis魔法堂:Insert操作详解(返回主键、批量插入)

一.前言      数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅.   二. insert元素 属性详解   其属性如下:    parameterType ,入参的全限定类名或类型别名    keyColumn ,设置数据表自动生成的主键名.对特定数据库(如PostgreSQL),若自动生成的主键不是第一个字段则必须设置    keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元

mysql建立自增主键的插入,及自动插入当前时间

MYSQL里用这两个字段,几乎都是必须的. 以前都是自动建立的,现在手把手建立的时候,就要找资料来搞定了. 参考URL: http://blog.csdn.net/Weicleer/article/details/47608289 http://www.cnblogs.com/lhj588/p/4245719.html ============================== 表建立好之后,如何插入值,也是一个问题. ============================== 当数据表中有