java - 如果密码包含特殊字符,则无法使用 JDBC 连接到 oracle 数据库

标签 java oracle jdbc

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

代码如下:

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)

请帮我解决这个问题。

最佳答案

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

您可以在 java 中尝试使用转义字符将密码括在双引号中,尝试更改

String pwd = "s@novi123";

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

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

关于java - 如果密码包含特殊字符,则无法使用 JDBC 连接到 oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21908610/

相关文章:

java - 对只读结果集 : updateString 的无效操作

java - 导入oracle.jdbc无法解决

java - jdbc javax.naming.NameNotFoundException 异常

java - fireTableDataChanged 对 JTable 没有影响

java - 消除Java排序比较中的越界错误

java - 如何使用 JSON 在 JSP 和 Java Controller 之间进行交互?

java - 为什么我的存储过程仅返回单个整数返回代码,但堆空间不足?

Java - 集合选择

sql - 写入 CASE 语句错误 ORA-00923

jdbc - Wildfly : Failed to load module for driver [com. ibm 上的 Db2 驱动程序/数据源设置]