异常代码
表示Java程序在尝试连接到Oracle数据库时,没有找到合适的JDBC驱动程序。
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:ORCL
异常分析
根据异常的字面意思,大概可以分析原因
这通常是因为驱动程序没有被正确加载到Java的类路径中,或者连接URL格式不正确。
1、连接数据库的URL地址输入错误 (统一资源定位符 )
jdbc:oracle:thin:@<要访问的数据库服务器的ip地址>:<数据库服务器的端口>:<要访问的数据库名>jdbc:oracle:thin:@数据库的IP地址:1521:实例名 127.0.0.1 | localhost:1521:ORCL
2、驱动程序的版本不匹配
详情参考JDBC常见错误(2)——驱动(ojdbc.jar)不兼容
3、Java程序无法加载JDBC驱动 路径识别失败 - 创建Java项目时构建模块化
JDK9模块编程与原本类路径加载方式方式改变
- a、
module-info.java
引入指定依赖
module 你的项目名 {requires ojdbc14;
}
- b、注册驱动 后续步骤参考JDBC标准流程
// 新方案:模块化引入 新建OracleDriver对象的方式来注册驱动。
OracleDriver driver = new OracleDriver();
try {DriverManager.deregisterDriver(driver);
} catch (SQLException e1) {e1.printStackTrace();
}
解决方法
1、确保Oracle JDBC驱动程序(如ojdbc8.jar或类似的文件)已经被添加到项目的类路径中。
如果你使用的是IDE(如Eclipse或IntelliJ IDEA),可以将JDBC驱动器的JAR文件拖放到项目的"libs"或"dependencies"文件夹中。
2、如果你是通过命令行运行程序,确保使用-cp或-classpath参数将JDBC驱动器的路径包含在内。例如:
java -cp "path/to/ojdbc8.jar;other/paths/*" your.package.MainClass
3、检查连接URL是否正确。对于Oracle数据库,一个正确的连接URL通常如下所示:
jdbc:oracle:thin:@<hostname>:<port>/<service_name>
确保hostname是数据库服务器的地址,port是监听端口(通常是1521),service_name是你要连接的数据库的服务名。
4、确保驱动程序与你的Oracle数据库版本兼容。如果不确定,可以查看Oracle官方文档或下载最新的驱动程序。
5、如果你在容器(如Tomcat)中运行应用程序,确保驱动程序已经被添加到容器的类路径中。
6、如果你在Web应用程序中,确保驱动程序的JAR文件已经被添加到WEB-INF/lib目录中。
7、如果你在使用数据源(如在一个应用服务器中),确保数据源配置正确,并且包含了正确的驱动类名。
其他参考
JDBC操作MySQL数据库出现:No suitable driver found for…异常
详细异常
java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@localhost:1521:ORCLat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706)at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:229)at JDBC_129/com.yc.test.OrderByTest.test(OrderByTest.java:44)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.base/java.lang.reflect.Method.invoke(Method.java:568)at org.junit.platform.commons@1.9.1/org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:727)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138)at org.junit.jupiter.engine@5.9.1/org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)at org.junit.platform.engine@1.9.1/org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:95)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:91)at org.junit.platform.launcher@1.9.1/org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:60)at org.eclipse.jdt.internal.junit5.runner.JUnit5TestReference.run(JUnit5TestReference.java:98)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:40)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:529)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:756)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:452)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)