当前位置: 首页 > 面试题库 >

JDBC:抱怨无效符号,但看起来还不错

巩衡
2023-03-14
问题内容

我必须使用JDBC写入数据库(不选择休眠/ ibatis),而我的数据库是Oracle 11g。

我创建以下查询: insert into user(user_id, username, age, creation_ts) values(seq_userid.NEXTVAL, 'Jack', 19,TO_TIMESTAMP('14/12/2010 15/09/46', 'DD/MM/RR HH24/MI/SS'));

但是我的statetement.execeuteUpdate(above sql)。生成无效的符号异常。但是当我在松鼠中执行查询时,它就被提交了。有人知道为什么会这样吗?

Edit:
user table:
id: number : not null
username varchar2(30) not null
age number(10) not null
creation_ts timestamp not null

Error:
ORA-00911: invalid character

Java snippet:
try
        {       
            DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
            String url = "privatized";
            Connection conn = DriverManager.getConnection(url, "username", "password");

            Statement st = conn.createStatement();

            Format formatter = new SimpleDateFormat(dateTimeFormatString);
            String formattedDate = formatter.format(Calendar.getInstance(TimeZone.getDefault()).getTime());

            StringBuilder insertQuery = new StringBuilder("insert into user(user_id, username, age, creation_ts) values(seq_userid.NEXTVAL,");
                insertQuery.append(username);
                insertQuery.append(",");
            insertQuery.append(age);
            insertQuery.append(",TO_TIMESTAMP('");
            insertQuery.append(formattedDate);
            insertQuery.append("', 'DD/MM/RR HH24/MI/SS'));");
            System.err.println(insertQuery.toString());
            st.executeUpdate(insertQuery.toString());

            conn.close();
        } catch (SQLException ex){
            System.err.println(ex.getMessage());
            System.err.println(ex.getCause().toString());
            ex.printStackTrace();
            System.out.println("=========================================");
        } catch(Exception ex) {
            System.err.println(ex.getMessage());
        }

问题答案:

正如我在上面的评论中所述,问题可能是由于SQL语句末尾的多余分号引起的。看这篇文章

您可能还需要查看PreparedStatments,以使您的生活更轻松。这是上述代码的粗略翻译。我已经离开了一些部分,并且最有可能出现错误。

String query = "insert into user(user_id, username, age, creation_ts) values(?,?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(query);
... //fill in all your parameters
pstmt.setTimestamp(4, new Timestamp(System.currentTimeMillis()) );
... //execute here


 类似资料:
  • 问题内容: 我使用SpringBoot进行REST Web服务开发,并使用SonarQube进行静态分析。 我的应用程序中有一些端点,它们的外观如下: SonarQube抱怨将ResponseEntity与通配符一起使用,并向我报告了一个 严重问题:“返回参数中不应使用通用通配符类型” 。 我想知道是否应该在SonarQube中禁用此验证,或者针对这些情况提出不同的返回类型。 你怎么看待这件事?

  • 问题内容: 更新到Docker v1.7.0(以及boot2docker)后,运行时出现以下错误: 这是该版本的已知问题吗,我该如何解决? 问题答案: 这是boot2docker版本1.7.0中引入的一个已知问题:https : //github.com/boot2docker/boot2docker/issues/824 更新到boot2docker 1.7.1 修复了这个问题,如所描述这里。

  • 我有以下一段代码在我的程序,我正在运行SonarQube 5的代码质量检查后,它与Maven集成。 然而,Sonar要求删除这个对局部变量“session”的无用赋值。

  • 我正在尝试执行以下查询:

  • 问题内容: 我尝试在Ubuntu 12.04上安装Pycharm,并且得到以下信息: 正常工作该怎么办? 问题答案: 由于Oracle设置的限制,大多数较新的发行版不再包含Oracle(Sun)JDK。相反,它们与OpenSDK一起提供。尽管OpenSDK适用于大多数应用程序,但PyCharm似乎存在一些问题。 您必须手动安装Oracle(Sun)JDK,并确保它是默认JDK或在启动PyCharm

  • 在F#中,我试图编写一个函数,给定两个字符串,它将返回第一个字符串中第二个字符串开头的所有索引。我的函数看起来像这样: 问题是在线