46

我是 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 的回答,我ojdbc14.jarOracle 的下载站点获取并将其放入 Eclipse 项目的引用库中。然后我将代码的开头更改为

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

它奏效了。

4

8 回答 8

55

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

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

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

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

来源:这个 OraFAQ 页面

调用getConnection()是正确的。

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

于 2011-12-13T18:33:19.820 回答
49

这里

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

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

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

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

于 2009-06-28T02:50:05.373 回答
22

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)。

于 2013-03-02T12:56:00.077 回答
4

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

于 2013-07-12T21:53:08.917 回答
1
String host = <host name>
String port = <port>
String service = <service name>
String dbName = <db schema>+"."+service
String url = "jdbc:oracle:thin:@"+host+":"+"port"+"/"+dbName
于 2019-07-18T15:07:51.537 回答
1

以下是 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=<protocol>) (HOST=<dbhost>)(PORT=<dbport>)) (CONNECT_DATA=(SERVICE_NAME=<service-name>))

    例子:

    • 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:@<alias_name>

    例子:

    • jdbc:oracle:thin:@prod_db?TNS_ADMIN=/work/tns/
    • jdbc:oracle:thin:@inst1?TNS_ADMIN=/work/tns/
于 2021-11-04T09:43:05.960 回答
0
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());         
connection = DriverManager.getConnection("jdbc:oracle:thin:@machinename:portnum:schemaname","userid","password");
于 2009-06-28T02:57:29.243 回答
0

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

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

来自Oracle JDBC 常见问题解答

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

希望有帮助

于 2009-06-28T02:58:11.783 回答