如何使用纯Java方式连接数据库?

假定需要连接的数据库名称为`myschool`,使用"root"登录,密码为"0000",使用该数据库用户登录并访问`myschool`数据库。

在写代码之前需要导入jar包"mysql-connector-java-5.1.0-bin"

1.使用纯Java方式连接数据库查找数据(为方便查阅,暂使用throws抛出异常,省略记录日志)。

package cn.jbdc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
* jdbc程序
* @author Administrator
*
*/
public class JdbcDemo01 {
public static void main(String[] args) throws Exception {
//1.加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//2.与数据库连接
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool", "root", "0000");
//测试连接
System.out.println(connection);
//3.创建执行sql语句的对象
Statement stmt = connection.createStatement();
//4.执行sql语句获取结果集
ResultSet rs = stmt.executeQuery("select * from subject");
//5.遍历结果集获取数据
while(rs.next()){
int subjectNo = rs.getInt("SubjectNo");
String SubjectName = rs.getString("SubjectName");
int classHour = rs.getInt("ClassHour");
int gradeID = rs.getInt("GradeID");

System.out.println(subjectNo+"\t"+SubjectName+"\t"+classHour+"\t"+gradeID);
}
//6.释放资源
rs.close();
stmt.close();
connection.close();
}
}

2.使用纯Java方式连接数据库实现增删改操作(增删改操作都使用executeUpdate方法)

package cn.bdqn.demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

//JDBC实现添加
public class JdbcDemo3 {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool", "root", "0000");
stmt = conn.createStatement();
int i = stmt.executeUpdate("INSERT INTO `subject`(SubjectName,ClassHour,GradeID) VALUES ('历史',101,1)");
if (i > 0){
System.out.println("添加成功!");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
}
}

 

 

转载于:https://www.cnblogs.com/wxbblogs/p/6962823.html

