【问题标题】:Inserting array data into database on play framework anorm在播放框架异常上将数组数据插入数据库
【发布时间】:2014-04-21 07:38:40
【问题描述】:

我需要将数组数据存储到数据库中。但我没有找到如何做到这一点的样本。我尝试将数组视为普通数据类型,但它似乎不起作用。这是我的代码:

在数据库表中,我有 3 列:

Id integer,
uLocation integer,
Prices integer(366)

在 SQL 中,使用以下方法插入、更新或查询表:

def InseartToDatabase(ItemPrices: ListBuffer[Int], Id: Int, uLocation: Int) = {
     val prices = ItemPrices.toArray
     DB.withConnection { implicit c =>
         SQL("insert into task (Id, uLocation, Prices) values ({Id},{uLocation}, {Prices})").on('Id ->Id, 'uLocation->uLocation, 'Prices -> Prices).executeUpdate()
     }
}

这不能静默工作,也不会报告异常。但是下一次更新失败了。如果我删除数组字段,上面的代码就可以正常工作。

另外,我不知道如何查询它。

【问题讨论】:

    标签: sql arrays scala playframework-2.0 anorm


    【解决方案1】:

    如果您使用的是 H2,请尝试使用 Postgresql 模式。 Postgresql支持Array数据类型(ref),从playframework 2.4.x开始,Anorm支持数组列解析器(ref),可以这样查询:

    import anorm.SQL
    import anorm.SqlParser.{ scalar, * }
    
    // array and element parser
    import anorm.Column.{ columnToArray, stringToArray }
    
    val res: List[Array[String]] =
    SQL("SELECT str_arr FROM tbl").as(scalar[Array[String]].*)
    

    【讨论】:

      【解决方案2】:

      你没有说你正在使用哪个数据库。并非所有数据库都支持数组数据类型。我有待纠正,但不认为 anorm 以您期望的方式支持数组。 this google group's thread 上有一些讨论和潜在的解决方法。

      附:请允许我为您的多值列制作一个单独的表格。对于相对较小的不便,您可以获得标准的 sql 处理(更易于维护)和更好的跨平台代码,仅举几例。 :)

      【讨论】:

      • 我在内存中使用 H2。我现在将数组转换为 blob,它似乎工作。但是,我不知道如何查询它。我正在使用 {SQL("select Id, Price from task").as(int("Id") ~ blob("Prices") map(flatten) *) },但编译器抱怨找不到 blob。跨度>
      • 你见过anorm page吗?那里有一个图像文件/二进制文件。但是更简单的方法呢,将它存储在一个字符串中,使用 mkString 并拆分? (或单独的表格;))
      【解决方案3】:

      使用 .toSeq,而不是列表,这可能有效。

      SQL("insert into task (Id, uLocation, Prices) values ({Id},{uLocation}, {Prices})").on('Id ->Id, 'uLocation->uLocation.toSeq, 'Prices -> Prices).executeUpdate()
      

      【讨论】:

        猜你喜欢
        • 2013-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多