Feeds

Groovy way to MySQL

Get your Groove on

Security and trust: The backbone of doing business over the internet

As with Java, Groovy makes use of JDBC to interact with the database. So we'll start off with some simple code to connect to and read from this database. Enter the following into a file called MySQL.groovy:

import groovy.sql.Sql
def sql = Sql.newInstance("jdbc:mysql://192.168.16.175:3306/pers", "pan","regdev", "com.mysql.jdbc.Driver")
sql.eachRow("select * from users") {println "User name ${it.user_name}"}

The first thing to note is the import statement and the creation of the Sql object. The argument to the newInstance method broadly encapsulates the information needed to create a standard Java JDBC connection: database URL, user name, password, and JDBC driver class name.

Once we've got an Sql object we can use it to interact with the database using standard SQL syntax. In this example we are simply performing a basic select query to grab all of the data in the user's table. So far, not very different from Java, the Groovy code is less verbose for sure, but not so different to what we're used to. It's what follows that shows us a first taste of Groovy at work.

The eachRow method iterates through the rows returned by the select query, and this is combined with the closure code: {println "User name ${it.user_name}"}

Closures are blocks of code that are treated as objects and can be passed around, stored, or executed. In this case we are creating a block of code that is passed to the eachRow method, which then executes the function by binding the value of each row of data to the "it" variable. In this way we can access all of the column names in the returned rows directly. If we save this code as MySQL.groovy we can then execute it from the command line by typing:

groovy MySQL.groovy

which will return:

User name tom
User name dick
User name harry
User name george

This combination of SQL, easy iteration and the use of closures means it's possible to write extremely powerful but succinct scripts to process data from MySQL and other databases. The eachRow method isn't the only way we can access the data using the Sql class. As an alternative we can grab the rows and put them into a List as follows:

List u=sql.rows('SELECT * FROM users')
u.each {println it.user_id}

Again, we have an iteration and a closure providing fast access to processing the data.

However, the Sql class also provides a means to perform a wide variety of SQL operations, including INSERT, DELETE, UPDATE and various DDL activities.

We can use Groovy's triple quoted strings to encode SQL queries which we execute directly. For example:

sql.execute '''
  INSERT INTO users (user_name, email, user_id) 
  VALUES ('fred','fred@fred.com',99);'''
sql.execute '''
  DELETE FROM users 
  WHERE user_id>20
  '''

So far we've been using the Sql class to provide access to the database. In the next part of this tutorial we'll be looking at a different mechanism and at some practical examples of using Groovy scripting with MySQL to perform some common DBA activities. ®

Security and trust: The backbone of doing business over the internet

More from The Register

next story
New 'Cosmos' browser surfs the net by TXT alone
No data plan? No WiFi? No worries ... except sluggish download speed
'Windows 9' LEAK: Microsoft's playing catchup with Linux
Multiple desktops and live tiles in restored Start button star in new vids
iOS 8 release: WebGL now runs everywhere. Hurrah for 3D graphics!
HTML 5's pretty neat ... when your browser supports it
Mathematica hits the Web
Wolfram embraces the cloud, promies private cloud cut of its number-cruncher
Google extends app refund window to two hours
You now have 120 minutes to finish that game instead of 15
Intel: Hey, enterprises, drop everything and DO HADOOP
Big Data analytics projected to run on more servers than any other app
Mozilla shutters Labs, tells nobody it's been dead for five months
Staffer's blog reveals all as projects languish on GitHub
SUSE Linux owner Attachmate gobbled by Micro Focus for $2.3bn
Merger will lead to mainframe and COBOL powerhouse
iOS 8 Healthkit gets a bug SO Apple KILLS it. That's real healthcare!
Not fit for purpose on day of launch, says Cupertino
prev story

Whitepapers

Providing a secure and efficient Helpdesk
A single remote control platform for user support is be key to providing an efficient helpdesk. Retain full control over the way in which screen and keystroke data is transmitted.
WIN a very cool portable ZX Spectrum
Win a one-off portable Spectrum built by legendary hardware hacker Ben Heck
Saudi Petroleum chooses Tegile storage solution
A storage solution that addresses company growth and performance for business-critical applications of caseware archive and search along with other key operational systems.
Protecting users from Firesheep and other Sidejacking attacks with SSL
Discussing the vulnerabilities inherent in Wi-Fi networks, and how using TLS/SSL for your entire site will assure security.
Security for virtualized datacentres
Legacy security solutions are inefficient due to the architectural differences between physical and virtual environments.