Java中数据库进行jdbc连接怎莫进行连接封装
和释放呢?我们以学生管理系统为例:
话不多说,看秦哥直接上代码:
public class StudentDao {
//学生对象数据库访问层
//查询学生所有信息
//运用集合,先把查询到的信息放入到集合里面
public ArrayList<StudentEntity> allstudent() throws ClassNotFoundException, SQLException{
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//java连接数据库
//导入mysql驱动jar包
//注册驱动javase反射机制 class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//获取数据库的连接
Connection connection1=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTF-8","root","123");
//获取执行者对象
Statement statement1=connection1.createStatement();
//执行sql语句并返回结果
String sql="select * from student";
ResultSet resultSet1=statement1.executeQuery(sql);
ArrayList<StudentEntity> studentEntities = new ArrayList<>();
//对结果进行处理
while(resultSet.next())
{
// 获取该行数据的第一列 id
Long id = resultSet1.getLong("id");
// 获取该行数据的第二列 name
String name = resultSet1.getString("name");
// 获取该行数据的第三列 age
Integer age = resultSet1.getInt("age");
// 获取该行数据的第四列 address
String address = resultSet1.getString("address");
// 将db中查询到数据封装成java学生对象
//注意这个,这就是封装里面的内容哦
//将这个里面的对象和一些值 传递过来 这就是传参 这个非常重要
StudentEntity studentEntity = new StudentEntity(id, name, age, address);
// 将该对象存入到集合中
studentEntities.add(studentEntity);
}
return studentEntities;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
// 7. 释放jdbc资源
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 根据学生id 查询学生信息 学生的id
*
* @return
*/
public StudentEntity getByIdStudent(Long stuId) {
/**
* 判断用户是否传递学生id的值
*/
if (stuId == null) {
return null;
}
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 自己拼接 查询sql语句
resultSet = statement.executeQuery("select * from student where id=" + stuId);
boolean result = resultSet.next(); // 查询不到数据 false
// 判断如果查询不到数据 则不会取值
if (!result) {
return null;
}
//6. 对结果进行处理
// 获取该行数据的第一列 id
Long id = resultSet.getLong("id");
// 获取该行数据的第二列 name
String name = resultSet.getString("name");
// 获取该行数据的第三列 age
Integer age = resultSet.getInt("age");
// 获取该行数据的第四列 address
String address = resultSet.getString("address");
// 将db中查询到数据封装成java学生对象
StudentEntity studentEntity = new StudentEntity(id, name, age, address);
return studentEntity;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
// 7. 释放jdbc资源
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 插入我们的学生
*
* @param stu
* @return
*/
public int insertStudent(StudentEntity stu) {
Connection connection = null;
Statement statement = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 executeUpdate执行 insert sql语句
String insertStudentSql = "INSERT INTO student values(null,'" + stu.getName() + "'," + stu.getAge() + ",'" + stu.getAddress() + "')";
System.out.println("insertStudentSql:" + insertStudentSql);
// log输出
int result = statement.executeUpdate(insertStudentSql);
// 执行该sql语句 影响行数
return result;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
// 7. 释放jdbc资源
try {
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 修改学生的信息
*
* @param stu
* @return
*/
public int updateStudent(StudentEntity stu) {
Connection connection = null;
Statement statement = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 executeUpdate执行 update sql语句
String updateStudentSql = "update student set name='" + stu.getName() + "' ,age=" + stu.getAge() + "," +
"address='" + stu.getAddress() + "' where id=" + stu.getId() + "";
// log输出
System.out.println("updateStudentSql:" + updateStudentSql);
int result = statement.executeUpdate(updateStudentSql);
// 执行该sql语句 影响行数
return result;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
// 7. 释放jdbc资源
try {
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 根据主键id删除学生信息
*
* @param id
* @return
*/
public int delStudent(Long id) {
// 判断id是否为null
if (id == null) {
return 0;
}
Connection connection = null;
Statement statement = null;
try {
//A.java连接mysql数据库查询所有数据
//1.导入mysql驱动jar包;
//2. 注册驱动 javase 反射机制Class.forName()
Class.forName("com.mysql.cj.jdbc.Driver");
//3. 获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student?serverTimezone=UTC", "root", "123");
//4. 获取执行者对象
statement = connection.createStatement();
//5. 执行sql语句并获取返回结果 executeUpdate执行 delete sql语句
String delSQL = "delete from student where id=" + id;
System.out.println("delSql:" + delSQL);
// log输出
int result = statement.executeUpdate(delSQL);
// 执行该sql语句 影响行数
return result;
} catch (Exception e) {
e.printStackTrace();
return 0;
} finally {
// 7. 释放jdbc资源
try {
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我们需要讨论与分层架构
分层架构
entity—实体类----创建实体类与数据库表结构字段一一对应的
dao----数据库访问层----db打交道
serivce—业务逻辑层
controller—控制层
1.导入mysql驱动jar包;
2.注册驱动 javase 反射机制Class.forName()
3.获取数据库连接
4.获取执行者对象
5.执行sql语句并获取返回结果
6.对结果进行处理
7.释放jdbc资源
在src目录下创建config.properties配置文件
driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mayikt?serverTimezone=UTC
user=root
password=123
.编写jdbc工具 获取连接 释放连接
类名称.方法名称
public class MayiktJdbcUtils {
/**
* 1.需要将我们的构造方法私有化 —工具类 不需要 new出来 是通过类名称.方法名称访问
*/
private JdbcUtils() {
}
/**
* 2.定义工具类 需要 声明 变量
*/
private static String driverClass;
private static String url;
private static String user;
private static String password;
/**
*3.使用静态代码快 来给我们声明好 jdbc变量赋值(读取config.properties)
*/
static {
try {
// 1.读取config.properties IO 路径 相对路径
InputStream resourceAsStream = JdbcUtils.class.getClassLoader().
getResourceAsStream("config.properties");
// 2.赋值给我们声明好的变量
Properties properties = new Properties();
properties.load(resourceAsStream);
driverClass = properties.getProperty("driverClass");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
// 3.注册驱动类
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 4.封装连接方法
*/
public static Connection getConnection() {
try {
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 5.封装释放连接方法 (重载)
*/
public static void closeConnection(ResultSet resultSet, Statement statement, Connection connection) {
// 1.查询 释放连接 resultSet statement connection
try {
if (resultSet != null)
resultSet.close();
if (statement != null)
statement.close();
if (connection != null)
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
// 2.增删改 释放连接 statement connection
}
/**
* 增删改---释放jdbc资源
*
* @param statement
* @param connection
*/
public static void closeConnection(Statement statement, Connection connection) {
// 1.查询 释放连接 resultSet statement connection
closeConnection(null, statement, connection);
}
}
感兴趣的小伙伴可以去试一试哦!