最近在写一个项目,它要求用户能够自主选择组件进行建表并实现数据库的增删改查操作。这个需求的重点在于数据表本身不固定,无法事先确定表和实体,我们的设想是利用前端将用户的选择结果转化成一个jsonList对象,后台通过解析json串后,利用sql语句的拼接实现建库以及GORM操作。
项目运用grails框架,因此这里我们使用的是groovy语法
首先我们需要建一个方法类,其中包含Create以及GORM方法:
class sqltest {
static Sql sql = Sql.newInstance(url, username,
password, driver)
//数据库的连接配置 根据自己的数据库属性填写
// 生成数据库表函数,json形式 '{"name":"表的名字","key1":"int","json2":"int"...}'
static def createTable(def jsonlist) {
println("开始创建表格" + jsonlist.get("name") + "...")
def sqlCreate = 'CREATE TABLE '
jsonlist.each {
sqlCreate += it.key == "name" ? it.value + '( id int PRIMARY KEY not null auto_increment , lastUpdated date null,dateCreated date null,' : it.key + " " + it.value + ","
}
sqlCreate = sqlCreate[0..sqlCreate.length() - 2] + ");"
sql.execute(sqlCreate)
println("表格" + jsonlist.get("name") + "创建完成!\n")
}
// 删除数据库表函数,json形式 '{"name":"表的名字"}'
static def dropTable(def jsonlist) {
println("开始删除表格" + jsonlist.get("name") + "...")
def sqlCreate = 'drop TABLE '+jsonlist.get("name")+' ;'
sql.execute(sqlCreate)
println("表格" + jsonlist.get("name") + "删除完成!\n")
}
//插入数据 '{"name":"表的名字","key1":"value1","key2":"value2"...}'
static def insertData(def jsonList) {
println("开始插入数据到" + jsonList.get("name") + "...")
def sqlInsert = 'INSERT into '
jsonList.each {
sqlInsert += it.key == "name" ? it.value + ' set ' :