Java或Scala将从数据库中检索多个列作为一行

Java或Scala将从数据库中检索多个列作为一行,java,scala,apache-spark,Java,Scala,Apache Spark,我想在一行中检索数据库中的多个列 例如:- CustomerId,AccountNumber 1,AW0000001 1 AW0000001 我编写的Scala代码正在向新行输出列值 例如:- CustomerId,AccountNumber 1,AW0000001 1 AW0000001 代码:- object SparkSQLServer { class DbRow extends java.util.HashMap[java.lang.String,Object] {

我想在一行中检索数据库中的多个列

例如:-

CustomerId,AccountNumber
1,AW0000001
1

AW0000001
我编写的Scala代码正在向新行输出列值

例如:-

CustomerId,AccountNumber
1,AW0000001
1

AW0000001
代码:-

object SparkSQLServer {

    class DbRow extends java.util.HashMap[java.lang.String,Object] {

    }


    def main(args: Array[String]): Unit = {

        Logger.getLogger("org").setLevel(Level.WARN)
        Logger.getLogger("akka").setLevel(Level.WARN)

        val conf = new SparkConf().setMaster("local[2]").setAppName("SparkProducerMSSQL")
        val sc = new SparkContext(conf)

        val driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
        val url = "jdbc:sqlserver://localhost;user=admin;password=oracle;database=AdventureWorks2014"
        val username = "admin"
        val password = "oracle"

        var connection:Connection=null

        Class.forName(driver)
        connection=DriverManager.getConnection(url,username,password)

        val statement=connection.createStatement()
        val resultSet=statement.executeQuery("select top 10 CustomerID,AccountNumber from AdventureWorks2014.dbo.Customer")
        resultSet.setFetchSize(10);
        val columnnumber=resultSet.getMetaData().getColumnCount.toInt

        val objcommand=("select top 10 CustomerID,AccountNumber from AdventureWorks2014.dbo.Customer",connection)


        //var rows: Vector[DbRow]=Vector.empty

        while (resultSet.next())
          {

            //val row=new DbRow

            var i=0.toInt;
            for (i <- 1 to columnnumber.toInt)
              {

                val columnvalue=resultSet.getString(i);
                val columnname=resultSet.getMetaData().getColumnName(i)

                //row.put(columnname,resultSet.getObject(i))
                val test4=resultSet.getObject(i)
                var list = new java.util.ArrayList[String]()
                list.add(resultSet.getObject(i).toString())

                println(list)

              }
            //rows = rows :+ row
            //print(row)
           // print(rows.toString().replace("Vector","").replace(")","~"))
            //print(rows.toString().replace("Vector",""))
           // val test=sc.parallelize(List(row.toString().replace("{","").replace("}","~")))
            //val lines=test.flatMap(x=>x.split("~"))
            //lines.collect().foreach(println)



            //print(row)
             //
            //println(resultSet)
          }

        connection.close()

    }
}
对象SparkSQLServer{
DbRow类扩展了java.util.HashMap[java.lang.String,Object]{
}
def main(参数:数组[字符串]):单位={
Logger.getLogger(“org”).setLevel(Level.WARN)
Logger.getLogger(“akka”).setLevel(Level.WARN)
val conf=new SparkConf().setMaster(“本地[2]”)。setAppName(“sparkProducermsql”)
val sc=新的SparkContext(配置)
val driver=“com.microsoft.sqlserver.jdbc.SQLServerDriver”
val url=“jdbc:sqlserver://localhost;用户=管理员;密码=oracle;数据库=AdventureWorks2014”
val username=“admin”
val password=“oracle”
变量连接:连接=null
Class.forName(驱动程序)
connection=DriverManager.getConnection(url、用户名、密码)
val语句=connection.createStatement()
val resultSet=statement.executeQuery(“从AdventureWorks2014.dbo.Customer中选择前10名CustomerID、AccountNumber”)
结果集setFetchSize(10);
val columnnumber=resultSet.getMetaData().getColumnCount.toInt
val objcommand=(“从AdventureWorks2014.dbo.Customer”中选择前10名CustomerID、AccountNumber),连接)
//变量行:Vector[DbRow]=Vector.empty
while(resultSet.next())
{
//val行=新数据库行
var i=0.5分;
对于(i x.分割(“~”)
//line.collect().foreach(println)
//打印(行)
//
//println(结果集)
}
连接。关闭()
}
}
移动 “var list=new java.util.ArrayListString” 和 “println(列表)” 外循环

var list = new java.util.ArrayList[String]()
for .. {

}
println(list)
最好使用StringBuilder

StringBuilder sb=new StringBuilder(100);
for {
sb.append(resultSet.getObject(i).toString());
sb.append(",");
}
println(sb.toString())
Java的完整示例:

final String url      = "jdbc:sqlserver://localhost;user=admin;password=oracle;database=AdventureWorks2014";
final String username = "admin";
final String password = "oracle";
final String sql      = "select top 10 CustomerID,AccountNumber from AdventureWorks2014.dbo.Customer";
try (Connection connection = DriverManager.getConnection(url,username,password);
     Statement statement = connection.createStatement();
     ResultSet resultSet = statement.executeQuery(sql)) {

    final ResultSetMetaData metaData = resultSet.getMetaData();
    final int columnCount = metaData.getColumnCount();
    for (int i = 1; i <= columnCount; i++) {
        if (i > 1)
            System.out.print(',');
        System.out.print(metaData.getColumnName(i));
    }
    System.out.println();

    while (resultSet.next()) {
        for (int i = 1; i <= columnCount; i++) {
            if (i > 1)
                System.out.print(',');
            System.out.print(resultSet.getString(i));
        }
        System.out.println();
    }
}
final String url=“jdbc:sqlserver://localhost;用户=管理员;密码=oracle;数据库=AdventureWorks2014”;
最终字符串username=“admin”;
最终字符串password=“oracle”;
最后一个字符串sql=“从AdventureWorks2014.dbo.Customer中选择前10名CustomerID、AccountNumber”;
try(Connection-Connection=DriverManager.getConnection(url、用户名、密码);
语句Statement=connection.createStatement();
ResultSet ResultSet=statement.executeQuery(sql)){
final ResultSetMetaData metaData=resultSet.getMetaData();
final int columnCount=metaData.getColumnCount();
对于(int i=1;i 1)
系统输出打印(',');
System.out.print(metaData.getColumnName(i));
}
System.out.println();
while(resultSet.next()){
对于(int i=1;i 1)
系统输出打印(',');
System.out.print(resultSet.getString(i));
}
System.out.println();
}
}