【问题标题】:java/SQL ORA-00942 table or view does not existjava/SQL ORA-00942 表或视图不存在
【发布时间】:2015-08-06 08:08:49
【问题描述】:

我的 sql 一直有问题。我一直在尝试构建一个登录系统,该系统将从 Oracle 数据库中读取用户名和密码。当我连接并执行命令时

String sql="select * from tutilizadores where username= ? and password= ?";

我收到错误消息 ORA-00942。该表已在 sys.d 下创建。我很困惑。

这里是引用问题的代码:

        String sql="select * from tutilizadores where username= ? and password= ?";
        PreparedStatement pst = conn.prepareStatement(sql);
        pst.setString(1, USERNAME.getText());
        pst.setString(2, PASSWORD.getText());
        rs=(OracleResultSet)pst.executeQuery();
        if (rs.next()){
        JOptionPane.showMessageDialog(null, "O username e password estavam bem");
        //Fecha a janela
        //close();

        //nova janela-Tutilizadores
        Tutilizadores c = new Tutilizadores();
        c.setVisible(true);
        }

非常感谢。

【问题讨论】:

  • 首先,永远不要在 SYS 模式下创建任何用户对象。制作自己的架构。当您执行查询时,您以谁的身份登录?
  • String nameForConnect = "sys as sysdba";字符串传递 = "Abcd1234";字符串 url = "jdbc:oracle:thin:@localhost:1521:db01";
  • sys as sysdba 是我的连接方式
  • 你试过select * from sys.tutilizadores吗?
  • 是的,我做到了。又是同样的消息。

标签: java sql oracle


【解决方案1】:

问题的数量通常仅限于这几个选项:

  1. 您登录到错误的数据库
  2. 使用错误的用户名登录
  3. 您需要使用schema.tutilizadores 中的架构名称来限定表名。如果不确定,则将架构视为用于创建表的用户名。
  4. 不知何故,您设法将表名弄错了。可能 table 区分大小写:如果在双引号内限定,则大小写将按字面匹配,否则 oracle 将采用大写。

为了验证问题所在,请考虑执行并提供以下 SQL 的输出:

SELECT table_name, owner
FROM dba_tables
WHERE lower(table_name) = 'tutilizadores'

【讨论】:

  • 它必须是 3。我已经覆盖了其他两个,我在 2 下连接。我只有这个数据库,我肯定连接。
  • 所以我以 sys as sysdba 的身份输入数据库并执行了: SQL> select Tables, sys 2 from tutilizadores 3 WHERE upper(table_name) = 'tutilizadores';
  • 获取:ora-00942:表未见或不存在
  • 我应该在不同的用户下创建另一个表并尝试吗?
  • 我的意思是您按原样尝试查询。没有替换或替代的东西。该查询需要以 sysdba 身份运行,并且可能还可以访问该 dba 视图。
猜你喜欢
  • 1970-01-01
  • 2019-01-22
  • 2012-04-23
  • 2013-04-14
  • 2015-11-09
  • 2011-12-10
  • 2015-01-30
相关资源
最近更新 更多