【问题标题】:Invalid SQL type: sqlKind = UNINITIALIZED error is shown无效的 SQL 类型:显示 sqlKind = UNINITIALIZED 错误
【发布时间】:2016-07-26 15:02:12
【问题描述】:
    String s1 = PasswordText4.getText();
    String s2 = ConfirmText4.getText();
    String s3 = NameText4.getText();
    String s4 = UsernameText4.getText();
    String s5 = jLabel16.getText();

    if (PasswordText4.getText().equals(ConfirmText4.getText()) && s1.length() != 0 && s3.length() != 0 && s1.length() >= 4 && s2.length() >= 4) {
        try {
            String sql
                    = "BEGIN"
                    + "UPDATE LOGIN SET USERNAME = ?, PASSWORD = ?, NAME = ?"
                    + "WHERE USERNAME = ?;"
                    + "commit;"
                    + "END;";
            CallableStatement cstmt = conn.prepareCall(sql);
            cstmt.setString(1, UsernameText4.getText());
            cstmt.setString(2, PasswordText4.getText());
            cstmt.setString(3, NameText4.getText());
            cstmt.setString(4, jLabel16.getText());

            //System.out.println(jLabel16.getText());

            int dialogButton = JOptionPane.YES_NO_OPTION;
            int dialogResult = JOptionPane.showConfirmDialog(null, "Are you sure you want to update?", "Warning", dialogButton);
            if (dialogResult == JOptionPane.YES_OPTION) {
                cstmt.execute();
                JOptionPane.showMessageDialog(null, "Information Updated");
                jLabel15.setText(NameText4.getText());
                jLabel16.setText(UsernameText4.getText());
                jLabel17.setText(PasswordText4.getText());
            }

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, e);
        }
    }

这段代码有什么问题?当我尝试更新我的数据时,无效的 SQL 类型:

显示 sqlKind = UNINITIALIZED 错误。

请帮我找到解决问题的方法。

提前感谢您的回答。

【问题讨论】:

  • 您缺少在查询部分之间添加空格:“ UPDATE...等。您的查询实际上以BEGINUPDATE 开头。考虑打印您的sql 字符串以查看是什么错了。
  • 在 IntelliJ 中遇到了同样的问题。 IntelliJ 以蓝色突出显示“Update”、“AND”、“FROM”等关键字,如果未突出显示,则您知道关键字之前的上一行需要一个空格。

标签: java oracle plsql


【解决方案1】:

你也可以这样做,

String sql = "UPDATE LOGIN SET USERNAME = ?, PASSWORD = ?, NAME = ? WHERE USERNAME = ?" 

PreparedStatement preparedStatement = dbConnection.prepareStatement(sql);
preparedStatement .setString(1, UsernameText4.getText());
preparedStatement .setString(2, PasswordText4.getText());
preparedStatement .setString(3, NameText4.getText());
preparedStatement .setString(4, jLabel16.getText());

preparedStatement .executeUpdate();
....
dbConnection.commit();

【讨论】:

    【解决方案2】:

    Berger 是对的,你需要在你的查询部分之间添加空格,例如:

    String sql = " BEGIN "
               + " UPDATE LOGIN SET USERNAME = ?, PASSWORD = ?, NAME = ? "
               + " WHERE USERNAME = ?; "
               + " commit; "
               + " END;" ;
    

    【讨论】:

      【解决方案3】:

      朋友们,

      我在执行一系列 SQL 查询时也遇到了同样的问题(通过我的 Java 程序注释的查询很少

      解决方法:删除所有注释的 SQL 行,然后执行,就不会再出现“UNINITIALIED”错误了。

      【讨论】:

      • 我在执行 SQL 顾问程序时收到了这个确切的错误。从查询中删除 cmets 就可以了。谢谢。
      【解决方案4】:

      java.sql.sqlexception:无效的 SQL 类型:sqlKind = UNINITIALIZED

      当存在语法错误时会发生此错误。检查您的语法,打印查询并在您的 SQL 客户端工具(如 SQL Developer、Toad、DBeaver..)上运行相同的查询

      例子:考虑下面是Sysout的o/p

      [select * from dual] & ["select * from dual"] //sqlKind = UNINITIALIZED

      select * from dual // 这很好

      注意所有三个查询都运行,但前两个需要替换,并且在发送执行之前必须删除 []""。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多