Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
带有Anorm的SQL语句提供了PostgreSQL CLI以外的其他结果_Postgresql_Scala_Playframework 2.2_Anorm - Fatal编程技术网

带有Anorm的SQL语句提供了PostgreSQL CLI以外的其他结果

带有Anorm的SQL语句提供了PostgreSQL CLI以外的其他结果,postgresql,scala,playframework-2.2,anorm,Postgresql,Scala,Playframework 2.2,Anorm,我想在保存数据库之前检查数据库中是否存在某些内容,以避免出现键重复错误。我在玩!2.2.6使用anorm和Postgresql 9.3 所以我写了一个小函数,省略了错误检查: def testIfExist(fieldName: String, value: String): Boolean = { DB.withConnection { implicit connection => SQL( """SELECT exists(SELECT 1 FROM events wher

我想在保存数据库之前检查数据库中是否存在某些内容,以避免出现键重复错误。我在玩!2.2.6使用anorm和Postgresql 9.3

所以我写了一个小函数,省略了错误检查:

def testIfExist(fieldName: String, value: String): Boolean = {
  DB.withConnection { implicit connection =>
    SQL( """SELECT exists(SELECT 1 FROM events where {fieldName}={value} LIMIT 1)""")
      .on(
        'fieldName -> fieldName,
        'value -> value
      ).execute()
  }
}
虽然我的数据库是空的,但它总是返回true

所以我试着去替换

选择ExistsSelect1 FROM events,其中{fieldName}={value}LIMIT 1

选择退出从name='aname'限制为1的事件中选择1

而且它总是会回到真实的状态

我还直接在psql中测试了相同的查询,结果是:false…

execute返回true,如果结果集中返回了任何内容。在这种情况下,它将是0或1。只有当查询是更新时,它才会返回false,并且不会返回任何结果集。您需要将as与ResultSetParser一起使用来解析结果

这段代码还有另一个问题。不能在准备好的语句中提供列名。{fieldName}={value}。这将转化为字符串比较,可能总是错误的。相反,可以使用字符串插值将字段名插入查询中。尽管要小心,fieldName应该来自用户定义的输入,因为它容易受到SQL注入的攻击。你的用户不需要知道你的专栏

SQL(s"SELECT exists(SELECT 1 FROM events where ${fieldName} = {value} LIMIT 1)")
   .on("value" -> value)
   .as(scalar[Boolean].single)