**JDBC基础**
Java Database Connectivity (JDBC) 是Java编程语言中用于标准地访问数据库的API,由Sun Microsystems(现已被Oracle公司收购)开发并维护。JDBC为开发者提供了一套标准的接口,使得Java程序员可以连接到各种不同的数据库系统,如MySQL、Oracle、SQL Server等,进行数据的增删查改操作。理解JDBC的基础知识对于任何Java开发者来说都是至关重要的。
1. **JDBC驱动类型**
- **类型1:JDBC-ODBC桥接驱动** - 使用Java代码调用ODBC驱动来与数据库交互,适用于没有Java驱动的数据库。
- **类型2:部分Java驱动(Native-API部分Java驱动)** - 需要依赖数据库供应商提供的本地库。
- **类型3:网络纯Java驱动(协议驱动)** - 通过网络协议与数据库通信,完全基于Java实现。
- **类型4:JDBC native协议驱动(完全Java驱动)** - 直接使用数据库的原生协议,性能较好,无须依赖本地库。
2. **JDBC连接步骤**
- 加载驱动:`Class.forName("com.mysql.jdbc.Driver")`
- 创建连接:`Connection conn = DriverManager.getConnection(url, username, password)`
- 获取Statement或PreparedStatement对象,用于执行SQL语句。
- 执行SQL语句:`Statement stmt = conn.createStatement()` 或 `PreparedStatement pstmt = conn.prepareStatement(sql)`
- 处理结果集:`ResultSet rs = stmt.executeQuery(sql)` 或 `rs = pstmt.executeQuery()`
- 关闭资源:`rs.close()`, `stmt.close()`, `conn.close()`
3. **Statement与PreparedStatement的区别**
- **Statement** 用于执行静态SQL语句,如果SQL语句包含用户输入的参数,可能存在SQL注入风险。
- **PreparedStatement** 提供预编译的SQL语句,能提高执行效率,并且自动处理SQL注入问题。
4. **ResultSet对象**
- ResultSet是执行查询后返回的结果集,它是一个游标,可以向前移动但不能向后移动。
- 使用`next()`方法移动到下一行,`getString(columnIndex)`或`getObject(columnLabel)`获取列值。
5. **事务处理**
- JDBC支持事务管理,通过`conn.setAutoCommit(false)`关闭自动提交,然后手动调用`conn.commit()`或`conn.rollback()`来控制事务的提交和回滚。
6. **批处理**
- 对于多条相似的SQL语句,可以使用批处理提高性能。`addBatch()`方法添加SQL语句,`executeBatch()`执行批处理。
7. **连接池**
- 连接池(如C3P0、HikariCP、Apache DBCP)管理数据库连接,避免频繁创建和关闭连接,提高应用性能和资源利用率。
8. **JDBC的优缺点**
- 优点:跨平台性、统一接口、高效(类型4驱动)、支持批处理和事务处理。
- 缺点:代码繁琐,易出错,需手动处理资源关闭,不支持ORM(对象关系映射)。
了解并熟练掌握这些JDBC基础,能够帮助开发者更有效地在Java应用程序中与数据库进行交互。通过学习和实践,可以进一步提升数据库操作的效率和安全性。