開發可存取 IBM Db2 的 Scala 應用程式

Scala 是一種簡潔、具表現力且功能強大的 Java 虛擬機器 (JVM) 程式設計語言。 Scala 程式碼會編譯成在 JVM 上執行的位元組碼,容許 Scala 程式碼使用 Java 程式庫。

若要使用 Scala 來存取 IBM Data Server ,請使用 IBM Data Server Driver for JDBC and SQLJ。 您可以使用 JDBC API 或協力廠商資料存取程式庫來撰寫應用程式,這些程式庫建置成 JDBC API 之上的抽象。 驅動程式提供的所有特性及 API 介面都可以在 Scala 應用程式中使用。

附註: Scala 編譯器 'scalac' 的現行版本已淘汰建立 Java 1.5 相容二進位檔的支援。 建議使用 Java 1.6 及更高版本來執行 Scala 應用程式。

範例

以下是使用 JDBC API 撰寫的 Scala 應用程式範例:
package
com.example.db2.jdbc object DB2Client {
def connectURL (): java.sql. Connection  = {
/*     
* connection properties may be provided on url,     
* for example to include trace properties on the url:     
*     
* val url = "jdbc:db2://localhost:50000/SAMPLE:traceFile=cpds.txt;traceLevel=-1;"     
*      
* all other variants of java.sql.DriverManager.getConnection( ) APIs may     
* also be used, for example:        
*      
*java.sql.DriverManager.getConnection(String url, Properties info)     
*java.sql.DriverManager.getConnection(String url, String user, String password)     
*/
val url  =  "jdbc:db2://localhost:50000/SAMPLE"
val username =  "db2admin"    
val password =  "db2admin"
// load the driver and acquire connection.    
// Note, the Class.forName( ) way of loading a driver is not needed     
// when using the JDBC 4 compliant JCC driver db2jcc4.jar 
 
Class. forName ( "com.ibm.db2.jcc.DB2Driver" )   // needed   only for db2jcc.jar, not db2jcc4.jar
var connection = java.sql.DriverManager. getConnection ( url ,  username ,  password )
     connection  
}
 def main ( args : Array[String]) {
println ( "obtaining connection..." )
val con : java.sql. Connection  =  connectURL ()
     println ( "connection obtained." ) 
try {
println ( "retrieving data..." )       
con . setAutoCommit (false)

var st  =  con . createStatement ()
var rs  =  st . executeQuery ( "SELECT EMPNO, FIRSTNME, LASTNAME, SALARY FROM EMPLOYEE WHERE SALARY > 50000" )
       while( rs . next ()) {
          printf ( "Employee (%s, %s, %s, %8.2f) \n " ,  rs . getString ( 1 ),  rs . getString ( 2 ),
          rs . getString ( 3 ),  rs . getDouble ( 4 ))
          }

rs . close ()       
st . close ()

println ( "updating data..." )      
var pst =  con . prepareStatement ( """INSERT INTO EMPLOYEE (                                     
                                    EMPNO,
                                    FIRSTNME,                                    
                                    LASTNAME,                                    
                                    EDLEVEL,                                    
                                    BIRTHDATE,                                     
                                    SALARY)
                                    VALUES (?, ?, ?, ?, ?, ?)""" )
pst . setString ( 1 ,  "300000" )       
pst . setString ( 2 ,  "JOHN" )       
pst . setString ( 3 ,  "DOE" )       
pst . setInt ( 4 ,  18 )       
pst . setDate ( 5 , java.sql.Date. valueOf ( "1980-01-01" ))        
pst . setDouble ( 6 ,  50500.00 )       
pst . executeUpdate ()

pst . clearParameters ()       
pst . setString ( 1 ,  "300100" )       
pst . setString ( 2 ,  "JANE" )       
pst . setString ( 3 ,  "DOE" )       
pst . setInt ( 4 ,  19 )       
pst . setDate ( 5 , java.sql.Date. valueOf ( "1980-01-01" ))       
pst . setDouble ( 6 ,  60750.00 )       
pst . executeUpdate () 

pst . close

println ( "retrieving data again..." )       
st =  con . createStatement ()
rs  =  st . executeQuery ( "SELECT EMPNO, FIRSTNME, LASTNAME, SALARY FROM EMPLOYEE WHERE SALARY > 50000" )

while( rs . next ()) {        
      var emp  =  printf ( "Employee (%s, %s, %s, %8.2f)" ,  rs . getString ( 1 ),  rs . getString ( 2 ),
           rs . getString ( 3 ),  rs . getDouble ( 4 ))         
            println ( emp )
            }        
            rs . close ()       
            st . close () 
   } catch{ 
      case ex : java.sql.SQLException =>  println ( "SQLException occurred: " + ex )
    } finally{       
      println ( "closing connection." )
      con . close ()    
      }  
   }
}

在 Scala 中存取 Db2 的其他方法

Scala 中的大部分資料存取程式庫及架構建置在 JDBC 標準之上,並容許針對 資料庫 存取配置 JDBC 驅動程式。 在使用這些架構時,您可以存取提供 IBM Data Server Driver for JDBC and SQLJ 作為 JDBC 驅動程式的 Db2 。 以下是 Scala 應用程式可用的部分此類資料存取架構範例:請參閱這些程式庫及架構隨附的文件,以瞭解如何提供 IBM Data Server Driver for JDBC and SQLJ 驅動程式來存取 Db2

Spark 海量資料處理系統的 Spark SQL 模組容許透過 JDBC存取資料庫。 使用 IBM Data Server Driver for JDBC and SQLJ,可以使用 Spark SQL 來存取 Db2 下列程式碼 Snippet 來自以 Scala 撰寫的 Spark SQL 應用程式,其使用 Spark 的 DataFrame API 及 IBM Data Server Driver for JDBC and SQLJ 來存取 Db2:

import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
.
.
.
// Obtain Sparkcontext
val sc = new SparkContext(conf)

// Obtain SQLContext
val sqlContext = new SQLContext(sc)
// Construct DataFrame from Employee table,
// passing the Database URL and Driver class
// to the sqlContext.load( ) API
val employeeDF = sqlContext.load("jdbc", Map(
"url" -> "jdbc:db2://localhost:50000/SAMPLE:user=db2admin;password=db2admin;",
"driver" -> "com.ibm.db2.jcc.DB2Driver",
"dbtable" -> "EMPLOYEE"))

// show the DataFrame contents
employeeDF.show();

Scala 開發資源