现代软件开发中,经常会遇到需要同时连接和操作多个数据库的情况,无论是为了数据整合、分布式系统架构还是其他业务需求,掌握如何调用两个数据库的连接都至关重要,以下将详细介绍在不同编程环境下实现这一目标的方法,包括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
指定要使用的数据源
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/59658.html