JDBC概念介绍
Java数据库连结(JDBC)是用Java编写的一个API(应用程序编程接口),用于与数据库通讯及操作的一套规范接口。它可以让我们用Java语言访问各种不同的SQL数据库。
获取数据库连接的5种方式
前提条件
在使用JDBC连接数据库之前,需要首先导入mysql的JDBC驱动JAR包。这里以MySQL为例,我们需要在Maven或Gradle中引入如下依赖:
<!-- MySQL JDBC -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
该JAR包可以在MySQL官方网站上下载。
另外,需要确保已经安装并启动了MySQL数据库服务。
1. DriverManager获取数据库连接
在JDBC中获取数据库连接的最基本方法是使用DriverManager
类。它提供了getConnection
方法,通过提供数据库连接URL、用户名和密码等信息,返回一个连接到数据库的Connection
对象。
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";
// 注册 JDBC 驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 获取连接
Connection conn = DriverManager.getConnection(url, user, password);
其中,Class.forName("com.mysql.cj.jdbc.Driver");
是加载MySQL JDBC驱动的语句,可用于静态代码块中,或者放在main方法中。
2. DataSource获取数据库连接
DataSource
是一个数据源接口,它有多种实现,比如BasicDataSource
、c3p0
、DBCP
、HikariCP
等。其中,HikariCP
是市面上最快的连接池之一。
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";
HikariConfig config = new HikariConfig();
config.setJdbcUrl(url);
config.setUsername(user);
config.setPassword(password);
config.setMaximumPoolSize(10);
DataSource dataSource = new HikariDataSource(config);
Connection conn = dataSource.getConnection();
在上述代码中,我们用了HikariCP
作为连接池,并设置了最大连接池数量为10。
3. BasicDataSource获取数据库连接
BasicDataSource
是一种开源的连接池,它实现了DataSource
接口。
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
dataSource.setMaxTotal(10);
Connection conn = dataSource.getConnection();
在上述代码中,我们用了BasicDataSource
作为连接池,并设置了最大连接池数量为10。
4. JNDI获取数据库连接
在Java Web开发中,可以通过JNDI
(Java Naming and Directory Interface)来获取数据库连接,它提供了一种统一的访问方式。在Tomcat等Web容器中,我们可以使用Context.xml
或者Web.xml
进行配置。
<Resource name="jdbc/your_database" auth="Container"
type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/your_database" username="your_username" password="your_password"
maxTotal="10" maxIdle="5" />
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:/comp/env");
DataSource dataSource = (DataSource) envCtx.lookup("jdbc/your_database");
Connection conn = dataSource.getConnection();
在上述代码中,我们使用了Tomcat的Context.xml
文件对数据源进行配置,并在代码中通过JNDI
方式获取数据库连接。
5. 第三方库获取数据库连接
除了以上几种方式以外,还有一些第三方JDBC与数据库连接相关的库,如JOOQ
、MyBatis
和Spring JDBC
等,它们提供了更加灵活、高级的SQL操作方式。
// 使用JOOQ获取数据库连接
DSLContext dslContext = DSL.using(dataSource, SQLDialect.MYSQL);
Connection conn = dslContext.connection();
在上述代码中,我们使用了JOOQ
库获取数据库连接,并通过DSLContext
类提供的connection
方法获取Connection
对象。
示例说明
示例1:使用DriverManager连接MySQL
在此示例中,我们实现了一个连接MySQL数据库的简单Java程序,并通过Statement
对象执行了一条查询语句。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MySQLExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";
Connection conn = null;
Statement stmt = null;
try {
// 注册 JDBC 驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 打开连接
conn = DriverManager.getConnection(url, user, password);
// 执行查询
stmt = conn.createStatement();
String sql = "SELECT id, name, age FROM your_table";
ResultSet rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("ID:" + id + ", Name:" + name + ", Age:" + age);
}
// 释放资源
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (stmt != null) stmt.close();
} catch (Exception e) {}
try {
if (conn != null) conn.close();
} catch (Exception e) {}
}
}
}
上述代码中,我们通过DriverManager
类获取了MySQL数据库的连接,并使用Statement
对象执行了一条查询语句,最后输出了查询结果。
示例2:使用HikariCP连接MySQL
在此示例中,我们使用HikariCP
作为连接池来连接MySQL数据库,并通过PreparedStatement
对象执行了一条插入语句。
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.UUID;
public class MySQLExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/your_database";
String user = "your_username";
String password = "your_password";
HikariConfig config = new HikariConfig();
config.setJdbcUrl(url);
config.setUsername(user);
config.setPassword(password);
config.setMaximumPoolSize(10);
HikariDataSource dataSource = new HikariDataSource(config);
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 获取连接
conn = dataSource.getConnection();
// 执行插入
pstmt = conn.prepareStatement("INSERT INTO your_table (id, name, age) VALUES (?, ?, ?)");
pstmt.setString(1, UUID.randomUUID().toString());
pstmt.setString(2, "Wendy");
pstmt.setInt(3, 25);
int result = pstmt.executeUpdate();
System.out.println("Insert rows: " + result);
// 释放资源
pstmt.close();
conn.close();
dataSource.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstmt != null) pstmt.close();
} catch (Exception e) {}
try {
if (conn != null) conn.close();
} catch (Exception e) {}
}
}
}
上述代码中,我们使用了HikariCP
作为连接池,并使用了PreparedStatement
对象执行了一条插入语句,最后输出了插入结果。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解JDBC的概念及获取数据库连接的5种方式 - Python技术站