java - 当现有名称是保留字时,如何更改 HSQLDB 中的列名称?

标签 java sql hsqldb

我正在尝试将我们的数据库从 HSQLDB 1.7 升级到最新版本。不幸的是,有人将列命名为“默认”。我似乎无法在 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"]

我显然遗漏了什么?

最佳答案

Unfortunately someone has named a column "Default"

问题似乎出在外壳上。双引号不仅可以“转义”您的名字,还可以使它们区分大小写,这与大多数数据库中不区分大小写的非引号名称不同。所以在重命名列时必须使用准确的大小写:

ALTER TABLE table_name ALTER COLUMN "Default" RENAME TO new_name

... 或使用 JDBC:

stmt.executeUpdate("ALTER TABLE table_name ALTER COLUMN \"Default\" RENAME TO new_name");

关于java - 当现有名称是保留字时,如何更改 HSQLDB 中的列名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913477/

相关文章:

javascript - 如何在 youtube 上获取直播视频的可下载网址

java - JScrollPane 不会显示在 JTextArea 中

java - 为什么 File.exists() 在多线程环境中表现异常?

sql - Oracle 分层总和(叶到根的距离)

mysql - Mysql 中查询速度慢,性能不佳。 mysql-slow.log 中查询时间较长

sql - 如何在 SQL 2000/2005 中执行区分大小写的搜索和替换?

java - 如何使 HSQLDB 成为 Windows 服务?

java - 将对象传递给网络服务

java - 为方法运行 junit 测试时出现 org.hsqldb.jdbcDriver ClassNotFoundException

sql - 在 HSQLDB/JDBC 中取消长时间运行的查询