【问题标题】:SQL command not ended properlySQL 命令未正确结束
【发布时间】:2016-09-21 04:30:49
【问题描述】:

我尝试在 java 中编写一个从 sql 访问一些表的代码,但是当我尝试运行该代码时,我收到一条错误消息:

java.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令不正确 结束了

这是一直困扰我的代码:

history.addActionListener(new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent actionEvent)
    {
        for(int i = 0; i < table.getRowCount(); i++)
            for(int j = 0; j < table.getColumnCount(); j++)
                table.setValueAt("", i, j);

        int i=0;
        try
        {
            rs = stmt.executeQuery("SELECT toyname, toyid, price "
                    +" FROM toys t, userbuy u " 
                                                +" WHERE u.toyid=t.toyid "
                    +" AND u.userid= "+user1.getUserid()+" )");
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try {
                if(rs.next())
                {
                    table.setValueAt(rs.getString(1), i, 0);
                    table.setValueAt(rs.getString(2), i, 1);
                    table.setValueAt(rs.getString(3), i, 2);
                    i++;
                    while(rs.next())
                    {
                        table.setValueAt(rs.getString(1), i, 0);
                        table.setValueAt(rs.getString(2), i, 1);
                        table.setValueAt(rs.getString(3), i, 2);
                        i++;
                    }
                }
            } catch (SQLException e) {
                JOptionPane.showMessageDialog(null, e.getMessage());
            }
        }
    }
});

这是我的两张桌子:

CREATE TABLE users
(
  userid    NUMBER(2) NOT NULL CONSTRAINT users_pk PRIMARY KEY,
  username        VARCHAR(17) NOT NULL,
  password    VARCHAR(20),
  email   VARCHAR(20),
  adress    VARCHAR(20),
  CNP     VARCHAR(14)
);
CREATE TABLE userbuy
(
  userid    NUMBER(2),
  buyid    NUMBER(2) ,
  toyid NUMBER(2),
  CONSTRAINT userid_fk FOREIGN KEY (userid) REFERENCES users(userid),
  CONSTRAINT buyid_fk FOREIGN KEY (buyid) REFERENCES buy(buyid)
);

有人知道这里出了什么问题吗?

【问题讨论】:

  • 应该删除 SQL 字符串末尾的 " )"
  • 您还应该考虑使用PreparedStatement,因为它提供(除其他外)比连接参数值更简洁的语法。

标签: oracle


【解决方案1】:

删除那个" )",可能你忘记了:)

【讨论】:

    【解决方案2】:

    正确的sql查询:

    rs = stmt.executeQuery("SELECT t.toyname, t.toyid, t.price "
                      +" FROM toys t, userbuy u "+" WHERE u.toyid=t.toyid "
                       +" AND u.userid= "+user1.getUserid());
    

    【讨论】:

      【解决方案3】:

      您的 sql 查询错误。请正确 sql

      rs = stmt.executeQuery("SELECT toyname, toyid, price "
                                  +" FROM toys t, userbuy u "                                                     +" WHERE u.toyid=t.toyid "
                                  +" AND u.userid= "+user1.getUserid());
      

      建议使用PreparedStatement摆脱sql injection

      PreparedStatement 的示例

      【讨论】:

      • 如果您愿意帮助我,我有一个请求。我正在编写一个代码 2 周,但我似乎一无所获。这是我第一次同时使用 java 和 sql,我不知道我大部分时间在做什么。我认为我认为代码几乎完成了,但我几乎没有错误,我不知道如何处理它们。你有什么机会可以帮助我吗?
      • @katy 你已经被告知了四次问题所在。如果您应用这些解决方案,发现它们是正确的,然后回到这里并将答案标记为正确,而不是仅仅寻求更多帮助,这将对每个人都更具建设性。
      • @katy 当然,我会尽我所能。给我发邮件。检查我的个人资料
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多