如果Postgres表中的列名为
例如:
year
,则设置该列值的 INSERT
查询应如何编写?例如:
INSERT INTO table (id, name, year) VALUES ( ... );
在单词 year 附近出现错误。year
,则设置该列值的 INSERT
查询应如何编写?INSERT INTO table (id, name, year) VALUES ( ... );
在单词 year 附近出现错误。Table
、Schema
、Function
或Trigger
的名称,那么您必须使用双引号,或者可以用点连接指定模式名称。order
是由Postgres注册的关键字。在某些情况下,您必须将此关键字用作表名。keywords
的表。这就是Postgres的优美之处。select * from schema_name.order;
2.
select * from "order";
"
引用,如果标识符中出现双引号,则必须重复双引号。请参见BNF:
https://ronsavage.github.io/SQL/sql-2003-2.bnf.html#delimited%20identifier
这是引用标识符的Java代码:
static String delimited_identifier (String identifier)
{
return "\"" + identifier.replaceAll ("\"", "\"\"") + "\"";
}
这是构建插入的代码:
static String build_insert (String table, String[] columns)
{
StringBuilder sql = new StringBuilder ();
StringBuilder values = new StringBuilder ();
sql.append ("INSERT INTO ");
sql.append (delimited_identifier (table));
sql.append (" (");
int c = 0;
if (columns.length > 0) {
sql.append (delimited_identifier (columns[c]));
values.append ("?");
}
for (++c; c < columns.length; c++) {
sql.append (", ");
sql.append (delimited_identifier (columns[c]));
values.append (", ?");
}
sql.append (") VALUES (");
sql.append (values.toString ());
sql.append (")");
return sql.toString ();
}
例子:
String sql = build_insert ("Person", new String[]{"First name", "Last name"});
MyTable
、myTable
和mytable
都是相同的。而双引号可以避免这种转换。因此,"MyTable"
不再与mytable
相同。 - A.H.update "user" set "password" = 'value...';
可以很好地工作。 - Phill