上一篇
调用两个数据库的连接,需分别配置各自的连接参数,如数据库类型、地址、端口、用户名和密码等,然后使用相应数据库驱动或框架提供的连接
现代软件开发中,经常会遇到需要同时连接和操作多个数据库的情况,无论是为了数据整合、分布式系统架构还是其他业务需求,掌握如何调用两个数据库的连接都至关重要,以下将详细介绍在不同编程环境下实现这一目标的方法,包括PHP、Java、Python以及一些常见的框架如Spring Boot和Django中的配置方式。
使用PHP连接两个数据库
使用mysqli扩展
<?php
$host = "localhost";
$username = "root";
$password = "password";
// 连接第一个数据库
$db1_con = mysqli_connect($host, $username, $password, "database1");
if (mysqli_connect_errno()) {
die("连接第一个数据库失败: " . mysqli_connect_error());
}
// 连接第二个数据库
$db2_con = mysqli_connect($host, $username, $password, "database2");
if (mysqli_connect_errno()) {
die("连接第二个数据库失败: " . mysqli_connect_error());
}
// 查询第一个数据库
$query1 = "SELECT FROM table1";
$result1 = mysqli_query($db1_con, $query1);
while ($row1 = mysqli_fetch_assoc($result1)) {
echo "数据1: " . $row1["column1"] . "n";
}
// 查询第二个数据库
$query2 = "SELECT FROM table2";
$result2 = mysqli_query($db2_con, $query2);
while ($row2 = mysqli_fetch_assoc($result2)) {
echo "数据2: " . $row2["column1"] . "n";
}
// 关闭连接
mysqli_close($db1_con);
mysqli_close($db2_con);
?>
使用PDO扩展
<?php
try {
// 连接第一个数据库
$db1_con = new PDO("mysql:host=localhost;dbname=database1", "root", "password");
$db1_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 连接第二个数据库
$db2_con = new PDO("mysql:host=localhost;dbname=database2", "root", "password");
$db2_con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 查询第一个数据库
$query1 = "SELECT FROM table1";
$result1 = $db1_con->query($query1);
while ($row1 = $result1->fetch(PDO::FETCH_ASSOC)) {
echo "数据1: " . $row1["column1"] . "n";
}
// 查询第二个数据库
$query2 = "SELECT FROM table2";
$result2 = $db2_con->query($query2);
while ($row2 = $result2->fetch(PDO::FETCH_ASSOC)) {
echo "数据2: " . $row2["column1"] . "n";
}
} catch (PDOException $e) {
echo "连接失败: " . $e->getMessage();
} finally {
// 关闭连接
$db1_con = null;
$db2_con = null;
}
?>
使用Java连接两个数据库
使用JDBC
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MultiDatabaseConnection {
public static void main(String[] args) {
String db1Url = "jdbc:mysql://localhost:3306/database1";
String db1User = "root";
String db1Password = "password";
String db2Url = "jdbc:mysql://localhost:3306/database2";
String db2User = "root";
String db2Password = "password";
Connection conn1 = null;
Connection conn2 = null;
try {
// 加载JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 连接第一个数据库
conn1 = DriverManager.getConnection(db1Url, db1User, db1Password);
System.out.println("Connected to database 1");
// 连接第二个数据库
conn2 = DriverManager.getConnection(db2Url, db2User, db2Password);
System.out.println("Connected to database 2");
// 查询第一个数据库
Statement stmt1 = conn1.createStatement();
ResultSet rs1 = stmt1.executeQuery("SELECT FROM table1");
while (rs1.next()) {
System.out.println("DB1: " + rs1.getString("column_name"));
}
// 查询第二个数据库
Statement stmt2 = conn2.createStatement();
ResultSet rs2 = stmt2.executeQuery("SELECT FROM table2");
while (rs2.next()) {
System.out.println("DB2: " + rs2.getString("column_name"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接
try { if (conn1 != null) conn1.close(); } catch (Exception e) { e.printStackTrace(); }
try { if (conn2 != null) conn2.close(); } catch (Exception e) { e.printStackTrace(); }
}
}
}
使用Spring Boot配置多个数据源
在application.properties文件中配置:
spring.datasource.primary.url=jdbc:mysql://localhost:3306/database1 spring.datasource.primary.username=root spring.datasource.primary.password=password spring.datasource.secondary.url=jdbc:mysql://localhost:3306/database2 spring.datasource.secondary.username=root spring.datasource.secondary.password=password
然后在Spring Boot应用中定义多个DataSource bean:
@Configuration
public class DataSourceConfig {
@Primary
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); }
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); }
}
使用Python连接两个数据库(以MySQL为例)
import pymysql
# 连接第一个数据库
db1_con = pymysql.connect(host="localhost", user="root", password="password", database="database1")
cursor1 = db1_con.cursor()
cursor1.execute("SELECT FROM table1")
for row in cursor1.fetchall():
print("数据1:", row[0])
cursor1.close()
db1_con.close()
# 连接第二个数据库
db2_con = pymysql.connect(host="localhost", user="root", password="password", database="database2")
cursor2 = db2_con.cursor()
cursor2.execute("SELECT FROM table2")
for row in cursor2.fetchall():
print("数据2:", row[0])
cursor2.close()
db2_con.close()
常见问题解答FAQs
Q: 如何在Spring Boot中切换默认的数据源?
A: 在Spring Boot中,可以通过在@Primary注解上指定不同的数据源来切换默认的数据源,如果你想将secondaryDataSource设为默认数据源,只需将@Primary注解从primaryDataSource方法移到secondaryDataSource方法即可,你还可以在具体的DAO或Service类中使用@Qualifier指定要使用的数据源
