相比基础篇对代码进行优化
- 阶段复习之jdbc连接数据库(一)——基础篇https://blog.csdn.net/IManiy/article/details/82356226
基础篇存在缺点,代码不够简洁,很多重复的步骤没有进行提取封装而且不能提供参数传值、没有关闭资源。
所有我们引进UserDao层进行代码封装
- 数据库文件和实体类和基础篇一样没有变化。
- UserDao写重复的步骤
- 可以把jdbc的字段提取出来
- 把sql改成参数传值
- 返回值boolean类型,如果默认为false如果sql执行成功赋值true
- 关闭资源,先产生的后关闭
代码示例
public class UserDao {
String jdbDriver = "com.mysql.jdbc.Driver";
String jdbcURL = "jdbc:mysql://localhost:3306/jdbctest";
String jdbcUser = "root";
String jdbcPassword = "123456";
//保存一条数据
public boolean saveUser(User user) {
boolean flag = false;
//获取连接
Connection conn = null;
//产生执行sql语句的对象
Statement st = null;
//加载驱动
try {
Class.forName(jdbDriver);
conn = DriverManager.getConnection(jdbcURL, jdbcUser, jdbcPassword);
System.out.println(conn);
st = conn.createStatement();
//插入一条记录
String sql="INSERT into user (username,password) VALUES ('"+user.getUsername()+"','"+user.getPassword()+"')";
int rows = st.executeUpdate(sql);
if (rows > 0) {
flag=true;
System.out.println("插入数据成功!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭资源,先产生的后关闭
if(st !=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (conn !=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
return flag;
}
//删除
public boolean delectByUserId(int userId) {
boolean flag = false;
//获取连接
Connection conn = null;
//产生执行sql语句的对象
Statement st = null;
//加载驱动
try {
Class.forName(jdbDriver);
conn = DriverManager.getConnection(jdbcURL, jdbcUser, jdbcPassword);
System.out.println(conn);
st = conn.createStatement();
//删除一条记录
String sql="DELETE from `user` where userId="+userId;
int rows = st.executeUpdate(sql);
if (rows > 0) {
flag=true;
System.out.println("删除数据成功!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭资源,先产生的后关闭
if(st !=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (conn !=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
return true;
}
public boolean updateUser(User user){
boolean flag = false;
Connection conn =null;
Statement st =null;
try {
Class.forName(jdbDriver);
conn =DriverManager.getConnection(jdbcURL,jdbcUser,jdbcPassword);
st =conn.createStatement();
String sql ="update user set password ='"+user.getPassword()+"' where userId="+user.getUserId();
int rows = st.executeUpdate(sql);
if (rows > 0) {
flag=true;
System.out.println("修改数据成功!");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
finally {
//关闭资源,先产生的后关闭
if(st !=null){
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
if (conn !=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
return flag;
}
}
这样封装了jdbc对数据库的增删改查,我们在执行的过程就不在繁琐了
执行代码
public class Test02 {
public static void main(String[] args) {
UserDao userDao =new UserDao();
/*User user=new User();
user.setUsername("xiaoha");
user.setPassword("123456");
boolean flag =userDao.saveUser(user);
System.out.println(flag?"插入成功!":"插入失败");*/
/*boolean flag2 =userDao.delectByUserId(4);
System.out.println(flag2?"删除成功!":"删除失败");*/
User user=new User();
user.setUserId(5);
user.setPassword("1234");
boolean flag =userDao.updateUser(user);
System.out.println(flag?"更新成功!":"更新失败");
}
}