【问题标题】:Query SQL Database with Scala使用 Scala 查询 SQL 数据库
【发布时间】:2014-09-25 14:43:44
【问题描述】:

我正在尝试对现有 H2 数据库进行基本查询。我的连接工作正常,我能够取回一些数据,但数据很奇怪,我实际上无法从表中获取列。这是我的代码:

import java.sql.{Connection, DriverManager, ResultSet}; // Import necessary SQL libraries

class H2 {

  val connection_string = "jdbc:h2:tcp://localhost//tmp/UXDemo;user=sa;password=admin"

  Class.forName("org.h2.Driver")  // Make a call to H2 Driver so it can be used

  def read = {

    // Create a Connection Object
    val connection = DriverManager.getConnection(connection_string)

    try {

      // Ensure SQL Statements are Read-Only
      val statement = connection.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY)

      // Execute Given SQL Query
      val results = statement.executeQuery("SELECT * FROM \"event\"")

      while (results.next()) {
        println(results)
      }

    } finally {

      connection.close

    }


  }

}

当我运行它时,它编译得很好,我得到这个作为回报:

s0: columns: 6 rows: 72 pos: 0
rs0: columns: 6 rows: 72 pos: 1
rs0: columns: 6 rows: 72 pos: 2
rs0: columns: 6 rows: 72 pos: 3
rs0: columns: 6 rows: 72 pos: 4
rs0: columns: 6 rows: 72 pos: 5
rs0: columns: 6 rows: 72 pos: 6
rs0: columns: 6 rows: 72 pos: 7
rs0: columns: 6 rows: 72 pos: 8
rs0: columns: 6 rows: 72 pos: 9
rs0: columns: 6 rows: 72 pos: 10
rs0: columns: 6 rows: 72 pos: 11
rs0: columns: 6 rows: 72 pos: 12
rs0: columns: 6 rows: 72 pos: 13
rs0: columns: 6 rows: 72 pos: 14
rs0: columns: 6 rows: 72 pos: 15
rs0: columns: 6 rows: 72 pos: 16
rs0: columns: 6 rows: 72 pos: 17
rs0: columns: 6 rows: 72 pos: 18
rs0: columns: 6 rows: 72 pos: 19
rs0: columns: 6 rows: 72 pos: 20
rs0: columns: 6 rows: 72 pos: 21
rs0: columns: 6 rows: 72 pos: 22
rs0: columns: 6 rows: 72 pos: 23
rs0: columns: 6 rows: 72 pos: 24
rs0: columns: 6 rows: 72 pos: 25
rs0: columns: 6 rows: 72 pos: 26
rs0: columns: 6 rows: 72 pos: 27
rs0: columns: 6 rows: 72 pos: 28
rs0: columns: 6 rows: 72 pos: 29
rs0: columns: 6 rows: 72 pos: 30
rs0: columns: 6 rows: 72 pos: 31
rs0: columns: 6 rows: 72 pos: 32
rs0: columns: 6 rows: 72 pos: 33
rs0: columns: 6 rows: 72 pos: 34
rs0: columns: 6 rows: 72 pos: 35
rs0: columns: 6 rows: 72 pos: 36
rs0: columns: 6 rows: 72 pos: 37
rs0: columns: 6 rows: 72 pos: 38
rs0: columns: 6 rows: 72 pos: 39
rs0: columns: 6 rows: 72 pos: 40
rs0: columns: 6 rows: 72 pos: 41
rs0: columns: 6 rows: 72 pos: 42
rs0: columns: 6 rows: 72 pos: 43
rs0: columns: 6 rows: 72 pos: 44
rs0: columns: 6 rows: 72 pos: 45
rs0: columns: 6 rows: 72 pos: 46
rs0: columns: 6 rows: 72 pos: 47
rs0: columns: 6 rows: 72 pos: 48
rs0: columns: 6 rows: 72 pos: 49
rs0: columns: 6 rows: 72 pos: 50
rs0: columns: 6 rows: 72 pos: 51
rs0: columns: 6 rows: 72 pos: 52
rs0: columns: 6 rows: 72 pos: 53
rs0: columns: 6 rows: 72 pos: 54
rs0: columns: 6 rows: 72 pos: 55
rs0: columns: 6 rows: 72 pos: 56
rs0: columns: 6 rows: 72 pos: 57
rs0: columns: 6 rows: 72 pos: 58
rs0: columns: 6 rows: 72 pos: 59
rs0: columns: 6 rows: 72 pos: 60
rs0: columns: 6 rows: 72 pos: 61
rs0: columns: 6 rows: 72 pos: 62
rs0: columns: 6 rows: 72 pos: 63
rs0: columns: 6 rows: 72 pos: 64
rs0: columns: 6 rows: 72 pos: 65
rs0: columns: 6 rows: 72 pos: 66
rs0: columns: 6 rows: 72 pos: 67
rs0: columns: 6 rows: 72 pos: 68
rs0: columns: 6 rows: 72 pos: 69
rs0: columns: 6 rows: 72 pos: 70
rs0: columns: 6 rows: 72 pos: 71

我实际上试图从一个列中SELECT,但它说该列不存在,所以我把它剥离出来,想看看裸露的结果是什么,它们没有多大意义。我的代码中是否缺少某些内容,还是 H2 配置问题?

【问题讨论】:

  • 你尝试过类似 results.getString 的方法吗?
  • 所以我添加了results.getString() 并将列名text 作为字符串并返回正确。但是,当我将该列查询为 SELECT text FROM "event" 时,我收到一个错误,即它不存在。我是否总是需要使用SELECT * FROM "event" 查询所有内容?

标签: sql database scala h2


【解决方案1】:

解决了这个问题。 H2 中的列名(至少在这种情况下)需要在它们周围加上引号。通过添加引号,我能够查询单个列。当我最初尝试这个时,它不起作用,可能是因为拼写错误,所以我在 executeQuery 参数中切换到三引号。您还需要 @Ashalynd 推荐的 .getString() 以便它输出字符串。

val results = statement.executeQuery(""" SELECT "text" FROM "event" """)

      while (results.next) {
        println(results.getString("text"))
      }

【讨论】:

    猜你喜欢
    • 2018-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    相关资源
    最近更新 更多