开发步骤:

1. 注册驱动.
2. 获得连接.
3. 获得语句执行平台
4. 执行sql语句
5. 处理结果
6. 释放资源

  1. package jdbc.demo.ba1;
  2. import org.junit.Test;
  3. import java.sql.*;
  4. public class JDBCDemo1 {
  5. @Test
  6. public void testJDBC() throws ClassNotFoundException, SQLException {
  7. /*
  8. DriverManager是管理驱动
  9. getConnection(url,user,password); - 数据库连接,用户名,密码
  10. url格式:
  11. jdbc:mysql://ip地址:端口/数据库名称?字符集及时区
  12. 简化版:jdbc:mysql:///数据库名称
  13. */
  14. //1.注册驱动 - 反射
  15. Class.forName("com.mysql.cj.jdbc.Driver");
  16. //2.获取连接 - Connection接口
  17. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai","root","root");
  18. //3.获取执行者
  19. Statement st = conn.createStatement();
  20. //4.执行sql语句
  21. ResultSet rs = st.executeQuery("select * from category");
  22. //5.处理结果集
  23. while (rs.next()){
  24. //获取一行数据
  25. Integer cid = rs.getInt("cid");
  26. String cname = rs.getString("cname");
  27. System.out.println(cid+","+cname);
  28. }
  29. //6.释放资源
  30. rs.close();
  31. st.close();
  32. conn.close();
  33. }
  34. }

释放资源:
为了代码的可读性和可维护性,
我们通常使用以下的格式:将jdbc中用到的接口先声明好
因为释放资源是必须的,所以可以放在finally块中

JDBCUtils的封装

  1. //jdbc模板
  2. public void demo01(){
  3. Connection conn = null;
  4. Statement st = null;
  5. ResultSet rs = null;
  6. try{
  7. //逻辑操作
  8. } catch (Exception e){
  9. e.printStackTrace();
  10. } finally {
  11. //释放资源
  12. JDBCUtils.closeResource(conn,st,rs);
  13. }
  14. }
  15. //封装释放资源的方法
  16. public static void closeResource(Connection conn, Statement st, ResultSet rs){
  17. try{
  18. if(rs != null) rs.close();
  19. if(st != null) st.close();
  20. if(conn != null) conn.close();
  21. } catch (SQLException e){
  22. e.printStackTrace();
  23. }
  24. }
package jdbc.demo.ba2;

import java.sql.*;

/**
 * 这个jdbc的一个工具类,用于封装jdbc操作中的重复操作
 *
 * 当前这个工具类一旦封装好就可以重复使用,为了讲究效率,我们尽量使用静态
 */
public class JDBCUtils {
    //声明连接数据库必要的数据:驱动,url,账号,密码
    private static String driver = "com.mysql.cj.jdbc.Driver";
    private static String url = "jdbc:mysql://localhost:3306/mydb";
    private static String user = "root";
    private static String password = "root";
    //以上变量只需要加载一次
    static{
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //下面我们要封装两个操作:获取连接和关闭连接
    //封装获得连接的方法
    public static Connection getConn() throws SQLException {
        //直接获取连接
        Connection conn = DriverManager.getConnection(url,user,password);
        return conn;
    }

    //封装释放资源的方法
    public static void closeResource(Connection conn, Statement st, ResultSet rs){
        try{
            if(rs != null) rs.close();
            if(st != null) st.close();
            if(conn != null) conn.close();
        } catch (SQLException e){
            e.printStackTrace();
        }
    }

    //测试
    public static void main(String[] args) throws SQLException {
        Connection conn = getConn();
        System.out.println(conn);
    }
}

CRDU - 增删查改

package jdbc.demo.ba2;

import org.junit.Test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * CRDU:增删改查
 * C - create - 增
 * R - retrieve - 查
 * D - delete - 删
 * U - update - 更新;改
 */
public class CRDUDemo {
    static Connection conn = null;
    static Statement st = null;
    static ResultSet rs = null;
    //jdbc模板
    public void demo01(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;

        try{
            //逻辑操作
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtils.closeResource(conn,st,rs);
        }
    }

    @Test
    public void testCreate(){
        try{
            //获取连接
            conn = JDBCUtils.getConn();
            st = conn.createStatement();
            int r = st.executeUpdate("insert into category (cname) values('测试数据1')");
            //反馈结果
            System.out.println(r);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            //释放资源
            JDBCUtils.closeResource(conn,st,rs);
        }
    }

    @Test
    public void testUpdate(){
        try{
            //获取连接
            conn = JDBCUtils.getConn();
            st = conn.createStatement();
            int r = st.executeUpdate("update category set cname='修改了数据1为2' where cid = 4");
            System.out.println(r);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            JDBCUtils.closeResource(conn,st,rs);
        }
    }

    @Test
    public void testDelete(){
        try{
            //获取连接
            conn = JDBCUtils.getConn();
            st = conn.createStatement();
            int r = st.executeUpdate("delete from category where cid=4");
            System.out.println(r);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            JDBCUtils.closeResource(conn,st,rs);
        }
    }
}

预处理对象 - PreparedStatement对象

  • 通过连接获取预处理对象

conn.prepareStatement(sql); - 传参sql语句

  • 给sql语句设置实参,通过预处理对象完成(?替换符)

psmt.setString(1,"data");第一个参数是?的位置,从1开始;第二个参数是传入的实参

  • 执行预处理对象,执行完整sql语句

psmt.executeUpdate();

package jdbc.demo.ba4;

import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class PrepareDemo {

    @Test
    public void test(){
        Connection conn = null;
        PreparedStatement psmt = null;
        ResultSet rs = null;
        try{
            //1.获取连接
            conn = JDBCUtils.getConn();
            //2.处理sql语句
            String sql = "insert into category(cname) values(?)";
            //3.获取预处理对象
            psmt = conn.prepareStatement(sql);
            //4.设置实际参数
            psmt.setString(1,"预处理");
            //5.执行
            int r = psmt.executeUpdate();
            System.out.println(r);
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //6.释放资源
            JDBCUtils.closeResource(conn,psmt,rs);
        }
    }
}