面试常问:
1. 数据库连接有哪些方式? 分别有什么区别
2. 数据库Statement和PreparedStatement有什么区别?
1.Java的数据库编程: JDBC
JDBC, 即java Datebase Connectivity, java数据库连接. 是一种用于执行SQL语句的java API, 它是java中的数据库连接规范. 这个API由java.sql.*, javax.sql.*包中的一些类和接口组成, 它为java开发人员操作数据库提供了一个标准的API, 可以为多种关系数据库提供统一访问.
2.JDBC使用步骤:
1. 创建数据库连接Connection
DriverManager()创建
DataSource获取
2.创建操作命令Statement
PreparedStatement
3.使用操作命令来执行SQL
查询操作
preparedStatement.executeQuery();
新增, 修改, 删除操作
preparedStatement.executeUpdate();
4.处理结果集ResultSet
while (resultSet.next()) {
int id = resultSet.getInt("id");
String sn = resultSet.getString("sn");
String name = resultSet.getString("name");
int classesId = resultSet.getInt("classes_id");
System.out.println(String.format("Student: id=%d, sn=%s, name=%s, classesId=%s", id, sn, name, classesId));
}
5.释放资源(关闭结果集, 命令, 连接)
//关闭结果集
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭命令
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//关闭连接命令
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
3.JDBC常用接口和类
1.数据库连接 Connection
Connection接口实现类由数据库提供, 获取Connection对象通常有两种方式:
(1) 通过DriverManager(驱动管理类)的静态方法获取:
(2) 通过DataSource(数据源) 对象获取. 实际应用中会使用DataSource对象.
以上两种方式的区别:
1. DriverManager类来获取的Connection连接, 是无法重复利用的, 每次使用完以后释放资源时, 通过connection.close()进行关闭物理连接.
2. DataSource提供连接池的支持. 连接池在初始化时将创建一定数量的数据库连接, 这些连接是可以复用的, 每次使用完数据库连接, 释放资源调用connection.close()将Connection连接对象回收.
2.Statement对象
Statement对象主要是将SQL语句发送到数据库中, JDBC API中主要提供了三种Statement对象.
Statement:
用于执行不带参数的简单SQL语句
PreparedStatement:
用于执行带或不带参数的SQL语句
SQL语句会预编译在数据库系统
执行速度快于Statement对象
CallableStatement:
用于执行数据库存储过程中的调用
实际开发中最常用的是PreparedStatement对象, 以下是对它的总结
1. 参数化SQL查询
2. 性能比Statement高
3. SQL预编译
4. 阻止常见SQL注入攻击
5. 占位符: ? 下标从1开始
6. 占位符不能使用多值