@Grapes([
@Grab(group='org.xerial', module='sqlite-jdbc', version='3.7.2'),
@GrabConfig(systemClassLoader=true)
])
import java.sql.Connection
import java.sql.DriverManager
import java.sql.ResultSet
import java.sql.SQLException
import java.sql.Statement
import java.sql.PreparedStatement
import groovy.sql.Sql
import java.text.SimpleDateFormat
String databasefileName = "testDB.db" // this will write file to your system
Class.forName("org.sqlite.SQLite")
try {
Sql.newInstance("jdbc:sqlite:"+databasefileName,"org.sqlite.JDBC")
connection = DriverManager.getConnection("jdbc:sqlite:" + databasefileName)
executeCommand = connection.createStatement().&executeUpdate
executeCommand("drop table if exists myTable")
String ct = "create table myTable (col1 string, col2 date, col3 string, col4 int)"
executeCommand(ct)
prepStatment = connection.prepareStatement("insert into myTable values(?, ?, ?, ?)")
}
catch(SQLException e) { System.err.println("sql: " + e.getMessage()); return }
//populate table
updateSqLiteDB(connection, prepStatment)
Sql sql = new Sql(connection)
//run sql select statement
sql.eachRow("select * from myTable") {
print(" col1 = " + it.getString("col1").padRight(5))
print(" col2 = " + it.getDate("col2"))
print(" col3 = " + it.getString("col3").padRight(15))
println(" col4 = " + it.getInt("col4"))
}
//close connection
try {
if(connection != null)
connection.close();
}
catch(SQLException e) {
// connection close failed.
System.err.println("sql: " + e)
}
////////////////////////////////END OF MAIN/////////////////////////////////
static void updateSqLiteDB(def connection, def prepStatment) {
try {
100.times { i ->
String valCol1 = i.toString()
Date valCol2 = (new java.sql.Date(111,0,15)) + i
String valCol3 = (i.toString()) * 5
Integer valCol4 = i * i
prepStatment.setString(1, valCol1)
prepStatment.setDate(2, valCol2)
prepStatment.setString(3, valCol3)
prepStatment.setInt(4, valCol4)
prepStatment.addBatch()
}
connection.setAutoCommit(false);
prepStatment.executeBatch();
connection.setAutoCommit(true);
}
catch(SQLException e) { System.err.println("sql batch: " + e.getMessage()) }
}
Tuesday, March 29, 2011
sqLite
Subscribe to:
Post Comments (Atom)
As far as I can tell the "Class.forName" line is not necessary as the Sql.newInstance call does just that.
ReplyDeleteYou can try to remove it and see. But as I recall I was getting some Class Loader errors a while back, and so I found this solution from an IRC chat.
Delete