Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用oracle的scalikejdbc流式处理_Scala_Scalikejdbc - Fatal编程技术网

Scala 使用oracle的scalikejdbc流式处理

Scala 使用oracle的scalikejdbc流式处理,scala,scalikejdbc,Scala,Scalikejdbc,我正在用ScalikeJDBC实现一个流媒体源,需要它来运行多种数据库类型,包括Oracle、Sybase等 文档有点混乱,不确定这是否是一个选项: 目前,scalikejdbc streams本机支持MySQL和PostgreSQL。当正常使用SQL#迭代器工厂方法时,ScalikeJDBC会自动启用所需设置以使用游标功能。如果您不喜欢这种行为,可以自定义调整DBSession属性 除了MySQL和PostgreSQL之外,是否可以通过其他DBs处理流式读取?(因为您的问题是关于创建流式源的,

我正在用ScalikeJDBC实现一个流媒体源,需要它来运行多种数据库类型,包括Oracle、Sybase等

文档有点混乱,不确定这是否是一个选项:

目前,scalikejdbc streams本机支持MySQL和PostgreSQL。当正常使用SQL#迭代器工厂方法时,ScalikeJDBC会自动启用所需设置以使用游标功能。如果您不喜欢这种行为,可以自定义调整DBSession属性

除了MySQL和PostgreSQL之外,是否可以通过其他DBs处理流式读取?

(因为您的问题是关于创建流式源的,所以此答案只针对流式支持的发布方,而忽略了订阅方。)

对流的支持要求数据库一次返回几行查询结果,通常基于一个游标,而不是一次返回所有结果。不同的数据库有不同的方法来实现这一点。ScalikeJDBC本机支持对MySQL和PostgreSQL驱动程序使用streaming
iterator
方法。也就是说,使用MySQL和PostgreSQL驱动程序,以下功能可以正常工作:

import scalikejdbc._
import scalikejdbc.streams._

// set up a connection pool

import scala.concurrent.ExecutionContext.Implicits.global

val publisher: DatabasePublisher[Int] = DB.readOnlyStream {
  sql"select id from users order by id".map(r => r.get[Int]("id")).iterator
}
上述方法适用于MySQL和PostgreSQL,因为:

请注意,最后一个
case
子句意味着ScalikeJDBC在默认情况下不支持具有MySQL和PostgreSQL之外的驱动程序的流式
迭代器

这并不意味着不能使用其他驱动程序进行流式处理。您引用的文档部分包含以下代码示例:

val publisher: DatabasePublisher[Int] = DB readOnlyStream {
  sql"select id from users".map(r => r.int("id"))
    .iterator
    .withDBSessionForceAdjuster(session => {
      session.conn.setAutoCommit(true)
    })
}
文档所说的是,要为MySQL和PostgreSQL以外的数据库启用流式处理,您需要自定义
DBSession
属性,如上面的示例所示,以便启用游标支持。这种定制具体需要什么(例如,在连接上调整
fetchSize
或禁用
autoCommit
),取决于驱动程序(假设驱动程序支持一次检索少量行的查询结果)

val publisher: DatabasePublisher[Int] = DB readOnlyStream {
  sql"select id from users".map(r => r.int("id"))
    .iterator
    .withDBSessionForceAdjuster(session => {
      session.conn.setAutoCommit(true)
    })
}