读取数据库表并输出到scala中的文件?

时间:2015-05-16 16:23:40

标签: java scala

我是Scala的新手,我正在尝试使用~as delimiter将sql server数据库表和输出数据连接到文件。 我设法编写下面的代码,问题是在写入文件时我只能看到一条记录,但在哪里,如果我使用println在屏幕上打印,我可以看到几条记录,我想我错过了一些需要你帮助的人。 我想在输出文件中看到println显示的所有输出,截至目前我只能在输出文件中看到一行输出。

取得: - 285〜赛

预期: - 285〜赛义德 293〜凯瑟琳 295〜金 2170〜金 38〜金 211〜哈齐姆 2357〜山姆 297〜温贝托 291〜古斯塔沃 299〜皮拉

import java.sql.{Connection, DriverManager, ResultSet}
import java.io._
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
                                                  //> res35: Class[?0] = class com.microsoft.sqlserver.jdbc.SQLServerDriver
 
val conn = DriverManager.getConnection("jdbc:sqlserver://myip;databaseName=AdventureWorks2014;user=user;password=oracle;useUnicode=true;characterEncoding=UTF-8")
                                                  
val pw = new PrintWriter(new File("C:\\scalatutorials\\hello.txt"));
    val statement = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)                                     
    val rs = statement.executeQuery("SELECT TOP 10 BusinessEntityID,FirstName FROM AdventureWorks2014.dbo.Person;")
                                                 
    while (rs.next){
    val bussid=rs.getInt("BusinessEntityID")
    val First=rs.getString("FirstName")
    val kop=List(bussid,First)
    val opsql=kop.mkString("~")
    pw.write(opsql)
    println(opsql)
    pw.close
    }                                             //> 285~Syed
                                                  //| 293~Catherine
                                                  //| 295~Kim
                                                  //| 2170~Kim
                                                  //| 38~Kim
                                                  //| 211~Hazem
                                                  //| 2357~Sam
                                                  //| 297~Humberto
                                                  //| 291~Gustavo
                                                  //| 299~Pilar
   conn.close()

1 个答案:

答案 0 :(得分:1)

在阅读第一条记录后,您不需要关闭流。因此,在写完所有记录后,您可以关闭流,如:

while (rs.next){
    ...
    ..write(..)
}
//close open resources here and not in while loop.