JDBC回顾
Class.forName
package com.zhou.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class JdbcDemo1 {
public static void main(String[] args) throws Exception {
String url="jdbc:mysql://localhost:3306/javaweb?serverTimezone=GMT%2B8";
String username="root";
String password="zmc19";
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接对象
Connection con = DriverManager.getConnection(url, username, password);
//3.定义SQL语句
// String sql="update books set bookCounts = 500 where bookID =5";
String sql="select * from books";
//4.获取执行SQL对象
Statement smt = con.createStatement();
//5.执行SQL
// int i = smt.executeUpdate(sql);
ResultSet rs = smt.executeQuery(sql);
//6.处理结果
while(rs.next()){
System.out.println("id="+rs.getObject("bookID"));
System.out.println("name="+rs.getObject("bookName"));
System.out.println("counts="+rs.getObject("bookCounts"));
System.out.println("details="+rs.getObject("detail"));
System.out.println("======================");
}
//7.释放资源
rs.close();
smt.close();
con.close();
}
}
详解各个对象
-
DriverManager:驱动管理对象
功能:
1.注册驱动:告诉程序要使用哪个驱动jar包
static void registerDriver(Driver driver) : 注册与给定的驱动程序 DriverManager
mysql 5 之后的jar包可以省略注册驱动的步骤 ,但我们一般不这样干。
2.获取数据库的连接
Connection con = DriverManager.getConnection(url, username, password); 三个参数:
//String url="jdbc:mysql://localhost:3306/javaweb?serverTimezone=GMT%2B8"; String url="jdbc:mysql:///javaweb?serverTimezone=GMT%2B8"; //可以简写代码 String username="root"; String password="zmc19"; -
Connection:数据库连接对象
功能:
Statement smt = con.createStatement(); 1.获取执行sql的对象 statement
2.管理事务(要么同时成功,要么同时失败)
- 开启事务: void setAutoCommit(boolean autoCommit):默认为false,即为开启事务
- 提交事务:commit();
- 回滚事务: rollback();
-
Statement:执行SQL的对象
ResultSet rs = smt.executeQuery(sql);-
查询:executeQuery(sql); 返回 rs
-
增删改:.executeUpdate(sql); 返回影响的行数
-
-
ResultSet:返回结果集
结果集的处理:
方法:
next (); 游标移动至下一行
getXXX() ; 获取数据类型 里面的参数为数据库中的字段名
使用步骤:
- 右边向下移动一行
- 判断是否有数据
- 获取数据并且打印处理
-
PreparedStatement:预编译
练习
需求:
- 增加
- 修改
String sql="update books set bookName='测试' where bookId = 6";
String url="jdbc:mysql://localhost:3306/javaweb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8";
有时候会出现乱码问题在url上进行添加约束:
一般情况:这三个同时加上就没问题了!!!
- 删除
String sql="delete from books where bookID = 6";
-
查询(select):查询books表中的数据将其封装为对象,然后转载集合返回
步骤:
1.定义一个实体类
//封装books表的javaBean @Data @AllArgsConstructor @NoArgsConstructor public class Book { private int bookID; private String bookName; private int bookCounts; private String detail; } 2.定义方法 实现方法
public class JdbcDemo3 { private Connection con; private Statement smt; ResultSet rs; List<Book> list = new ArrayList<Book>(); String url="jdbc:mysql:///javaweb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8"; String username="root"; String password="zmc19"; String sql="select * from books"; //定义方法 public List<Book> findAll(){ try { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.获取连接 con = DriverManager.getConnection(url,username,password); //3.获取执行Sql对象 smt = con.createStatement(); //4.执行sql rs = smt.executeQuery(sql); //5.结果集处理 遍历 封装对象,转载集合 Book book = null; while (rs.next()){ //获取数据 int id = rs.getInt("bookID"); String name = rs.getString("bookName"); int counts = rs.getInt("bookCounts"); String detail = rs.getString("detail"); //创建对象 book = new Book(); book.setBookID(id); book.setBookName(name); book.setBookCounts(counts); book.setDetail(detail); //装载集合 list.add(book); } } catch (Exception e) { e.printStackTrace(); }finally { //释放资源 try { rs.close(); smt.close(); con.close(); } catch (SQLException throwables) { throwables.printStackTrace(); } } return list; } } 3.测试.........
public class MyTest { @Test public void test(){ //创建对象 List<Book> list = new JdbcDemo3().findAll();\ //遍历 for (Book book : list) { System.out.println(book); } }结果如图:
注册驱动的另外一种方式:
工具类的使用 来简化代码 (抽取JDBC的工具类)
分析抽取的部分
- 注册驱动
- 抽取一个方法获取连接对象
- 抽取一个方法来释放资源
-
jdbc.properties
url=jdbc:mysql://localhost:3306/javaweb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8 username=root password=zmc19 driver=com.mysql.jdbc.Driver -
实体类
//封装books表的javaBean @Data @AllArgsConstructor @NoArgsConstructor public class Book { private int bookID; private String bookName; private int bookCounts; private String detail; -
工具类
public class JDBCUtils { private static String url; private static String username; private static String password; private static String driver; /* 期望:文件的读取,只需要读取一次就可以拿到这些值。使用静态代码块 **/ static{ //1.读取资源文件,获取值 properties集合类来读取 Properties pro = new Properties(); try { //2.加载文件 pro.load(new FileReader("D:\\Program Files\\JetBrains\\WorkSpasce\\IDEA\\JavaWeb\\JDBC-01\\src\\main\\resources\\jdbc.properties")); //3.获取数据 url=pro.getProperty("url"); username=pro.getProperty("username"); password=pro.getProperty("password"); driver=pro.getProperty("driver"); //4.注册驱动 Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } //1.抽取获取连接的方法 静态(方便调用) public static Connection getConnection() throws SQLException { return DriverManager.getConnection(url,username,password); } //2.抽取释放资源的方法 public static void close(Statement smt,Connection con) throws SQLException { if(smt!=null){ smt.close(); } if(con!=null){ con.close(); } } //方法的重载 public static void close(ResultSet rs, Statement smt, Connection con) throws SQLException { if(smt!=null){ smt.close(); } if(con!=null){ con.close(); } if(rs!=null){ rs.close(); } } } -
调用类:
public class JdbcDemo4 { private Connection con; private Statement smt; ResultSet rs; List<Book> list = new ArrayList<Book>(); String sql="select * from books"; public List<Book> findAll2() throws SQLException { try { con = JDBCUtils.getConnection(); smt = con.createStatement(); rs = smt.executeQuery(sql); Book book = null; while (rs.next()){ //获取数据 int id = rs.getInt("bookID"); String name = rs.getString("bookName"); int counts = rs.getInt("bookCounts"); String detail = rs.getString("detail"); //创建对象 book = new Book(); book.setBookID(id); book.setBookName(name); book.setBookCounts(counts); book.setDetail(detail); //转载集合 list.add(book); } } catch (Exception e) { e.printStackTrace(); } JDBCUtils.close(rs,smt,con); return list; } } -
测试类:
@Test public void test2() throws SQLException { List<Book> list = new JdbcDemo4().findAll2(); for (Book book : list) { System.out.println(book); } }结果也一样:
浙公网安备 33010602011771号