<think>嗯,用户现在问的是Java方式连接数据库的优点。之前他们已经问过PreparedStatement和Statement的区别,所以可能是在学习JDBC相关的内容。现在需要详细解释Java连接的好处,可能需要对比其他方式,比如使用框架或者ORM工具。 首先,用户可能不太清楚Java连接指的是什么,应该先明确概念。Java方式通常指使用JDBC直接连接,不依赖外部框架,比如Hibernate或MyBatis。优点的话,可能需要从性能、轻量、学习成本、控制力、兼容性等方面考虑。 然后,要考虑到用户可能的背景。他们可能是刚开始学习Java数据库编程的新手,或者是在考虑项目中选择合适的技术方案。所以需要解释每个优点时,结合实际例子或场景,让他们更容易理解。 比如,性能方面,直接使用JDBC可能比ORM框架更高效,因为减少了抽象层。轻量级的话,不需要引入额外的依赖,适合小型项目。学习成本低,因为JDBC是基础,掌握后有助于理解更高级的框架。直接控制数据库操作,可以优化SQL语句,处理复杂查询。兼容性方面,JDBC支持多种数据库,通过更换驱动即可切换。 同时,还要注意用户可能关心的缺点,但这里问题只问优点,所以可能需要点到为止。不过,如果用户后续有问题,可能会问到缺点,但现在只需聚焦在优点上。 另外,用户之前的回答结构比较清晰,使用了分点和代码示例,所以可能需要保持类似的格式,确保回答结构清晰,易于理解。可能需要分点列出优点,每个优点下详细说明,给出实际例子或应用场景。 还需要注意技术术语的解释,比如JDBC驱动、ORM框架等,确保用户能理解这些概念。同时,结合之前的回答,PreparedStatement的优势也是Java连接的一部分,可以适当关联,强调Java方式下如何利用这些优势。 最后,总结部分要强调Java连接在特定场景下的适用性,比如对性能要求高、需要精细控制SQL、或者项目规模较小的情况。同时,也可以提到在复杂项目中可能结合使用ORM框架,但基础仍是JDBC,突出其重要性。</think>--- ### 一、 Java 连接数据库的核心优点 #### 1. **无依赖,轻量级** - **直接使用 JDBC 驱动**:无需引入第三方框架(如 Hibernate、MyBatis),减少项目依赖。 - **代码体积小**:适用于嵌入式系统或对资源敏感的场景(如 IoT 设备)。 ```java // 仅需 JDBC 驱动包(如 mysql-connector-java.jar) Class.forName("com.mysql.cj.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, user, password); ``` #### 2. **性能高效** - **减少抽象层开销**:直接操作 SQL,避免 ORM 框架的反射和代理性能损耗。 - **精细控制 SQL**:手动优化复杂查询,避免框架自动生成的冗余 SQL。 ```java // 直接编写高性能 SQL(如分页优化) String sql = "SELECT * FROM orders WHERE status=? LIMIT ? OFFSET ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "PAID"); pstmt.setInt(2, 100); pstmt.setInt(3, 500); ``` #### 3. **学习成本低** - **标准化接口**:JDBC 是 Java 标准库的一部分,API 设计统一(`Connection`, `Statement`, `ResultSet`)。 - **深入理解底层**:掌握数据库交互原理,为后续学习 ORM 框架(如 JPA)打下基础。 #### 4. **完全控制权** - **事务管理**:手动提交/回滚,灵活处理复杂事务逻辑。 ```java try { conn.setAutoCommit(false); // 执行多个操作 updateAccount(conn, fromUser, -amount); updateAccount(conn, toUser, amount); conn.commit(); // 显式提交 } catch (SQLException e) { conn.rollback(); // 显式回滚 } ``` - **资源管理**:精准控制连接池、Statement、ResultSet 的生命周期。 #### 5. **跨数据库兼容性** - **JDBC 驱动标准化**:通过更换驱动即可切换数据库(如 MySQL → PostgreSQL)。 ```java // 更换驱动类名和连接 URL 即可适配不同数据库 Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection("jdbc:postgresql://host/db", user, pass); ``` --- ### 二、适用场景 | 场景 | 优势体现 | |---------------------------|-----------------------------| | 小型工具或脚本开发 | 无需复杂框架,快速实现功能 | | 高性能批处理任务 | 直接优化 SQL 和事务逻辑 | | 数据库底层调试 | 直接观察原生 SQL 执行结果 | | 嵌入式/资源受限环境 | 避免引入重型框架依赖 | --- ### 三、对比 ORM 框架的差异化优势 | 维度 | JDBC | ORM 框架(如 Hibernate) | |--------------------|--------------------------------|--------------------------------| | **执行效率** | ✅ 无反射开销,直接执行 SQL | ⚠️ 对象映射存在性能损耗 | | **灵活性** | ✅ 完全自由编写/优化 SQL | ⚠️ 受限于框架生成的 SQL | | **代码量** | ⚠️ 需要手动处理结果集映射 | ✅ 自动对象映射减少样板代码 | | **维护性** | ⚠️ SQL 分散在代码中 | ✅ 集中管理实体类和查询语句 | --- ### 四、实际应用示例 #### 1. **高效批量插入** ```java try (Connection conn = DriverManager.getConnection(url, user, pass); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO sensor_data(value, time) VALUES (?, ?)")) { conn.setAutoCommit(false); for (SensorData data : sensorList) { pstmt.setDouble(1, data.getValue()); pstmt.setTimestamp(2, Timestamp.valueOf(data.getTime())); pstmt.addBatch(); // 加入批处理 if (i % 1000 == 0) pstmt.executeBatch(); // 分批次提交 } pstmt.executeBatch(); conn.commit(); // 手动提交事务 } ``` #### 2. **原生 SQL 复杂查询** ```java String sql = """ WITH ranked_products AS ( SELECT product_id, sales, RANK() OVER (ORDER BY sales DESC) AS rank FROM sales_records ) SELECT product_id, sales FROM ranked_products WHERE rank <= 10 """; try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { System.out.println(rs.getInt("product_id") + ": " + rs.getDouble("sales")); } } ``` --- ### 五、注意事项 1. **资源泄漏风险**:必须手动关闭 `Connection`、`Statement`、`ResultSet`(推荐使用 `try-with-resources`)。 2. **SQL 注入防护**:始终使用 `PreparedStatement` 替代字符串拼接。 3. **连接池管理**:生产环境中建议使用连接池(如 HikariCP)而非直接 `DriverManager`。 --- ### 总结 Java 数据库连接(JDBC)是**数据库交互的基石**,尤其适合对性能、控制权有严格要求的场景。尽管需要编写更多样板代码,但其轻量、高效、灵活的特性使其在特定领域(如金融交易系统、大数据处理)中不可替代。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值