jdbc-2
前言
在上一个博客中我已经介绍并实施了jdbc的创建以及基本的数据库操作,那么在这里我将从几个方面再加以介绍。
提示:以下是本篇文章正文内容,下面案例可供参考
一、jdbc的工具类的创建
在每次编写代码是都会经常使用繁琐的jdbc创建连接以及创建通道之类的事情,那么我们将这样的一些繁琐的事情创建为一个工具类,在我们要使用时直接调用方法就可以实现对数据库的相关操作。
1.创建DBUtils工具类
public class DBUtils {}
2.定义工具类需要的对象
- 在之前的对数据库的连接可以知道会有下列的对象需要定义:
protected Connection connection = null;//连接对象的定义
protected PreparedStatement preparedStatement = null;//预状态通道对象
protected ResultSet resultSet = null;//结果集对象
protected int k = 0;//受影响的行数(后面增删改时需要利用的返回值)
private String url="jdbc:mysql://localhost:3306/wode?serverTimezone=UTC";
private String pass="123";
private String userName="root";
3.加载驱动
- 因为这里所有的方法都是封装到方法里面的,用静态,能够让所有的都能进行访问
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
4.获得连接
- 这里我使用的是普通连接(下面是常用的德鲁伊连接池连接)
protected Connection getConnection(){
try {
connection = DriverManager.getConnection(url, userName, pass);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
- 德鲁伊连接池连接
protected Connection getConnection() {
try {
//德鲁伊连接池
connection = dataSource.getConnection();
// connection = DriverManager.getConnection(url, userName, pass);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
5.创建通道
- 传入SQL创建通道
protected PreparedStatement getPreparedStatement(String sql) {
try {
getConnection();
preparedStatement = connection.prepareStatement(sql);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return preparedStatement;
}
6.给占位符赋值 list中保存的 是给占位符所赋的值
- 在传入SQL语句是利用占位符(?)来占位,并存储到list集合中
private void serParams(List list) {
try {
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
preparedStatement.setObject(i + 1, list.get(i));
}
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
7.增删改调取的方法
- 与上一个jdbc介绍差不多的方法(但是需要注意在后面传入返回时的差距)
protected int update(String sql, List params) {
try {
getPreparedStatement(sql);
serParams(params);
k = preparedStatement.executeUpdate();
return k;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return k;
}
8.查询的时候调取一个方法
protected ResultSet query(String sql, List list) {
try {
getPreparedStatement(sql);
serParams(list);
resultSet = preparedStatement.executeQuery();
return resultSet;
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
9.关闭资源
protected void closeAll() {
try {
if (resultSet != null) {
resultSet.close();
}
if (connection != null) {
connection.close();
}
if (preparedStatement != null) {
preparedStatement.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
二、实际项目操作
- 下面是对上面工具类的项目运用(飞机票)
1.创建实体类在bean包里
- 比较简单直接看下面
public class Airinfo {
private String airId;
private String airAdress;
private Date airTime;
public String getAirId() {
return airId;
}
public void setAirId(String airId) {
this.airId = airId;
}
public String getAirAdress() {
return airAdress;
}
public void setAirAdress(String airAdress) {
this.airAdress = airAdress;
}
public Date getAirTime() {
return airTime;
}
public void setAirTime(Date airTime) {
this.airTime = airTime;
}
}
2.创建接口并实现接口
- AirinfoDao接口
public interface AirinfoDao {
//1.定义查询所有航班
public List<Airinfo> airAll();
//2.按日期查询航班
public List<Airinfo> getBytime(String date);
//3.按目的地查询航班
public List<Airinfo> getByadress(String airadress);
//4.更新航班信息
public int upair(String newairid,String airadress,String date,String airid);
//5.删除航班
public int deleteair(String airid);
}
- 实现接口
public class AirinfoDaoImpl extends DBUtils implements AirinfoDao {
@Override
public List<Airinfo> airAll() {
String sql = "select *from airinfo";
preparedStatement = getPreparedStatement(sql);
try {
resultSet = preparedStatement.executeQuery();
List<Airinfo> air=new ArrayList();
while (resultSet.next()) {
Airinfo airinfo = new Airinfo();
airinfo.setAirId(resultSet.getString("airid"));
airinfo.setAirAdress(resultSet.getString("airadress"));
airinfo.setAirTime(resultSet.getDate("airtime"));
air.add(airinfo);
}
return air;
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
closeAll();
}
return null;
}
@Override
public List<Airinfo> getBytime(String date) {
String sql="SELECT *FROM airinfo WHERE airtime=?";
List list = new ArrayList();
list.add(date);
ResultSet res = query(sql, list);
List<Airinfo> air=new ArrayList();
try {
while (res.next()){
Airinfo airinfo = new Airinfo();
airinfo.setAirId(res.getString("airid"));
airinfo.setAirAdress(resultSet.getString("airadress"));
airinfo.setAirTime(resultSet.getDate("airtime"));
air.add(airinfo);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
closeAll();
}
return air;
}
@Override
public List<Airinfo> getByadress(String airadress) {
String sql="SELECT *FROM airinfo WHERE airadress=?";
List list = new ArrayList();
list.add(airadress);
ResultSet res = query(sql, list);
List<Airinfo> air=new ArrayList();
try {
while (res.next()){
Airinfo airinfo = new Airinfo();
airinfo.setAirId(res.getString("airid"));
airinfo.setAirAdress(resultSet.getString("airadress"));
airinfo.setAirTime(resultSet.getDate("airtime"));
air.add(airinfo);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
closeAll();
}
return air;
}
@Override
public int upair(String newairid,String airadress,String date,String airid) {
String sql = "UPDATE airinfo SET airid=?,airadress=?,airtime=? WHERE airid=?";
List list =new ArrayList();
list.add(0,newairid);
list.add(1,airadress);
list.add(2,date);
list.add(3,airid);
int updatew = update(sql, list);
// if (updatew>0){
// System.out.println("执行成功");
// }else {
// System.out.println(updatew);
// System.out.println("执行失败");
// }
closeAll();
return updatew;
}
@Override
public int deleteair(String airid) {
String sql = "DELETE FROM airinfo WHERE airid=?";
List list =new ArrayList();
list.add(airid);
int updatev = update(sql, list);
closeAll();
return updatev;
}
}
3.创建测试类调用测试
总结
这是我在学完jdbc数据库之后几天之后的总结,需要记忆的东西还有很多,在自己忘了的时候回来看看,因为自己在学习的时候问题就不是很大,所以写的就比较简单。