V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  chaoschick  ›  全部回复第 1 页 / 共 20 页
回复总数  385
1  2  3  4  5  6  7  8  9  10 ... 20  
firebase
@voidmnwzp 确实
出国 世界就是个地球村
101 天前
回复了 yeahjw 创建的主题 问与答 个人网站在国内如何接入支付?
@yeahjw 为什么 微信支付宝直接转账容易风控?那些摆摊的商贩 也是用的支付宝微信吧
你这技术栈 薪资都要少了好吧
104 天前
回复了 shrugginG 创建的主题 MySQL mysql 小白请教大佬一个问题
开启事务
START TRANSACTION;
INSERT INTO ... VALUES (...), (...), ...;
COMMIT;
106 天前
回复了 BeijingBaby 创建的主题 京东 被京东官方人员给 [雷到了]
soka
107 天前
回复了 dongdongdong 创建的主题 问与答 今天我 30 岁了!
我觉得这可能是某个时代的缩影 我和楼主经历很像
我 00 年的 也是农村的
我老妈也有精神方面的问题 也是天天觉得有人要害她,经常隔空骂人,骂得很大声
一年到头基本都在骂人 稍微遇到点不顺心的事 就开始骂人,所以我一般不和她交流 能不回家就不回家
我也是在挨骂的环境下长大的
我也有一个妹妹,相差 12 岁,一个轮回。
我也对于结婚,不抱希望,准确说我非常害怕结婚

现在每天做的事 也是上班 写代码 学习知识
太浮躁了, 技术需要沉淀
一朝悟道, 必假十年苦修
把公司干倒闭 🐶
112 天前
回复了 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` 的错误。
112 天前
回复了 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();
```
112 天前
回复了 gomorebug 创建的主题 Java 关于 mybatis 的疑惑
说的很好 但是我用 JDBC 🐶
g++ main.cpp -O3
a.exe

windows 7 (vmware)
Time taken to output the result: 122.007 milliseconds

windows 10 (物理机)
Time taken to output the result: 3.7429 milliseconds

windows server 2019 (内网服务器)
Time taken to output the result: 73.7804 milliseconds
@seanzxx 那多半就是 windows 的终端有问题了 我试过 windows 的 cmd 与 powershell 都有这个问题
@RecursiveG 很快 我已经试过了 重定向到文件 10ms 以内了
#include <iostream>
#include <chrono>
#include <sstream>

int main() {
// Output the result
auto start_time = std::chrono::high_resolution_clock::now();
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
const size_t bufferSize = 1024 * 1024 * 100;
char *buffer = new char[bufferSize];
std::cout.rdbuf()->pubsetbuf(buffer, bufferSize);

std::ostringstream oss;
for (int i = -1; ++i < 1000; ) {
oss << "Column 1: 1, Column 2: 2, Column 3: 3, Column 4: 4\n";
}
std::cout << oss.str();
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = end_time - start_time;
std::cout << "Time taken to output the result: " << elapsed.count() << " milliseconds\n";

delete[] buffer;

return 0;
}
我把同样的代码 在 linux 跑了一遍

g++ main.cpp -O3
./a.out

Time taken to output the result: 11.9875 milliseconds
。。。
@leconio 我下载了 jbr17
D:\cpp\demo4\jbrsdk-17.0.9-windows-x64-b1087.7\bin\java Main.java

Time taken to output the result: 124 milliseconds
Time taken to output the result: 124 milliseconds
@chendy
#include <iostream>
#include <chrono>
#include <sstream>

int main() {
// Output the result
auto start_time = std::chrono::high_resolution_clock::now();
std::ios::sync_with_stdio(false);
std::cin.tie(NULL);
const size_t bufferSize = 1024 * 1024 * 100;
char *buffer = new char[bufferSize];
std::cout.rdbuf()->pubsetbuf(buffer, bufferSize);

std::ostringstream oss;
for (int i = -1; ++i < 1000; ) {
oss << "Column 1: 1, Column 2: 2, Column 3: 3, Column 4: 4\n";
}
std::cout << oss.str();
auto end_time = std::chrono::high_resolution_clock::now();
std::chrono::duration<double, std::milli> elapsed = end_time - start_time;
std::cout << "Time taken to output the result: " << elapsed.count() << " milliseconds\n";

delete[] buffer;

return 0;
}

编译 g++ main.cpp -O3
运行 a.exe

Time taken to output the result: 124.007 milliseconds

这是 c++ 写的代码 我已经将 buffer 调大了 但是还是维持在 100ms 左右
1  2  3  4  5  6  7  8  9  10 ... 20  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2519 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 02:59 · PVG 10:59 · LAX 18:59 · JFK 21:59
Developed with CodeLauncher
♥ Do have faith in what you're doing.