【问题标题】:URL string format for connecting to Oracle database with JDBC使用 JDBC 连接 Oracle 数据库的 URL 字符串格式
【发布时间】:2010-11-06 10:45:43
【问题描述】:

我是 Java 相关 Web 开发的新手,我似乎无法获得一个使用 JDBC 工作的简单程序。我正在使用现成的 Oracle 10g XE 和 Eclipse EE IDE。从到目前为止我检查过的书籍和网页中,我已将问题缩小到错误写入的数据库 URL 或丢失的 JAR 文件。我收到以下错误:

java.sql.SQLException: 找不到适合 jdbc:oracle://127.0.0.1:8080 的驱动程序

使用以下代码:

import java.sql.*;

public class DatabaseTestOne {
    public static void main(String[] args) {
        String url = "jdbc:oracle://127.0.0.1:8080";
        String username = "HR";
        String password = "samplepass";

        String sql = "SELECT EMPLOYEE_ID FROM EMPLOYEES WHERE LAST_NAME='King'";
        Connection connection;
        try {
            connection = DriverManager.getConnection(url, username, password);
            Statement statement = connection.createStatement();
            System.out.println(statement.execute(sql));
            connection.close();
        } catch (SQLException e) {
            System.err.println(e);
        }
    }
}

无论如何,数据库 URL 的正确格式是什么?他们被提及很多,但我找不到描述。

编辑(分辨率):

根据 duffymo 的回答,我从 Oracle's download site 获得了 ojdbc14.jar,并将其放入 Eclipse 项目的引用库中。然后我把代码的开头改成

...
// jdbc:oracle:thin:@<hostname>:<port>:<sid>
String url = "jdbc:oracle:thin:@GalacticAC:1521:xe";
...

它成功了。

