chaoschick

chaoschick

V2EX 第 449028 号会员,加入于 2019-10-25 07:19:39 +08:00
根据 chaoschick 的设置,主题列表被隐藏
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
chaoschick 最近回复了
7 天前
回复了 yeahjw 创建的主题 问与答 个人网站在国内如何接入支付?
@yeahjw 为什么 微信支付宝直接转账容易风控?那些摆摊的商贩 也是用的支付宝微信吧
你这技术栈 薪资都要少了好吧
10 天前
回复了 shrugginG 创建的主题 MySQL mysql 小白请教大佬一个问题
开启事务
START TRANSACTION;
INSERT INTO ... VALUES (...), (...), ...;
COMMIT;
11 天前
回复了 BeijingBaby 创建的主题 京东 被京东官方人员给 [雷到了]
soka
13 天前
回复了 dongdongdong 创建的主题 问与答 今天我 30 岁了!
我觉得这可能是某个时代的缩影 我和楼主经历很像
我 00 年的 也是农村的
我老妈也有精神方面的问题 也是天天觉得有人要害她,经常隔空骂人,骂得很大声
一年到头基本都在骂人 稍微遇到点不顺心的事 就开始骂人,所以我一般不和她交流 能不回家就不回家
我也是在挨骂的环境下长大的
我也有一个妹妹,相差 12 岁,一个轮回。
我也对于结婚,不抱希望,准确说我非常害怕结婚

现在每天做的事 也是上班 写代码 学习知识
太浮躁了, 技术需要沉淀
一朝悟道, 必假十年苦修
把公司干倒闭 🐶
18 天前
回复了 hastyfish 创建的主题 问与答 关于 JDBC 连接 Mysql,求一个大佬
这个问题通常是由于 `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` 的错误。
18 天前
回复了 jchnxu 创建的主题 程序员 jdbc 是个啥原理啊
Node.js 中有多个库可以用于连接和操作数据库,最常用的包括以下几个:

1. **MySQL**:
- 使用 `mysql` 或 `mysql2` 库来连接 MySQL 数据库。
- 示例:
```javascript
const mysql = require('mysql2');

const connection = mysql.createConnection({
host: 'localhost',
user: 'yourUsername',
password: 'yourPassword',
database: 'yourDatabase'
});

connection.connect(err => {
if (err) {
console.error('Error connecting to the database:', err);
return;
}
console.log('Connected to the MySQL database.');
});

connection.query('SELECT * FROM yourTable', (err, results) => {
if (err) {
console.error('Error executing query:', err);
return;
}
console.log('Query results:', results);
});

connection.end();
```

2. **PostgreSQL**:
- 使用 `pg` 库来连接 PostgreSQL 数据库。
- 示例:
```javascript
const { Client } = require('pg');

const client = new Client({
host: 'localhost',
user: 'yourUsername',
password: 'yourPassword',
database: 'yourDatabase'
});

client.connect(err => {
if (err) {
console.error('Error connecting to the database:', err);
return;
}
console.log('Connected to the PostgreSQL database.');
});

client.query('SELECT * FROM yourTable', (err, res) => {
if (err) {
console.error('Error executing query:', err);
return;
}
console.log('Query results:', res.rows);
});

client.end();
```

3. **SQLite**:
- 使用 `sqlite3` 库来连接 SQLite 数据库。
- 示例:
```javascript
const sqlite3 = require('sqlite3').verbose();

const db = new sqlite3.Database('./yourDatabase.db');

db.serialize(() => {
db.each('SELECT * FROM yourTable', (err, row) => {
if (err) {
console.error('Error executing query:', err);
return;
}
console.log('Row:', row);
});
});

db.close();
```
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5611 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 14ms · UTC 01:42 · PVG 09:42 · LAX 18:42 · JFK 21:42
Developed with CodeLauncher
♥ Do have faith in what you're doing.