当前位置: 首页 > 面试题库 >

“运算符不存在:整数=?” 使用Postgres时

朱锦
2023-03-14
问题内容

我有一个简单的SQL查询,该查询在go的数据库/ sql软件包提供的QueryRow方法内。

import (
  "github.com/codegangsta/martini"
  "github.com/martini-contrib/render"
  "net/http"
  "database/sql"
  "fmt"
  _ "github.com/lib/pq")
)

type User struct {
  Name string
}

func Show(db *sql.DB, params martini.Params) {
  id := params["id"]
  row := db.QueryRow(
    "SELECT name FROM users WHERE id=?", id)
  u := User{}
  err := row.Scan(&u.Name)
  fmt.Println(err)
}

但是,我收到错误消息pq: operator does not exist: integer =?看来代码不明白那个?仅仅是一个占位符。我怎样才能解决这个问题?


问题答案:

PostgreSQL
本机使用带编号的占位符($1$2…),而不是通常的位置问号。Go接口的文档在其示例中还使用了数字占位符:

rows, err := db.Query("SELECT name FROM users WHERE age = $1", age)

似乎Go接口没有像许多接口那样将问号转换为带编号的占位符,因此问号一直到数据库,并使所有内容混乱。

您应该能够切换到带编号的占位符而不是问号:

 row := db.QueryRow(
    "SELECT name FROM users WHERE id = $1", id)


 类似资料:
  • 我在我的postgresql函数中添加nth月(2),但在执行时显示错误错误错误:运算符不存在:没有时区整数的时间戳提示:没有运算符匹配给定的名称和参数类型(s)。可能需要添加显式类型转换。查询:选择pi_datenthMonth||月:: 间隔

  • 问题内容: 我需要使用位运算符比较两个整数。我遇到了一个问题,我必须不使用比较运算符就比较两个整数。使用位运算符会有所帮助。 假设a = 4;b = 5; 我们必须证明a不等于b。但是,我想进一步扩展它,例如,我们将显示哪个更大。这里b更大。 问题答案: 您至少需要将其与0进行比较,并且在概念上这是CPU所做的比较。例如 可以建模为等于,因为位必须相同才能返回0 如果这是你可以删除的,因为这可以暗

  • 当我在postgres中直接执行下面的查询时,它工作正常,但当我使用JPA运行时,就会出现下面的错误。 查询示例: 错误: ERRORorg.hibernate.engine.jdbc.spi.SqlExceptionHelper-ERROR:运算符不存在: boolean=byTea提示:没有运算符匹配给定的名称和参数类型。可能需要添加显式类型转换。 在JPA中配置如下: 基本上我试图实现的是,

  • 我想用JavaFx编程以下应用程序: 该程序生成用户必须解决的数学任务。通过复选框,您可以决定将出现哪些运算符(-*/)。如果选中所有4个选项,则每个操作员应使用一次。所以输出如下: 4 3-2*1/2 我的问题是,我不知道如何存储选定的运算符,以及如何在以后将它们作为工作运算符而不是字符或字符串插入程序中,因为程序最终必须将用户的解决方案与计算机计算的解决方案进行比较。 谢谢你的帮助和建议,我真

  • 问题内容: 因此,我正在与解释器一起玩,并输入以下内容: 最初,我认为这与False和True值有关,因为: 但这似乎无关紧要,因为False始终为0,并且从上述试验看来,它并不是输出的最大价值。 老实说,我在这里看不到这种模式,在文档中也找不到任何东西(老实说,我真的不知道如何有效地寻找它)。 那么,如何 在Python中工作? 问题答案: 从Python文档中: 表达式首先计算; 如果为假,则

  • 产生以下错误: 这些尝试是以普通用户的身份进行的。将它们作为root用户进行尝试会得到完全相同的结果。我已经在OS X上通过自制安装了postgres,并且我已经阅读了多次说明。