Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle KPRB驱动程序:java.sql.SQLException:使用OracleDriver.defaultConnection()指定的Oracle URL无效;_Java_Sql_Oracle_Jdbc - Fatal编程技术网

Oracle KPRB驱动程序:java.sql.SQLException:使用OracleDriver.defaultConnection()指定的Oracle URL无效;

Oracle KPRB驱动程序:java.sql.SQLException:使用OracleDriver.defaultConnection()指定的Oracle URL无效;,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,背景: 我们使用的是Oracle SQL 12c企业版。Oracle SQL数据库在此计算机上本地运行,我们可以使用“Oracle SQL Developer”创建表和运行查询 问题: 在Java中连接到数据库时,无论我们如何尝试,都会出现无效的URL异常。有几种类型的“驱动程序”:瘦驱动程序、OCI驱动程序和KPRB驱动程序。似乎我们应该使用KPRB驱动程序,因为它利用服务器在同一台机器上运行的事实提供了最快的连接。对于特定的驱动程序,仅仅是猜测,我们使用了..\product\12.1.0\

背景:

我们使用的是Oracle SQL 12c企业版。Oracle SQL数据库在此计算机上本地运行,我们可以使用“Oracle SQL Developer”创建表和运行查询

问题:

在Java中连接到数据库时,无论我们如何尝试,都会出现无效的URL异常。有几种类型的“驱动程序”:瘦驱动程序、OCI驱动程序和KPRB驱动程序。似乎我们应该使用KPRB驱动程序,因为它利用服务器在同一台机器上运行的事实提供了最快的连接。对于特定的驱动程序,仅仅是猜测,我们使用了..\product\12.1.0\dbhome\u 1\jdbc\lib文件夹中的ojdbc7.jar

我们找到的文档似乎表明我们不需要指定数据库名称或登录信息。这是我们尝试过的一个例子:

我们试过各种各样的方法,每次都有相同的错误。是否有可靠的方法正确设置此连接

编辑:


通过为相应的Java函数创建包装器,您只能在DB服务器端运行KPRB驱动程序

有关InternalT2Driver.sql的外观,请参见下文

rem Reads the content of the Java source from InternalT2Driver.java 
rem then compiles it 
connect hr/hr
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED InternalT2Driver_src AS
@ InternalT2Driver.java
/

show error

rem A wrapper (a.k.a. Call Spec), to invoke Java
rem function in the database from SQL, PL/SQL, and client applications
CREATE OR REPLACE PROCEDURE InternalT2Driver_proc AS 
LANGUAGE JAVA NAME 'InternalT2Driver.jrun ()';
/

rem Running the sample
connect hr/hr
SET SERVEROUTPUT ON SIZE 10000 
CALL dbms_java.set_output (10000);

execute InternalT2Driver_proc;
您可以通过指定URL(jdbc:oracle:kprb:@)来定义获取数据库连接,并执行任何数据库操作


有关更多详细信息,请参阅JDBC开发人员指南()

通过为相应的Java函数创建包装器,您只能在DB服务器端运行KPRB驱动程序

有关InternalT2Driver.sql的外观,请参见下文

rem Reads the content of the Java source from InternalT2Driver.java 
rem then compiles it 
connect hr/hr
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED InternalT2Driver_src AS
@ InternalT2Driver.java
/

show error

rem A wrapper (a.k.a. Call Spec), to invoke Java
rem function in the database from SQL, PL/SQL, and client applications
CREATE OR REPLACE PROCEDURE InternalT2Driver_proc AS 
LANGUAGE JAVA NAME 'InternalT2Driver.jrun ()';
/

rem Running the sample
connect hr/hr
SET SERVEROUTPUT ON SIZE 10000 
CALL dbms_java.set_output (10000);

execute InternalT2Driver_proc;
您可以通过指定URL(jdbc:oracle:kprb:@)来定义获取数据库连接,并执行任何数据库操作


有关更多详细信息,请参阅JDBC开发人员指南()

Oracle KPRB驱动程序是服务器端内部驱动程序。您是否将它用于存储在db中的java程序?我不知道存储在db中的java程序。我知道我们不想浪费时间通过websocket或本地端口连接到localhost或127.0.0.1,因为数据库存储并在同一台机器上本地运行,所以我们可以直接连接数据库。正如Arkadiusz所说:只有当Java应用程序存储在数据库中并由作为数据库一部分的JVM(通常是非常旧的Java版本)。您不能将其用于“外部”程序。世界上其他地方都很乐意通过TCP进行连接,那么为什么你认为它对你来说不够好呢?使用谷歌搜索“Java存储过程”。对于12c,Oracle使用JVM1.6运行Java代码。小心这个JVM,在这个JVM.PS上运行代码时可能会遇到一些问题:您还可以使用OCI驱动程序,它可以通过SHM(共享内存)进行连接。这将加速客户端和服务器之间的往返。但不会加快数据库连接创建的速度,因为这在数据库服务器端是一项非常昂贵的操作。Oracle KPRB驱动程序是服务器端内部驱动程序。您是否将它用于存储在db中的java程序?我不知道存储在db中的java程序。我知道我们不想浪费时间通过websocket或本地端口连接到localhost或127.0.0.1,因为数据库存储并在同一台机器上本地运行,所以我们可以直接连接数据库。正如Arkadiusz所说:只有当Java应用程序存储在数据库中并由作为数据库一部分的JVM(通常是非常旧的Java版本)。您不能将其用于“外部”程序。世界上其他地方都很乐意通过TCP进行连接,那么为什么你认为它对你来说不够好呢?使用谷歌搜索“Java存储过程”。对于12c,Oracle使用JVM1.6运行Java代码。小心这个JVM,在这个JVM.PS上运行代码时可能会遇到一些问题:您还可以使用OCI驱动程序,它可以通过SHM(共享内存)进行连接。这将加速客户端和服务器之间的往返。但不会加快数据库连接的创建,因为在DB服务器端这是一项非常昂贵的操作。
rem Reads the content of the Java source from InternalT2Driver.java 
rem then compiles it 
connect hr/hr
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED InternalT2Driver_src AS
@ InternalT2Driver.java
/

show error

rem A wrapper (a.k.a. Call Spec), to invoke Java
rem function in the database from SQL, PL/SQL, and client applications
CREATE OR REPLACE PROCEDURE InternalT2Driver_proc AS 
LANGUAGE JAVA NAME 'InternalT2Driver.jrun ()';
/

rem Running the sample
connect hr/hr
SET SERVEROUTPUT ON SIZE 10000 
CALL dbms_java.set_output (10000);

execute InternalT2Driver_proc;