当前位置: 首页 > 知识库问答 >
问题:

getParameterMetaData()抛出java.sql.SQLSyntaxErrorException: ORA-00904:"F":无效标识符

吕鹏
2023-03-14

我用java编写了一个简单的程序,它创建到Oracle数据库的连接并执行更新查询。

查询成功执行,但如果更新查询包含以“F”开头的列,则prepareStatement.getParameterMetaData()抛出异常

“java.sql.SQLSyntaxErrorException:ORA-00904:“F”:无效标识符”。

如果我删除以“F”开头的列,那么< code > prepare statement . getparametermetadata()将正确执行。

我的配置是,

Oracle:12.1.0.2

JDK:1.8

ojdbc 驱动程序:ojdbc7.jar(包含在 12.1.0.2 中)

我发现ojdbc6.jar也存在同样的问题。

司机有什么问题吗?

代码:

公共类TestDriver{

public static void main(String args[]) {
    String sql = "UPDATE test SET test1 = ?, Fun=? WHERE test2 = ?";
    PreparedStatement ppt = null;
    Connection connection = null;
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        connection = DriverManager.getConnection(
            "jdbc:oracle:thin:@127.0.0.1:1521/pdborcl2","oracleTrunk","oracleTrunk");
     ppt = connection.prepareStatement(sql);

    for(int i=0; i<1;i++) {
    ppt.setString(1, null);
    ppt.setString(2, null);
    ppt.setString(3, "1");
    ppt.executeUpdate();
    System.out.println("MSG "+ppt.getParameterMetaData());
    }
    }catch(Exception e) {
        System.out.println("e  "+e);
    } finally {
        try {
            ppt.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            connection.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

共有1个答案

巫健柏
2023-03-14

这对我来说真的像一个错误,因为PredmentStatement按预期工作。但是,我找到了一个解决方法

如果您使用引号来定义列,ppt.getParameterMetaData()不再抛出异常。

所以你需要写作

String sql = "UPDATE test SET test1 = ?, \"FUN\"=? WHERE test2 = ?";

请记住,在Oracle中使用双引号定义名称时,必须区分大小写。因此,它是< code>\"FUN\",而不是< code>\"Fun\",因为所有名称在不带引号的情况下都会转换为大写。

 类似资料:
  • 问题内容: 我尝试使用Oracle数据库编写以下内部联接查询: 这给出了以下错误: 一个表的DDL为: 问题答案: 您的问题是那些有害的双引号。 Oracle SQL允许我们忽略数据库对象名称的大小写,只要我们创建它们时都使用大写的名称,或者不使用双引号即可。如果我们在脚本中使用大小写混合或小写并且将标识符括在双引号中,则当我们引用对象或其属性时,我们都被要求使用双引号和精确的大小写: tl; d

  • ORA-00904:“strdef”:无效标识符 > Oracle数据库版本为: Oracle Database 11g Enterprise Edition版本11.2.0.4.0-64位Production PL/SQL版本11.2.0.4.0-Production“Core 11.2.0.4.0 Production”TNS for Linux:版本11.2.0.4.0-Production

  • 我得到这个错误,而在Oracle数据库中执行查询: ORA-00904:“STRDEF”:无效标识符 > Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产PL/SQL 11.2.0.4.0版-生产“CORE 11.2.0.4.0生产”Linux版TNS:11.2.0.4.0版-生产NLSRTL 11.2.0.4.0版-生产 STRDE

  • 在PL/SQL中执行以下查询时,我得到ORA-00904:“\d$”:无效标识符错误。 我也尝试使用单引号,但仍然面临同样的错误。 有人能帮我解决这个问题吗

  • Oracle 11g Express Edition..创建表时出错 ORA-00904:无效标识符

  • 我已经在虚拟XP中安装了Oracle 10g,并使用 并且成功地创建了表。但是当我试图通过简单的查询获取值时,如 我得到的错误就像 ORA-00904:"bbb":无效标识符 我不能理解我在这里做错了什么。