【问题讨论】:

    标签: oracle jdbc oracle-xe


    【解决方案1】:

    有两种设置方法。如果您有 SID,请使用此(旧)格式:

    jdbc:oracle:thin:@[HOST][:PORT]:SID
    

    如果您有 Oracle 服务名称,请使用此(较新)格式:

    jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
    

    来源:this OraFAQ page

    call to getConnection() is correct

    另外,正如 duffymo 所说,通过在类路径中包含 ojdbc6.jar 来确保实际的驱动程序代码存在,其中数字对应于您正在使用的 Java 版本。

    【讨论】:

    • 我强烈推荐使用新格式!旧格式仅连接到一个特定的数据库实例和一个特定的数据库实例。如果您稍后选择创建数据库集群,即为了可扩展性,您将无法连接到任何其他节点而不引入另一个连接字符串。服务提供了灵活性,尤其是对于 Oracle RAC 环境。计划停机时间、协调连接和基于服务的性能分析,这一切都伴随着使用/SERVICE 而不是:SID。数据库在安装时默认创建一个与数据库名称相同的服务。
    【解决方案2】:

    here

    您的网址完全不正确。应该是这样的:

    url="jdbc:oracle:thin:@localhost:1521:orcl"
    

    您也不注册驱动程序类。你想下载瘦驱动 JAR,把它放在你的 CLASSPATH 中,让你的代码看起来更像this

    更新:“ojdbc14.jar”中的“14”代表 JDK 1.4。您应该将您的驱动程序版本与您正在运行的 JDK 相匹配。我打赌这意味着 JDK 5 或 6。

    【讨论】:

    【解决方案3】:

    url的正确格式可以是以下格式之一:

    jdbc:oracle:thin:@<hostName>:<portNumber>:<sid>;  (if you have sid)
    jdbc:oracle:thin:@//<hostName>:<portNumber>/serviceName; (if you have oracle service name)
    

    并且不要在那里放置任何空间。 尝试使用 1521 作为端口号。 sid(数据库名称)必须与环境变量中的那个相同(如果您使用的是 windows)。

    【讨论】:

    • 这个涵盖了两个数据库。这个答案应该有更多的赞成票。从我这里拿一个
    【解决方案4】:

    如果你使用的是oracle 10g expree版那么:
    1.用于加载类使用 DriverManager.registerDriver (new oracle.jdbc.OracleDriver()); 2.用于连接数据库使用 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:username/password@localhost:1521:xe");

    【讨论】:

      【解决方案5】:
      String host = <host name>
      String port = <port>
      String service = <service name>
      String dbName = <db schema>+"."+service
      String url = "jdbc:oracle:thin:@"+host+":"+"port"+"/"+dbName
      

      【讨论】:

        【解决方案6】:

        以下是 Oracle 接受的受支持的有效 JDBC URL:

        使用 Oracle JDBC 驱动程序 (oracle.jdbc.pool.OracleDataSource) 进行连接:

        String url = "jdbc:oracle:thin:@tcp://my-host:1522/my-service";
        OracleDataSource ods = new OracleDataSource();
        ods.setUser(userName);
        ods.setPassword(password);
        ods.setURL(url);
        Connection con = ods.getConnection();
        

        Oracle JDBC 驱动程序支持以下 URL 格式:

        • EZConnect 格式

          从 19c 开始,可以在 URL 的末尾添加连接属性。 语法使用“?”指示连接属性的开始,并以“&”作为每个属性之间的分隔符。

          语法

          jdbc:oracle:thin:@[[protocol:]//]host1[,host2,host3][:port1][,host4:port2] [/service_name][:server_mode][/instance_name][?connection properties]

          例子:

          • jdbc:oracle:thin:@mydbhost:1521/mydbservice
          • jdbc:oracle:thin:@tcp://mydbhost:1521/mydbservice
          • jdbc:oracle:thin:@tcp://mydbhost1,mydbhost2:1521/mydbservice
          • jdbc:oracle:thin:@tcp://mydbhost1:5521,mydbhost2:1521/mydbservice
          • jdbc:oracle:thin:@tcp://mydbhost1:5521/mydbservice:dedicated
          • jdbc:oracle:thin:@mydbhost1:5521/mydbservice?oracle.net.httpsProxyHost=myproxy&oracle.net.httpsProxyPort=80
          • jdbc:oracle:thin:@tcps://mydbhost1:5521/mydbservice?wallet_location=/work/wallet
          • jdbc:oracle:thin:@tcps://mydbhost1:5521/mydbservice?wallet_location=/work/wallet&ssl_server_cert_dn="服务器DN"
        • TNS 网址格式

          这种格式是一种更结构化的指定连接选项的方式,并且更具描述性。

          语法

          jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=&lt;protocol&gt;) (HOST=&lt;dbhost&gt;)(PORT=&lt;dbport&gt;)) (CONNECT_DATA=(SERVICE_NAME=&lt;service-name&gt;))

          例子:

          • jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP) (HOST=mydbhost)(PORT=1521)) (CONNECT_DATA=(SERVICE_NAME=mydbservice))
          • jdbc:oracle:thin:@(DESCRIPTION= (LOAD_BALANCE=on) (ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521)) (ADDRESS=(PROTOCOL=TCP)(HOST =host2)(PORT=5221))) (CONNECT_DATA=(SERVICE_NAME=orcl)))
          • jdbc:oracle:thin:@(DESCRIPTION= (ADDRESS= (PROTOCOL=TCPS)(PORT=1522)(HOST=myhost)) (CONNECT_DATA=(SERVICE_NAME=dbservicename)) (SECURITY=(ssl_server_cert_dn="CN= testcert.test.com, O=org,L=somecity,ST=state,C=US")))
        • TNS 别名格式

          要使用在 tnsnames.ora 中配置的别名,请使用以下格式。可以使用 TNS_ADMIN 参数配置 tnsnames.ora 文件的位置。

          语法

          jdbc:oracle:thin:@&lt;alias_name&gt;

          例子:

          • jdbc:oracle:thin:@prod_db?TNS_ADMIN=/work/tns/
          • jdbc:oracle:thin:@inst1?TNS_ADMIN=/work/tns/

        【讨论】:

          【解决方案7】:
          DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());         
          connection = DriverManager.getConnection("jdbc:oracle:thin:@machinename:portnum:schemaname","userid","password");
          

          【讨论】:

            【解决方案8】:

            我不是 Java 开发人员,很遗憾我无法直接评论您的代码,但是我在 Oracle 常见问题解答中发现了有关连接字符串形式的问题

            jdbc:oracle:<drivertype>:<username/password>@<database>
            

            来自Oracle JDBC FAQ

            http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#05_03

            希望有帮助

            【讨论】:

              猜你喜欢
              • 2014-06-25
              • 2021-05-02
              • 2014-11-11
              • 2013-10-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-10-24
              • 2021-08-01
              相关资源
              最近更新 更多