Day2 JDBC
JDBC
JDBC的全称是Java DataBase Connectivity, 即Java数据库连接。它由一组用Java编写的类和接口组成,如util类用来创建驱动、连接数据库和关闭资源,bean实体类用来存储数据库中的数据,Dao类是访问数据库的操作类,即对数据库的增删改查操作。这些类的存在极大减少代码的重复量,而且类的方法调用起来也十分方便。
JDBC的总体过程为:
1.加载驱动
2.创建连接
3.写sql
4.得到statement对象
5.执行sql得到结果集
6.处理结果集
7.关闭资源
项目目录结构
导入jar包
第一步我们需要导入jar包到java工程中去,复制jar包到项目的lib目录下(如果没有该目录新建一个即可),只做这一步当然还不够,还需要右键该jar包,选择"Add as Library"
即可。
新建工具类DBUtil
在util包中新建数据库的工具类,这个类中封装了加载驱动、创建连接和关闭资源的方法。
public static Connection getConnection() {
ResultSet rs = null;
PreparedStatement statement = null;
Connection connection = null;
try {
// 1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2.创建连接
connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/user?useSSL=true&characterEncoding=utf-8&user=root&password=123456");
System.out.println("创建连接成功");
} catch (Exception e) {
e.printStackTrace();
}
return connection;
}
public static void close(Connection connection, PreparedStatement statement, ResultSet rs) {
// 7.关闭资源
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
新建实体类UserInfo
在bean包中新建数据库的实体类,用来存储数据库中的数据,可以看作一个表。
private int id;
private String username;
private String password;
public UserInfo(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public int getId(){
return id;
}
public void setId(int id) {
this.id = id;
}
//username和password的set和get方法类似,这里就不再给出
新建操作类UserInfoDao
在dao包中新建数据库的操作类,用于封装一些对数据库的操作方法,如查询、增加等。
public List<UserInfo> findAll() {
ResultSet rs = null;
PreparedStatement statement = null;
Connection connection = null;
List<UserInfo> list = new ArrayList<>();
try {
connection = DBUtil.getConnection();
// 3.写sql
String sql = "select * from user_info";
// 4.得到statement对象执行sql
statement = connection.prepareStatement(sql);
// 5.得到结果集
rs = statement.executeQuery();
// 6.处理结果集
while (rs.next()) {
UserInfo userInfo = new UserInfo(rs.getInt(1), rs.getString(2), rs.getString(3));
list.add(userInfo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 7.关闭资源
DBUtil.close(connection, statement, rs);
}
return list;
}
public void add() {
Connection connection = null;
PreparedStatement statement = null;
int rs;
try {
connection = DBUtil.getConnection();
String sql = "insert into user_info(username,password) values(?,?)";
statement = connection.prepareStatement(sql);
statement.setString(1, "jojo");
statement.setString(2, "lili");
rs = statement.executeUpdate();
System.out.println(rs);
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(connection, statement, null);
}
}
测试
在测试类中试试能否正确运行
public class Test {
public static void main(String[] args) {
//实例化操作类
UserInfoDao test = new UserInfoDao();
//用列表存储返回的用户信息
List<UserInfo> list = test.findAll();
System.out.println(list);
//向数据库中添加数据
test.add();
//再次返回数据库信息
list = test.findAll();
System.out.println(list);
}
}