Java 当现有名称为保留字时,如何更改HSQLDB中的列名?

Java 当现有名称为保留字时,如何更改HSQLDB中的列名?,java,sql,hsqldb,Java,Sql,Hsqldb,我正在尝试将我们的数据库从HSQLDB1.7升级到最新版本。不幸的是,有人将一列命名为“Default”。我似乎无法在SQL中重命名此列(这是在1.7中,因为重命名必须在升级之前进行) 我已尝试逃离该列: stmt.executeUpdate("ALTER TABLE table_name ALTER COLUMN \"DEFAULT\" RENAME TO new_name"); 和各种变化(包括“\”和[]),但似乎没有任何效果,我总是返回以下内容 java.sql.SQLExceptio

我正在尝试将我们的数据库从HSQLDB1.7升级到最新版本。不幸的是,有人将一列命名为“Default”。我似乎无法在SQL中重命名此列(这是在1.7中,因为重命名必须在升级之前进行)

我已尝试逃离该列:

stmt.executeUpdate("ALTER TABLE table_name ALTER COLUMN \"DEFAULT\" RENAME TO new_name");
和各种变化(包括“\”和[]),但似乎没有任何效果,我总是返回以下内容

java.sql.SQLException: Column not found: DEFAULT in statement [ALTER TABLE table_name ALTER COLUMN "DEFAULT"]

我明显遗漏了什么?

试着用勾选(`)。
这应该很好地转义默认字符串

ALTER TABLE `table_name` ALTER COLUMN `DEFAULT` RENAME TO `new_name`
从:

所有关键字,如果是双关键字,则可用于数据库对象 引用

所以试着用这个:

ALTER TABLE "table_name" ALTER COLUMN "DEFAULT" RENAME TO "new_name"
不幸的是,有人将一列命名为“Default”

问题似乎在于大小写。双引号不仅“转义”了您的姓名,而且使其区分大小写,这与大多数数据库中不区分大小写的非引号名称不同。因此,重命名列时必须使用准确的大小写:

altertable\u name将列“Default”重命名为新的\u名称
…或使用JDBC:

stmt.executeUpdate(“ALTER TABLE TABLE_name ALTER COLUMN\“Default\”重命名为新的_name”);

这就是在MySQL中引用名称的方式,而不是HSQLDB。我真的希望这是答案,不幸的是,它仍然不起作用:Column not found:Default in statement[ALTER TABLE TABLE_name ALTER Column“Default”]好的,没关系,我刚刚发现数据库升级方法运行了两次,所以第一次有效,第二次明显失败。谢谢!@JamesW:这是最好的;-)列已经是双引号了,它只是用\转义,因为它在java字符串中。但是在表名周围添加双引号实际上是错误的让事情变得更糟。