撇号
和引号
在SQL查询字符串中有什么作用?如何替换撇号
?
主要兴趣是他们在 PostgreSQL 中的特定角色。
离开 撇号
会弄乱 SQL 查询,例如:
SELECT role FROM "USER_ROLES" WHERE "USER_ROLES".login = admin;
当 admin 是一个值时,得到一个 'column' admin does not exist 错误。编写 'admin' 可以纠正问题:
SELECT role FROM "USER_ROLES" WHERE "USER_ROLES".login = 'admin';
实际问题是在另一个上下文中使用查询:
<module-option name="rolesQuery" value="SELECT 'role', 'Roles' FROM "USER_ROLES" WHERE login='?'"/>
根据要求,表定义为:
CREATE TABLE "USER_ROLES" (
login text NOT NULL,
role text,
CONSTRAINT "USER_ROLES_pkey" PRIMARY KEY (login ),
CONSTRAINT "USER_ROLES_login_fkey" FOREIGN KEY (login)
REFERENCES "USER" (login) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
PostgreSQL 版本 9.1。
最佳答案
您可以将单引号 ('
) 替换为dollar-quoting在 PostgreSQL 中避免它们在不同上下文中的特殊含义。 (不过不确定美元符号是否也有特殊含义):
<module-option name="rolesQuery" value="SELECT role FROM "USER_ROLES" WHERE login = $$?$$"/>
另一个想法是使用 '
代替单引号:
<module-option name="rolesQuery" value="SELECT role FROM "USER_ROLES" WHERE login = '?'"/>
关于sql - PostgreSQL 中的撇号和引号 - 如何替换撇号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13742585/