当前位置:首页 > 数据库 > 正文

如何用代码创建数据库连接?

使用代码添加数据库连接需导入数据库驱动库,调用连接函数并传入主机、端口、用户名、密码及数据库名等参数,以Python为例,常用 pymysql.connect()sqlite3.connect()建立连接,最后需显式关闭连接释放资源。

核心准备工作

  1. 获取数据库凭据

    • 数据库类型(MySQL/PostgreSQL/SQL Server等)
    • 主机地址(如 localhost 或云数据库IP)
    • 端口号(MySQL默认3306,PostgreSQL默认5432)
    • 数据库名称
    • 用户名和密码
  2. 安装数据库驱动
    根据语言选择对应驱动:

    如何用代码创建数据库连接?  第1张

    # Python
    pip install mysql-connector-python pymysql
    # Node.js
    npm install mysql2
    # Java (Maven)
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.33</version>
    </dependency>

代码实现示例

Python (MySQL)

import mysql.connector
from mysql.connector import Error
try:
    # 创建连接
    connection = mysql.connector.connect(
        host="localhost",
        user="your_username",
        password="your_password",
        database="your_database"
    )
    if connection.is_connected():
        cursor = connection.cursor()
        cursor.execute("SELECT VERSION()")  # 测试查询
        version = cursor.fetchone()
        print("Database version:", version)
except Error as e:
    print("连接失败:", e)
finally:
    if connection.is_connected():
        cursor.close()
        connection.close()  # 必须关闭连接!

Node.js (MySQL)

const mysql = require('mysql2');
// 创建连接池(推荐)
const pool = mysql.createPool({
  host: 'localhost',
  user: 'your_username',
  password: 'your_password',
  database: 'your_database',
  waitForConnections: true,
  connectionLimit: 10
});
// 执行查询
pool.query('SELECT 1 + 1 AS solution', (error, results) => {
  if (error) throw error;
  console.log('Result:', results[0].solution);
});
// 关闭连接池(在应用退出时)
process.on('exit', () => pool.end());

Java (JDBC)

import java.sql.*;
public class DBConnection {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/your_database";
        String user = "your_username";
        String password = "your_password";
        try (Connection conn = DriverManager.getConnection(url, user, password);
             Statement stmt = conn.createStatement()) {
            ResultSet rs = stmt.executeQuery("SELECT VERSION()");
            if (rs.next()) {
                System.out.println("Database version: " + rs.getString(1));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

关键安全实践

  1. 绝不硬编码凭据
    使用环境变量或配置文件:

    # Python示例:从.env文件加载
    from dotenv import load_dotenv
    import os
    load_dotenv()
    host = os.getenv("DB_HOST")
  2. 防御SQL注入
    使用参数化查询(非字符串拼接):

    # Python安全查询
    cursor.execute("SELECT * FROM users WHERE email = %s", (user_email,))
  3. 连接池管理

    • 避免频繁创建/销毁连接(如Java的HikariCP、Python的DBUtils
    • 设置合理的连接超时时间
  4. 启用SSL加密
    云数据库需配置SSL(以Node.js为例):

    const pool = mysql.createPool({
      ssl: { rejectUnauthorized: true },
      // ...其他配置
    });

常见错误排查

错误现象 可能原因 解决方案
Connection refused 数据库服务未启动/端口错误 检查服务状态及防火墙设置
Access denied 用户名/密码错误 核对凭据及数据库权限
Too many connections 连接未关闭或超出限制 优化连接池配置,确保资源释放
SSL connection error 证书配置问题 更新CA证书或禁用SSL(仅测试)

进阶建议

  1. 使用ORM工具
    如Python的SQLAlchemy、Java的Hibernate,简化操作并提升安全性。
  2. 定期更新驱动
    避免已知破绽(如CVE-2022-32221)。
  3. 监控连接状态
    通过数据库命令(如MySQL的SHOW STATUS LIKE 'Threads_connected')检测泄漏。

引用说明:本文代码示例参考了MySQL官方文档、Python DB-API标准及OWASP SQL注入防护指南,安全实践遵循NIST SP 800-123标准,连接池配置参考了Oracle JDBC最佳实践。

0