用JDBC操作數(shù)據(jù)庫,對比一下Java和Groovy。
環(huán)境:SQL Server 2000 (記得打補丁SP4,不然JDBC訪問會報錯)
JDBC Driver:msbase.jar,mssqlserver.jar,msutil.jar
Java版
package
?jcat.bit.java;
import ?java.sql. * ;
public ? class ?JDBC?{
???? public ? static ? void ?main(String[]?args)? throws ?ClassNotFoundException,?SQLException?{
????????Class.forName( " com.microsoft.jdbc.sqlserver.SQLServerDriver " );
????????Connection?conn? = ?DriverManager.getConnection(
???????????????? " jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs " ,
???????????????? " sa " ,? "*** " );
????????Statement?stmt? = ?conn.createStatement();
????????ResultSet?rs? = ?stmt.executeQuery( " select?top?10?*?from?authors " );
???????? while ?(rs.next())?{
????????????System.out.println(rs.getString( 2 ) + " ? " + rs.getString( 3 ));??//?數(shù)id
????????}
????????rs.close();
????????stmt.close();
????????conn.close();
????}
}
import ?java.sql. * ;
public ? class ?JDBC?{
???? public ? static ? void ?main(String[]?args)? throws ?ClassNotFoundException,?SQLException?{
????????Class.forName( " com.microsoft.jdbc.sqlserver.SQLServerDriver " );
????????Connection?conn? = ?DriverManager.getConnection(
???????????????? " jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs " ,
???????????????? " sa " ,? "*** " );
????????Statement?stmt? = ?conn.createStatement();
????????ResultSet?rs? = ?stmt.executeQuery( " select?top?10?*?from?authors " );
???????? while ?(rs.next())?{
????????????System.out.println(rs.getString( 2 ) + " ? " + rs.getString( 3 ));??//?數(shù)id
????????}
????????rs.close();
????????stmt.close();
????????conn.close();
????}
}
Groovy版
package?jcat.bit.groovy
import?groovy.sql.Sql
class?JDBC?{
????static?void?main(args)?{
????????Sql?sql?=?Sql.newInstance(
????????????????"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs",
????????????????"sa",?"***",
????????????????"com.microsoft.jdbc.sqlserver.SQLServerDriver")
????????sql.eachRow("select?top?10?*?from?authors")?{row?->
????????????println?row.au_fname?+?"?"?+?row.au_lname????//直接用數(shù)據(jù)庫的字段名就可以操作結(jié)果集了,不用去數(shù)id
????????}
????}
}
import?groovy.sql.Sql
class?JDBC?{
????static?void?main(args)?{
????????Sql?sql?=?Sql.newInstance(
????????????????"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs",
????????????????"sa",?"***",
????????????????"com.microsoft.jdbc.sqlserver.SQLServerDriver")
????????sql.eachRow("select?top?10?*?from?authors")?{row?->
????????????println?row.au_fname?+?"?"?+?row.au_lname????//直接用數(shù)據(jù)庫的字段名就可以操作結(jié)果集了,不用去數(shù)id
????????}
????}
}
總結(jié)
1. 建立查詢,差別不大,都是JDBC那一套;Groovy不用處理異常
2. 處理查詢結(jié)果,Groovy因為有閉包,處理這些迭代問題很方便
3. Groovy不用關(guān)閉