Groovy-16.数据库

Groovy中的Groovy-sql API支持各种各样的数据库,包括:

  • HSQLDB
  • Oracle
  • SQL Server
  • MySQL
  • MongoDB

jar包

以MySql为例,需要下载的jar包为:

mysql-connector-java-5.1.38-bin

连接

以下代码连接了一个

  • 本地
  • 接口为3306
  • 库名为TESTDB
  • 连接名为testuser
  • 密码为test123
  • 驱动为com.mysql.jdbc.Driver

的数据库

import java.sql.*; 
import groovy.sql.Sql 

class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 
         'testuser', 'test123', 'com.mysql.jdbc.Driver')
            
      // Executing the query SELECT VERSION which gets the version of the database
      // Also using the eachROW method to fetch the result from the database
   
      sql.eachRow('SELECT VERSION()'){ row ->
         println row[0]
      }
        
      sql.close()  
   } 
} 

建表

写好sql的字符串。以sql实例的execute方法执行即可。

import java.sql.*; 
import groovy.sql.Sql 

class Example { 
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser',  
         'test123', 'com.mysql.jdbc.Driver')
            
      def sqlstr = """CREATE TABLE EMPLOYEE ( 
         FIRST_NAME CHAR(20) NOT NULL,
         LAST_NAME CHAR(20),
         AGE INT,
         SEX CHAR(1),
         INCOME FLOAT )""" 
                            
      sql.execute(sqlstr);
      sql.close() 
   } 
}

插入

$定义一个参数。在执行sql语句的时候替换为值:

import java.sql.*; 
import groovy.sql.Sql
 
class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')
            
      sql.connection.autoCommit = false  
      
      def firstname = "Mac"
      def lastname ="Mohan"
      def age = 20
      def sex = "M"
      def income = 2000  
        
      def sqlstr = "INSERT INTO EMPLOYEE(FIRST_NAME,LAST_NAME, AGE, SEX, 
         INCOME) VALUES " + "(${firstname}, ${lastname}, ${age}, ${sex}, ${income} )"
            
      try {
         sql.execute(sqlstr);
         sql.commit()
         println("Successfully committed") 
      } catch(Exception ex) {
         sql.rollback()
         println("Transaction rollback")
      }
        
      sql.close()
   }
}

使用SQL类的eachRow方法进行读操作。

eachRow(GString gString, Closure closure) 
  • gString:待需要执行的SQL语句。
  • closure:闭包,用来处理来自读操作的数据行。
import java.sql.*; 
import groovy.sql.Sql
 
class Example {
   static void main(String[] args) {
      // Creating a connection to the database
      def sql = Sql.newInstance('jdbc:mysql://localhost:3306/TESTDB', 'testuser', 
         'test123', 'com.mysql.jdbc.Driver')  
            
      sql.eachRow('select * from employee') {
         tp -> 
         println([tp.FIRST_NAME,tp.LAST_NAME,tp.age,tp.sex,tp.INCOME])
      }  // [Mac, Mohan, 20, M, 2000.0]
      sql.close()
   } 
}

更新,删除

UPDATE和DELETE操作都是写好SQL然后通过execute执行,但是需要commit()提交(在后文“提交”中介绍)。

事务

事务是保持数据一致性的机制,包括以下四种属性:

  • 原子性
  • 一致性
  • 隔离
  • 持久性

为了保证事务机制,需要有:

  • 提交操作sql.commit(),用于通知数据库完成操作
  • 回滚操作sql.close(),用于还原更改

断开连接

记得断开连接:

sql.close()

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • LintCode-73. 前序遍历和中序遍历树构造二叉树

    根据注意事项,前序遍历的节点从根节点开始,那么在中序遍历中对应的节点的左边就是其左子树,右边就是其右子树了。

    悠扬前奏
  • Guava-1.6类CharMatcher

    com.google.common.base Class CharMatcher

    悠扬前奏
  • Leecode-7.整数反转

    悠扬前奏
  • sql格式化工具

    该工具支持oracle、mysql、sql server等关系型数据库,能让你看到sql美化后的清晰的结构,可运用于对复杂SQL语句的分析或者是程序代码优化上,...

    ixiaoyang8
  • 从逻辑入手优化数据库性能

    作者介绍 ? 谢浩 现任职于云和恩墨,具有多年oracle数据库企业级运维经验,擅长结合业务、硬件系统制定各种项目方案。 在oracle性能优化主要包括:数据架...

    数据和云
  • Oracle AWR 阙值影响历史执行计划

          最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值...

    Leshami
  • JDBC的基本使用流程

    JDBC的基本使用流程: 1 导入jar包: 导入ojdbc6.jar,在项目上右键 builder path–>add to builder path. ...

    葆宁
  • MyBatis系列第1篇:MyBatis未出世之前我们那些痛苦的经历

    MyBatis系列目标:从入门开始开始掌握一个高级开发所需要的MyBatis技能。

    路人甲Java
  • MySQL审计

    线上的数据库,开发可以直接navicat软件直接操作。一旦发生数据泄露,后果严重。需要禁止使用navicat,使用命令行操作,并且能记录每个开发执行的SQL语句...

    py3study
  • oracle 常用命令大汇总

    oracle 常用命令大汇总(第一篇)     第一章:日志管理     1.forcing log switches     sql> alter ...

    阿新

扫码关注云+社区

领取腾讯云代金券