当前位置: 首页 > 知识库问答 >
问题:

如果密码具有特殊字符,则无法使用JDBC连接到oracle数据库

薛泰
2023-03-14

我正在尝试使用JDBC连接到oracle数据库。

以下是de::

public class OraclePwdTest {
static{
    try {           
        Class.forName("oracle.jdbc.OracleDriver");

    } catch (ClassNotFoundException e) {            
        e.printStackTrace();
    }
}
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String ip ="192.168.20.145";
    String sid = "oradg";
    int port = 1521;
    String user = "sys";
    String pwd = "s@novi123";
    Connection conn = null;
    String url = "jdbc:oracle:thin:"+"(DESCRIPTION =" + 
            "(ADDRESS_LIST =" + 
            "(ADDRESS = (PROTOCOL = TCP)(HOST = "+ ip +")" +  
            "(PORT = " + port + "))" +  
                ")" + 
            "(CONNECT_DATA = (SRVR=DEDICATED) " + 
            "(SID = " + sid + 
            "))" + 
            ")"; 
    java.util.Properties prop = new java.util.Properties ();

    prop.put ("user", user); 
    prop.put ("password", pwd);
    prop.put ("internal_logon", "sysdba");
    try {
        conn = DriverManager.getConnection(url,prop);

        System.out.println("Connected");
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

如果密码有#@这样的特殊字符。。。那么上面的代码就不起作用了。它使用普通密码。

我收到以下错误消息::

java.sql.SQLException: ORA-01017:无效的用户名/密码;拒绝登录

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:389)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:382)
    at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:573)
    at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
    at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:154)
    at TestOracleConnection.main(TestOracleConnection.java:54)

请帮我解决这个问题。

共有2个答案

孟智志
2023-03-14

一个简单的代码如下所示...当你使用瘦驱动程序时,你不需要复杂地处理tnsnames.ora.的所有值

        Class.forName("oracle.jdbc.OracleDriver");
        Properties properties = new Properties();
        properties.setProperty("user", username);
        properties.setProperty("password", password);
        Connection con = DriverManager.getConnection("jdbc:oracle:thin:@<DB_HOST>:<PORT>:<SID>, properties);

即jdbc:oracle:thin:@192.168.20.145:1521:oradg

段干茂实
2023-03-14

当用户名、密码或连接字符串(如@/等)中存在特殊字符时,我们必须将其包含在双引号中,例如,如果密码为p@ssword我们以用户名/p@ssword“@database

您可以在java中尝试同样的方法,使用转义字符将密码括在双引号中,然后尝试更改

String pwd = "s@novi123";

String pwd = "\"s@novi123\"";

我不是java专家,只是猜测scape字符应该是\;-)

 类似资料:
  • 问题内容: 我正在尝试使用JDBC连接到oracle数据库。 以下是代码:: } 如果密码具有#@等特殊字符,则以上代码将不起作用。它使用普通密码。 我收到以下错误消息: java.sql.SQLException:ORA-01017:无效的用户名/密码;登录被拒绝 请帮助我解决问题。 问题答案: 当特殊字符出现在用户名,密码或类似的连接字符串,等等,我们有内双引号括起来,例如,如果密码是它包含我

  • 有时我得到 当我的Web应用程序尝试连接数据库时。我正在使用JDBC、准备语句并作为服务器Apache Tomcat 6。只有当我重新启动Apache服务器时,此错误才会消失。有人能告诉我此异常的原因是什么以及如何修复它吗?.我确信凭据是正确的。 以下是完整的日志:

  • 我无法使用R Studio连接到Oracle数据库。 下面是我为设置连接而执行的代码。 以上代码已成功执行。 我在下面的代码中得到一个错误。 错误. jcall(drv@jdrv,"Ljava/sql/Connection;","Connec",as.character(url)[1],:java.sql.SQLExctive:指定无效的Oracle URL 我的R版本是3.4.0

  • 我正在尝试一个程序来检查与oracle数据库的连接,如下所示 但在eclipse中运行之后,它显示了以下异常。 JAVAsql。SQLException:Listener拒绝了连接,出现以下错误:ORA-12505,TNS:Listener当前不知道连接描述符中给出的SID 请帮助我,我是oracle数据库的新手。

  • 我正在尝试使用jdbc连接到我的MS SQL2008数据库,如下所示,但它的给出错误 我的数据库名为,实例名为。请建议我如何提供数据库实例名称和数据库名称在URL。 上面写着 但是当我尝试用相同的用户名和密码从DB GUI登录时,它被登录了。想知道在jdbc设置中在哪里提供数据库实例的详细信息 我也试过用下面的dut不管用

  • 我创建了一个简单的类来测试与我的localhost数据库的通信,这是我用Mysql Workbench创建的。Mysql服务器正在运行。JDBC驱动程序被添加到我的项目的类路径中。 当我运行程序时,我得到以下异常: 线程“main”com.mysql.cj.jdbc.Exceptions.CommunicationsException异常:通信链接失败 最后一个成功发送到服务器的数据包是在0毫秒前