This topic created in 2608 days ago, the information mentioned may be changed or developed.
为什么用
Class.forName("com.mysql.cj.jdbc.Driver");
JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet();
rowSet.setUrl("jdbc:mysql://localhost:3306/sonoo");
rowSet.setUsername("root");
rowSet.setPassword("root");
rowSet.setCommand("select * from user420");
rowSet.execute();
会报错 java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/sonoo
用
Class.forName("com.mysql.cj.jdbc.Driver");
Connection con =
DriverManager.getConnection("jdbc:mysql://localhost:3306/sonoo","root","root");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("select * from user420");
就有结果
求大佬指导一下
1 replies • 2024-08-31 14:24:29 +08:00
 |
|
1
chaoschick Aug 31, 2024
这个问题通常是由于 `JdbcRowSet` 和 `DriverManager` 处理 JDBC 驱动的方式有所不同。让我们逐步分析:
### 1. **`Class.forName("com.mysql.cj.jdbc.Driver")` 的作用** - 这行代码的作用是加载并注册 MySQL 的 JDBC 驱动程序。在大多数现代 JDBC 驱动程序中,这步操作是自动完成的,因为 JDBC 4.0 引入了自动加载驱动的功能,但显式调用 `Class.forName` 可以确保兼容性。
### 2. **`DriverManager.getConnection` 的行为** - 当使用 `DriverManager.getConnection` 时,`DriverManager` 会根据你提供的 JDBC URL (`jdbc:mysql://localhost:3306/sonoo`) 查找已经注册的驱动程序,并找到合适的驱动来建立连接。因为 `Class.forName` 已经注册了 MySQL 驱动,所以能够正常连接数据库。
### 3. **`JdbcRowSet` 的行为** - `JdbcRowSet` 是一种 RowSet ,它通过内部的 `Connection` 对象来连接数据库。你在创建 `JdbcRowSet` 时并没有显式地传入 `Connection`,而是通过 `setUrl` 等方法提供连接信息。
- 关键问题在于,`JdbcRowSet` 使用的连接过程可能与 `DriverManager` 不同。特别是当 `JdbcRowSet` 使用 `RowSetProvider` 创建时,内部可能没有找到合适的驱动程序来处理 `jdbc:mysql://localhost:3306/sonoo` 这个 URL 。
### **为什么会出现 `No suitable driver found` 错误**
- 在使用 `DriverManager.getConnection` 时,`DriverManager` 已经注册并正确识别了 MySQL 驱动程序,因此能成功建立连接。 - 然而,在使用 `JdbcRowSet` 时,如果它不能正确加载 MySQL 驱动程序(可能是因为 `RowSetProvider` 的内部实现或者没有正确注册驱动),那么它就会抛出 `java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/sonoo` 这样的错误。
### **解决方法**
1. **显式加载 JDBC 驱动:** 确保在使用 `JdbcRowSet` 前已经加载并注册了 MySQL 驱动程序: ```java Class.forName("com.mysql.cj.jdbc.Driver"); ```
2. **使用 `JdbcRowSet` 时显式传入连接:** 你可以先创建一个 `Connection` 对象,然后将其传入 `JdbcRowSet` 中使用: ```java Class.forName("com.mysql.cj.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sonoo","root","root"); JdbcRowSet rowSet = RowSetProvider.newFactory().createJdbcRowSet(); rowSet.setCommand("select * from user420"); rowSet.execute(con); // 使用已有的 Connection 对象 ```
这种方式确保 `JdbcRowSet` 使用的连接和 `DriverManager` 创建的连接是相同的。
3. **确保 `RowSetProvider` 支持 MySQL:** 如果你使用的 `RowSetProvider` 实现确实不支持 MySQL ,考虑使用替代的 `RowSet` 实现,或者确保你的环境中已正确配置支持 MySQL 的 `RowSetProvider`。
通过上述方法,可以避免 `JdbcRowSet` 报 `No suitable driver found` 的错误。
|