dro*_*del 11 database groovy persistence
Groovy中持久化的一些轻量级选项有哪些?到目前为止,我已经考虑过序列化和XML,但我想要比那些更强大的东西,至少所以我不必每次都重写整个文件.理想情况下,它会:
我打算用它来在一个独立的Groovy脚本的运行之间缓存一些信息.我想回应将集中在SQL和NoSQL数据库.显示此用法的页面的链接将不胜感激.谢谢!
ata*_*lor 17
该H2进程SQL数据库是非常容易使用.这是默认情况下使用的相同数据库引擎grails,但它也很容易在groovy脚本中使用:
@GrabConfig(systemClassLoader=true)
@Grab(group='com.h2database', module='h2', version='1.3.167')
import groovy.sql.Sql
def sql = Sql.newInstance("jdbc:h2:hello", "sa", "sa", "org.h2.Driver")
sql.execute("create table test (id int, value text)")
sql.execute("insert into test values(:id, :value)", [id: 1, value: 'hello'])
println sql.rows("select * from test")
Run Code Online (Sandbox Code Playgroud)
在这种情况下,数据库将保存到一个名为的文件中hello.h2.db
.
另一种选择是jdbm,它提供磁盘支持的持久映射.在内部,它使用Java的序列化.编程接口要简单得多,但它的功能也比完整的SQL db强大得多.不支持并发访问,但它是同步的和线程安全的,这可能是足够的,这取决于您的锁定要求.这是一个简单的例子:
@Grab(group='org.fusesource.jdbm', module='jdbm', version='2.0.1')
import jdbm.*
def recMan = RecordManagerFactory.createRecordManager('hello')
def treeMap = recMan.treeMap("test")
treeMap[1] = 'hello'
treeMap[100] = 'goodbye'
recMan.commit()
println treeMap
Run Code Online (Sandbox Code Playgroud)
这会将地图保存为一组文件.
小智 7
只是使用JDBM进行简单持久化的一个小常规更新.现在支持并发访问.名称已从JDBM4更改为MapDB.
@Grab(group='org.mapdb', module='mapdb', version='0.9.3')
import java.util.concurrent.ConcurrentNavigableMap
import org.mapdb.*
DB db = DBMaker.newFileDB( new File("myDB.file") )
.closeOnJvmShutdown()
.make()
ConcurrentNavigableMap<String,String> map = db.getTreeMap("myMap")
map.put("1", "one")
map.put("2", "two")
db.commit()
println "keySet "+map.keySet()
assert map.get("1") == "one"
assert map.get("2") == "two"
db.close()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3416 次 |
最近记录: |