Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试从servlet连接到Oracle XE时出现ORA-01017错误_Java_Oracle_Servlets - Fatal编程技术网

Java 尝试从servlet连接到Oracle XE时出现ORA-01017错误

Java 尝试从servlet连接到Oracle XE时出现ORA-01017错误,java,oracle,servlets,Java,Oracle,Servlets,我正试图编写一个用于学习的servlet应用程序,该应用程序连接到Oracle数据库,查询一些数据,然后将其打印到浏览器。简单 但是,在尝试连接到本地安装并运行的Oracle XE(19c)版本时,我遇到了ORA-01017:无效的用户名/密码。为了测试连接,我正在与系统用户建立连接。这是我的密码: // http://localhost:8080/demo/ public class DemoServ extends HttpServlet { public void doGet(H

我正试图编写一个用于学习的servlet应用程序,该应用程序连接到Oracle数据库,查询一些数据,然后将其打印到浏览器。简单

但是,在尝试连接到本地安装并运行的Oracle XE(19c)版本时,我遇到了ORA-01017:无效的用户名/密码。为了测试连接,我正在与系统用户建立连接。这是我的密码:

// http://localhost:8080/demo/
public class DemoServ extends HttpServlet {

    public void doGet(HttpServletRequest req,HttpServletResponse res)
    throws ServletException,IOException {

        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1523:xe", "system", "SYSTEM");

            con.close(); 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
我使用的用户是绝对存在的,我可以使用SQLDeveloper进行连接而不会出现问题

我愿意把这归因于我自己对Java的无知,但是如果我独立于任何servlet运行以下代码,我就可以连接并执行示例查询

public class DataReader {

    public static void main (String [] args) {

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");

            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1523:xe", "system", "SYSTEM");

            Statement statement = con.createStatement();
            ResultSet rs = statement.executeQuery("SELECT count(*) num FROM dual");

            if (rs.next()) {
                int i = rs.getInt("num"); // get first column returned
                System.out.println("number: " + i);
            }
            rs.close();
            statement.close();
            con.close();
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}
我一直在谷歌搜索解决方案,但我一直无法找到解决方案,所以我来了

我在Windows10上工作,使用Java1.8和Oracle19Cxe


任何帮助都会很好。谢谢

好吧,我终于开始工作了,但我无法解释原因

Oracle 19c区分大小写,我知道。我试图禁用它,但由于它是一个被贬低的功能,这似乎很快。我将系统用户的密码更改为“system”,我可以成功连接。“系统”作为密码继续失败

让我感到奇怪的是,我确信我过去曾尝试使用“系统”(小写)密码:(

不管怎样,我可能做了些傻事,但至少我已经渡过了难关。呸


谢谢大家!!

更正。为错误道歉!嗨,APC。我将连接字符串更改为您建议的,但它只生成ORA-12505,TNS:listener当前不知道SID…但是,我认为这不是问题,因为要获得上面的错误,连接一定成功了?当然如果不先建立到DB的成功连接,你就无法获得ORA-01017?我确定。我可以通过非servlet应用程序或DB环境登录,这似乎与servlet有关:(我注意到在不起作用的连接中,你将“XE”大写,而在起作用的连接中,将“XE”大写)是小写。这是一个打字错误。我尝试了两种方法,两种代码都没有区别。