Oracle中的字段名不要乱用""

      在上次写的一篇笔记(在Oracle中使用内部关键字做字段名)中我提到用""解决Oracle关键字作为字段名的办法。最近却发现""不同于SQL Server中的[],乱用会造成不必要的麻烦。
      发现这个情况源于使用PowerDesigner做数据库设计,我直接使用了它生成的SQL脚本来创建数据库。这当然没有出现问题,但接下来向表中插入数据时却报出了ORA-00904 invalid identifier错误,字段名不存在?由于是用的NHibernate操作数据库加上刚学习这不久,于是怀疑是不是NHibernate用的不对。在仔细查阅了文档并确认映射无误后,又直接写INSERT还是报错,我开始怀疑是字段名的问题。
      查看PowerDesigner生成的脚本,所有字段名都加上了"",同时在定义PrimaryKey等约束时也对字段名加上了"",难道说?于是尝试用如下两句建两张表:
      CREATE TABLE Table1 (Field1 INT);
      CREATE TABLE Table2 ("Field1" INT);
      再尝试用如下两句插入记录:
      INSERT INTO Table1 (Field1) VALUES (1);
      INSERT INTO Table2 (Field1) VALUES (1); // ORA-00904
      结果第一句正确,第二句报错ORA-00904,OK这下问题清楚了。可见在Oracle中除非字段名与关键字冲突,否则不要乱用""以免造成不必要的麻烦。
posted on 2007-09-20 09:31  heminzhou 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/heminzhou/archive/2007/09/20/899485.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您在 Oracle 数据库定义表的时候添加了文注释,那么在使用 JDBC API 获取字段名时,会返回文注释而不是字段名。 这是因为在 Oracle 数据库字段名和字段注释是分开存储的。JDBC API 获取字段名时,使用的是 `ALL_TAB_COLUMNS` 视图,而该视图的 `COLUMN_NAME` 对应的是字段注释,而不是字段名。如果您需要获取字段名而不是注释,可以使用 `ALL_TAB_COLS` 视图,该视图的 `COLUMN_NAME` 对应的是字段名。 以下是一些示例代码: ```java // 假设您已经连接到了数据库,使用了 PreparedStatement 执行 SQL 查询 PreparedStatement statement = connection.prepareStatement("SELECT * FROM my_table"); // 获取 ResultSetMetaData 对象,使用它来获取字段名 ResultSetMetaData metaData = statement.getMetaData(); int columnCount = metaData.getColumnCount(); for (int i = 1; i <= columnCount; i++) { // 使用 ALL_TAB_COLS 视图获取字段名 String columnName = metaData.getTableName(i) + "." + metaData.getColumnName(i); // 处理字段名,比如输出到控制台 System.out.print(columnName + "\t"); } System.out.println(); // 遍历查询结果数据 ResultSet resultSet = statement.executeQuery(); while (resultSet.next()) { // 使用 ResultSet 对象获取数据,可以使用字段名或者字段的索引 String column1Data = resultSet.getString("column1"); int column2Data = resultSet.getInt(2); // 处理数据,比如输出到控制台 System.out.println(column1Data + "\t" + column2Data); } // 记得关闭 ResultSet 和 PreparedStatement 对象 resultSet.close(); statement.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值