使用JDBC连接Oracle数据库的URL字符串格式

Pop*_*ops 36 oracle jdbc oracle-xe

我是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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

编辑(决议):

根据duffymo的回答,我ojdbc14.jarOracle的下载站点获取并将其放入Eclipse项目的Referenced Libraries中.然后我将代码的开头改为

...
// jdbc:oracle:thin:@<hostname>:<port>:<sid>
String url = "jdbc:oracle:thin:@GalacticAC:1521:xe";
...
Run Code Online (Sandbox Code Playgroud)

它起作用了.

Pop*_*ops 42

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

jdbc:oracle:thin:@[HOST][:PORT]:SID
Run Code Online (Sandbox Code Playgroud)

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

jdbc:oracle:thin:@//[HOST][:PORT]/SERVICE
Run Code Online (Sandbox Code Playgroud)

来源:此OraFAQ页面

调用getConnection()是正确的.

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

  • 我强烈建议使用新格式!旧格式仅连接到一个特定数据库实例和一个特定数据库实例.如果您稍后选择创建数据库集群,即为了可伸缩性,则在不引入其他连接字符串的情况下,您将无法连接到任何其他节点.服务提供灵活性,尤其适用于Oracle RAC环境.计划停机时间,协调连接和基于服务的性能分析,这都是使用`/ SERVICE`而不是`:SID`.安装时,数据库默认创建一个等于数据库名称的服务. (3认同)

duf*_*ymo 37

你看这里.

您的网址非常不正确.应该是这样的:

url="jdbc:oracle:thin:@localhost:1521:orcl"
Run Code Online (Sandbox Code Playgroud)

您也没有注册驱动程序类.您想要下载瘦驱动程序JAR,将其放在CLASSPATH中,并使您的代码看起来更像这样.

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

  • 使用SID的连接字符串变得非常老式.使用服务名称为DBA提供了更大的灵活性(例如,在一个数据库实例上托管多个服务(合并)或为一个服务(RAC)使用多个实例).见@Pops答案. (3认同)

小智 17

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

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

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


小智 5

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