mar*_*tin 15 database spring imdb h2
我正在使用Spring编写一个Java的小型演示应用程序,它需要访问数据库.它应该在不同的机器上运行,设置一个真正的数据库将是太多的努力.因此我想使用嵌入式的.
DB具有给定的模式(两个表)和一些(非常少的)预定义的条目.我正在寻找一种简单的方法来启动内存数据库,创建表并填充数据.所有这些都应该在初始化Spring上下文时发生.
我的方法是使用H2作为我的数据库,然后使用Spring Batch从csv-或xml-files加载数据.但是我希望可能有更简单的方法来实现这一目标.是否有任何数据库/框架/工具可以开箱即用?
它只需要一些SQL命令来设置我需要的一切.我正在寻找一种在Spring环境中尽可能简单的方法.
使用H2,您可以在数据库URL本身中初始化数据库.示例:您有一个SQL脚本'start.sql',其中包含要初始化的所有脚本.这还可以包括从CSV文件创建表.然后使用表单的数据库URL jdbc:h2:~/temp/test;init=runscript from '~/temp/start.sql'.start.sql看起来像这样(这是我正在研究的一个例子 - 它显示了如何从CSV文件创建表):
create table if not exists location(id int primary key, country varchar,
region varchar, city varchar, postalCode varchar, latitude float, longitude float,
metroCode varchar, areaCode varchar)
as select * from csvread('~/Downloads/GeoLiteCity/GeoLiteCity-Location.csv');
create table if not exists blocks(start long, end long primary key, location int)
as select * from csvread('~/Downloads/GeoLiteCity/GeoLiteCity-Blocks.csv');
create alias if not exists ip2id deterministic as $$
long ip2id(String s) {
String[] x = s.split("\\.");
return (Long.parseLong(x[0]) << 24) + (Long.parseLong(x[1]) << 16) +
(Long.parseLong(x[2]) << 8) + Long.parseLong(x[3]);
} $$;
create alias if not exists id2ip deterministic as $$
String id2ip(long x) {
return (x >> 24) + "." + ((x >> 16) & 255) + "." +
((x >> 8) & 255) + "." + (x & 255);
} $$;
Run Code Online (Sandbox Code Playgroud)