Groovy数据处理:JSON与数据库操作指南
立即解锁
发布时间: 2025-08-18 01:10:36 阅读量: 1 订阅数: 3 

### Groovy数据处理:JSON与数据库操作指南
#### 1. 使用JSON配置Groovy脚本
在Groovy应用中,JSON是配置脚本的理想选择,它满足配置文件格式的诸多要求,如简单、可读、跨平台、支持多语言和Unicode等。
##### 1.1 准备工作
假设我们有一个虚构的应用程序,需要连接多个数据库,每个数据库有主机、端口、凭证和连接池初始大小等配置参数。以下是一个示例JSON配置文件:
```json
{
"configuration": {
"database": [
{
"name": "database1",
"host": "10.20.30.40",
"port": "4930",
"user": "user-alpha",
"password": "secret",
"pool-initial-size": "10",
"pool-max-size": "10"
},
{
"name": "database2",
"host": "192.168.10.30",
"port": "5001",
"user": "user-beta",
"password": "secret",
"pool-initial-size": "5",
"pool-max-size": "30"
}
]
}
}
```
##### 1.2 操作步骤
1. **创建数据库配置类**:在`configurator.groovy`文件中添加以下代码,用于存储每个数据库的配置数据。
```groovy
import groovy.json.*
import groovy.transform.TupleConstructor
@TupleConstructor
class Database {
String name
String host
Integer port
String user
String password
Integer initPool
Integer maxPool
}
```
2. **创建配置处理类**:在`Database`类定义之后添加以下代码,用于处理配置文件。
```groovy
class AppConfig {
def databases = []
AppConfig(conf) {
if (conf) {
conf.configuration
.database.each {
databases << new Database(
it.name,
it.host,
it.port.toInteger(),
it.user,
it.password,
it.'pool-initial-size'.toInteger(),
it.'pool-max-size'.toInteger()
)
}
}
}
def getDatabaseConfig = { name ->
databases.find { it.name == name }
}
}
```
3. **解析配置文件并使用配置类**:在`configurator.groovy`文件中添加以下代码,解析配置文件并调用配置类。
```groovy
def reader = new FileReader('db-config.json')
def conf = new JsonSlurper().parse(reader)
def dbConfig = new AppConfig(conf)
// Execute application logic
println dbConfig.getDatabaseConfig('database2').host
println dbConfig.getDatabaseConfig('database1').user
```
运行上述脚本,输出结果如下:
```
192.168.10.30
user-alpha
```
##### 1.3 工作原理
`AppConfig`类的构造函数接受一个`java.util.HashMap`对象,该对象是使用`JsonSlurper`解析JSON数据的结果。对于配置文件中的每个数据库,会创建一个`Database`对象并添加到`databases`列表中。`getDatabaseConfig`闭包用于根据数据库名称查找对应的配置对象。
##### 1.4 其他配置格式
除了JSON,还有其他流行的配置格式,如YAML和Groovy的`ConfigSlurper`类。
- **YAML**:是一种轻量级的数据序列化格式,更易读,支持分层数据结构,可视为JSON的超集。Groovy没有原生的YAML解析器,可使用第三方Java库,如JYaml。
```groovy
@Grab('org.jyaml:jyaml:1.3')
import org.ho.yaml.Yaml
yamlData = '''
firstname: Mike
lastname: Ross
position: CFO
'''
class Staff {
def firstname, lastname, position
}
Staff s = Yaml.loadType(yamlData, Staff)
println s.firstname
println s.position
```
运行上述脚本,输出结果如下:
```
Mike
CFO
```
- **ConfigSlurper**:Groovy的原生类,可处理以Groovy脚本形式定义的配置数据。
#### 2. Groovy数据库操作
##### 2.1 创建数据库表
在Groovy中,我们可以使用Groovy的简洁性来简化数据库表的创建操作。
##### 2.1.1 准备工作
我们将使用HyperSQL 2.3.0(HSQLDB)内存数据库,并创建一个包含食谱信息的数据库模型,包括`COOKBOOK`、`CHAPTER`、`RECIPE`和`INGREDIENT`表。
##### 2.1.2 操作步骤
1. **创建数据库工具类**:在`DBUtil.groovy`文件中添加以下代码,用于启动HSQLDB服务器。
```groovy
@GrabConfig(systemClassLoader=true)
@Grab('org.hsqldb:hsqldb:2.3.0')
import org.hsqldb.Server
class DBUtil {
static dbSettings = [
url: 'jdbc:hsqldb:hsql://localhost/cookingdb',
driver: 'org.hsqldb.jdbcDriver',
user: 'sa',
password: ''
]
static startServer() {
Server server = new Server()
def logFile = new File('db.log')
server.setLogWriter(new PrintWriter(logFile))
server.with {
setDatabaseName(0, 'cookingdb')
setDatabasePath(0, 'mem:cookingdb')
start()
}
server
}
}
```
2. **创建数据库表脚本**:在`createDb.groovy`文件中添加以下代码,用于创建数据库表。
```groovy
import static DBUtil.*
import groovy.sql.Sql
def ddls = [
'''
CREATE TABLE COOKBOOK(
ID INTEGER PRIMARY KEY,
TITLE VARCHAR(100),
AUTHOR VARCHAR(100),
YEAR INTEGER
)
''',
'''
CREATE TABLE CHAPTER(
ID INTEGER PRIMARY KEY,
BOOK_ID INTEGER,
TITLE VARCHAR(100)
)
''',
'''
CREATE TABLE RECIPE(
ID INTEGER PRIMARY KEY,
CHAPTER_ID INTEGER,
TITLE VARCHAR(100),
DESCRIPTION CLOB,
IMAGE BLOB
)
''',
'''
CREATE TABLE INGREDIENT(
ID INTEGER PRIMARY KEY,
RECIPE_ID INTEGER,
NAME VARCHAR(100),
AMOUNT DOUBLE,
UNITS VARCHAR(20)
)
'''
]
startServer()
Sql sql = Sql.newInstance(dbSettings)
ddls.each { ddl ->
sql.execute(ddl)
}
println 'Schema created successfully'
```
3. **运行脚本**:在终端中运行以下命令,创建数据库表。
```sh
groovy -cp . createDb.groovy
```
运行结果如下:
```
Schema created successfully
```
##### 2.1.3 工作原理
`DBUtil`类用于启动HSQLDB服务器,并提供数据库连接设置。`createDb.groovy`脚本使用`groovy.sql.Sql`类连接到数据库,并执行DDL语句创建数据库表。
#### 2.2 连接到SQL数据库
在Groovy中,我们可以使用`groovy.sql.Sql`类以多种方式连接到数据库。
##### 2.2.1 准备工作
确保已经启动HSQLDB服务器,并创建了数据库表。在新的Groovy脚本中添加以下导入语句:
```groovy
@Grab('commons-dbcp:commons-dbcp:1.4')
import static DBUtil.*
import groovy.sql.Sql
import org.apache.commons.dbcp.BasicDataSource
```
##### 2.2.2 操作步骤
1. **使用`newInstance`方法连接数据库**:
```groovy
Sql sql = Sql.newInstance(
'jdbc:hsqldb:hsql://localhost/cookingdb',
'sa',
'',
'org.h
```
0
0
复制全文
相关推荐









