小编Joh*_*zen的帖子

创建跨maven测试阶段的临时数据库?

我加入了一个项目,该项目包含大量带有SQL语句的文件,用于创建用于集成测试的数据库.

我想知道如何使用这些文件来创建用于单元测试的数据库(使用java和maven).

我可以为每个单元测试创​​建一个HSQL内存数据库,甚至可以使用spring jdbc嵌入式数据库功能,但是在测试设置中要执行的SQL语句太多,这是不可扩展的.

所以我想在maven测试阶段开始时创建一个临时数据库(加载SQL语句),让单元测试访问这个临时数据库并执行各种操作,然后在maven结束时删除临时数据库测试阶段.

我看过sql-maven-plugin,它允许我进行测试阶段执行,但我不确定如何配置一个可用于所有单元测试的临时数据库.没有服务器可以连接,并且内存数据库不能在多个单元测试中工作(我假设).

一个选项可能是使用唯一的临时文件,例如将JDBC驱动程序URL指定为jdbc:hsqldb:file:/ path/to/temporary/file,但我不确定如何在maven中生成唯一的临时文件.

有关如何做到这一点的任何建议,或者是否有更好的方法?

更新:我决定使用在target/db目录中创建的基于文件的数据库.我使用maven clean插件在运行测试之前删除target/db目录,并使用maven sql插件从脚本创建数据库.

sql junit maven

5
推荐指数
1
解决办法
3518
查看次数

无法浏览H2数据库文件?

我在单元测试中创建了一个H2数据库.该数据库使用以下属性:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close">
  <property name="driverClassName" value="org.h2.Driver"/>
  <property name="url" value="jdbc:h2:file:target/db/testdb"/>
  <property name="username" value="sa"/>
  <property name="password" value=""/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我正在使用com.h2database.h2jar文件的1.3.166版本.

当我运行我的测试时,我看到在target/db目录中创建的数据库,并且testdb.h2.db存在一个文件.我的测试运行并从数据库加载数据.我可以打开target/db/testdb.h2.db文件并查看用于创建数据库的SQL语句.

但是,当我尝试将target/db/testsb.h2.db文件加载到数据库浏览工具(如DBVisualizer)时,我看不到任何表或数据.对于DBVisualizer,我指定H2(嵌入式)模式.

我也尝试了H2控制台,但show tables命令返回一个空的结果集.

我无法看到我做错了什么:数据库文件存在,测试正确运行,但我无法在数据库浏览器中打开此文件.

有什么建议?

h2 dbvisualizer

5
推荐指数
1
解决办法
2万
查看次数

Android:在ContentProvider中处理非常大的数据集以避免内存限制

我使用a ContentProvider来查询数据库并返回一个Cursor用于CursorLoader:

ItemsActivity:

public class ItemsActivity extends SherlockActivity implements LoaderCallbacks<Cursor> {

    @Override
    public void onCreate(Bundle savedInstance) {
        ....
        getSupportLoaderManager().initLoader(LOADER_ID, null, this);
        ...
    }

    @Override
    public Loader<Cursor> onCreateLoader(int loaderId, Bundle bundle) {
        return new CursorLoader(getApplicationContext(), itemsListUri, ...); 
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

ItemsContentProvider:

public Cursor query(Uri uri, String[] projection, String selection, ...) {
    SqliteQueryBuilder builder = new SqliteQueryBuilder();
    builder.setTables(ItemsTable.NAME);
    return builder.query(db, projection, selection, ...);
}
Run Code Online (Sandbox Code Playgroud)

活动有一个ListView,我使用CursorAdapter(通过更新LoaderCallbacks)来表示光标内的数据.

这工作正常,直到我需要查找大型数据集中的项目(例如,超过30,000行).观察日志我发现查找超出了内存限制,并且从结果游标中删除了一些行.

我的问题:在使用这样的游标时,处理非常大的数据集的最佳方法是什么?

我目前的解决方案是将SQLite查询ContentProvider拆分为具有偏移和限制的查询序列,然后使用MergeCursor …

sqlite android android-contentprovider android-cursorloader

2
推荐指数
1
解决办法
6946
查看次数