JDBC是Java用来操作数据库的技术,它提供了统一的接口,用来规范不同的数据库厂商为它提供实例.
接口的引用指向驱动提供的实例
JDBC主要接口与类
- DriverManager
驱动管理,用来管理数据库中的连接等内容.新版jar包,不需要手动加载
- Connection
Java程序与数据库之间的连接,通过DriverManager创建,需要指定数据库,用户名,密码.
Connection con = DriverManager.getConnection(
"jdbc:mysql://47.108.65.254/ApesourceAggregateData?useSSL=false&serverTimezone=UCT",
"apesource_stu", "Apesource=1024");
- Statement与PreparedStatement
Statement,执行SQL语句,通过Connection创建
String sql1 = "select * from coupon_info where id >=" + 1000 + " AND id <= " + 9999;
Statement st = con.createStatement(); //创建
ResultSet rs1 = st.executeQuery(sql1); //执行
PreparedStatement ,数据库预处理操作(预编译,提高SQL执行速度和效率),执行sql语句
String sql2 = "select * from coupon_info where id >= ? AND id <= ? limit 10";
pst = con.prepareStatement(sql2); //创建
pst.setInt(1, 50);//处理第1个问号占位符
pst.setInt(2, 150);//处理第1个问号占位符
ResultSet rs2 = pst.executeQuery();//执行
-
ResultSet
数据库操作集,返回的并非数据库内容的集合.用来操作数据库
while(rs2.next()) {
//处理当前行每个字段的数据
//获取id字段(int类型)中的数据
int id = rs2.getInt("id");
String code = rs2.getString("coupon_code");
String expiryTime = rs2.getString("expiry_time");
代码示例
-
批处理
要点是,重复设置占位符,通过addBatch()方法加入缓存,最后统一处理,executeBatch()
/**
* 批量删除商品
*
* @param productIds 即将删除商品编号数组
* @return 删除成功=true、删除失败=false
*/
@Override
public boolean deleteProducts(int... productIds) {
// 定义SQL语句
String sql = "DELETE FROM product_info WHERE product_id = ?";
boolean bool = false;
try {
// 获取连接
con = JDBCUtilsx.createConnection();
// 处理占位符
for (int i : productIds) {
pst = con.prepareStatement(sql);
pst.setInt(1, i);
//批处理
pst.addBatch();
}
int[] rows = pst.executeBatch();
int count = 0;
for (int i = 0; i < rows.length; i++) {
count += rows[i];
}
//判断是否全部删除
bool = rows.length == count ? true : false;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} finally {
close();
}
return bool;
}
-
主键回填
获取添加内容的主键,要点是预处理要填入参数
pst = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
statment与preparestatement的区别
三点,执行方式,性能,sql注入
- preparestatement预处理,创建时就传入SQL语句,statment在执行时传入SQL
- statment会多次拼接字符串性能降低,sql注入不安全.
- preparestatement使用占位符