初识JDBC

1.连接方式

  • 前端层:由htmlcssjsjquery组成,负责页面展示与用户交互,通过ajax技术与后端通信。
  • 后端服务层:以servlet服务为核心,承担请求处理、业务逻辑实现的功能,通过jdbc技术与数据库交互。
  • 数据层:采用mysql数据库,用于存储应用数据。

2.使用JDBC实现后端和数据库交互的流程

1. 初始化阶段

  • 导入驱动包:为 Java 程序提供操作特定数据库的驱动支持,例如操作 MySQL 需导入mysql-connector-java包。
  • DriverManager 注册驱动:通过DriverManager类将数据库驱动注册到 Java 运行环境,使程序能识别并调用驱动。
  • Connection 链接数据库:建立 Java 程序与数据库的连接,需指定数据库 URL、用户名、密码等信息。

2. 数据库操作阶段

  • Statement 操作数据库:用于执行 SQL 语句,支持增删改查操作。其中查询操作会生成ResultSet封装查询结果集,增删改操作则直接执行并返回影响行数。
  • ResultSet 封装查询结果集:存储查询得到的数据集,可通过其方法遍历、获取数据。

3. 资源关闭阶段

  • 关闭 ResultSet 对象:释放查询结果集占用的资源。
  • 关闭 Statement 对象:释放 SQL 语句执行对象占用的资源。
  • 关闭 Connection 对象:释放数据库连接资源,这是 JDBC 操作中保证资源释放、避免连接泄漏的关键步骤。

DriverManager - 驱动管理类 - 负责管理数据库驱动连接

Connection - 数据库连接类 - 建立与数据库的连接(包含用户名、密码、URL等参数)

Statement - SQL语句执行器 - 用于编译和执行SQL操作指令

ResultSet - 结果集对象 - 存储并封装SQL查询返回的结果数据

3.操作

1.导包

2.加载驱动

con = DriverManager.getConnection(url,"root","2020");//获取连接

3.连接数据库

Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动

4.操作数据库

statement = con.createStatement();//创建Statement对象

5.返回结果

resultSet = statement.executeQuery(sql);//执行SQl语句
//处理结果集
while(resultSet.next()){//如果有数据
    String id = resultSet.getString("id");
    String username = resultSet.getString("username");
    String password = resultSet.getString("password");
    String sex = resultSet.getString("sex");
    String age = resultSet.getString("age");
    String phone = resultSet.getString("phone");
    String address = resultSet.getString("address");
    System.out.println(id+" "+username+" "+password+" "+sex+" "+age+" "+phone+" "+address);
}

增删改

不需要resultSet = statement.executeQuery(sql);//执行SQl语句

直接

statement.executeUpdate(sql);//执行SQl语句

4.练习题

查询表user

package com.qcby.sql;

import java.sql.*;

public class JDBCSearchUtil {
    public static void main(String[] args) throws SQLException {
        String sql ="select * from user";
        search(sql);//调用方法
    }
    public static void search(String sql) throws SQLException {
        String url ="jdbc:mysql://localhost:3306/0910demo?useSSL=false&serverTimezone=UTC";
        Connection con = null;
        Statement statement = null;
        ResultSet resultSet = null;
        try {
              Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
              con = DriverManager.getConnection(url,"root","2020");//获取连接
              statement = con.createStatement();//创建Statement对象
              resultSet = statement.executeQuery(sql);//执行SQl语句
              //处理结果集
              while(resultSet.next()){//如果有数据
                  String id = resultSet.getString("id");
                  String username = resultSet.getString("username");
                  String password = resultSet.getString("password");
                  String sex = resultSet.getString("sex");
                  String age = resultSet.getString("age");
                  String phone = resultSet.getString("phone");
                  String address = resultSet.getString("address");
                  System.out.println(id+" "+username+" "+password+" "+sex+" "+age+" "+phone+" "+address);
              }
            }catch (Exception e){
            e.printStackTrace();
        }finally {
            //资源关闭
            resultSet.close();
            statement.close();
            con.close();
        }
    }
}

统计表的数据

package com.qcby.sql;

import java.sql.*;

public class JDBCGetCountUtil {
    public static void main(String[] args) throws SQLException {
        String sql ="select count(*) from user";
        search(sql);
    }
    public static void search(String sql) throws SQLException {
        String url ="jdbc:mysql://localhost:3306/0910demo?useSSL=false&serverTimezone=UTC";
        Connection con = null;
        Statement statement = null;
        ResultSet set = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
            con = DriverManager.getConnection(url,"root","2020");//获取连接
            statement = con.createStatement();//创建Statement对象
            set = statement.executeQuery(sql);//执行SQl语句
            while(set.next()){
                int count = set.getInt(1);
                System.out.println(count);
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //资源关闭
            set.close();
            statement.close();
            con.close();
        }
    }
}

增加数据

package com.qcby.sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCInsertUtil {
    public static void main(String[] args) throws SQLException {
        String sql ="insert into user (username,password,sex,age,phone,address) values('admin','123456','男',18,'12345678901','上海')";
        insert(sql);
    }
    public static void insert(String sql) throws SQLException {
        String url ="jdbc:mysql://localhost:3306/0910demo?useSSL=false&serverTimezone=UTC";
        Connection con = null;
        Statement statement = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
            con = DriverManager.getConnection(url,"root","2020");//连接数据库
            statement = con.createStatement();//创建Statement对象
            statement.executeUpdate(sql);//执行SQL语句
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //资源关闭
            statement.close();
            con.close();
        }

    }
}

改变数据

package com.qcby.sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUppdateUtil {
    public static void main(String[] args) throws SQLException {
        String sql ="update user set username = '老王' where id = 7";
        update(sql);
    }
    public static void update(String sql) throws SQLException {
        String url ="jdbc:mysql://localhost:3306/0910demo?useSSL=false&serverTimezone=UTC";
        Connection con = null;
        Statement stat = null;
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
            con = DriverManager.getConnection(url,"root","2020");//连接数据库
            stat = con.createStatement();//创建Statement对象
            stat.executeUpdate(sql);//更新数据库
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //资源关闭
            stat.close();
            con.close();

        }
    }
}

删除数据

package com.qcby.sql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCDeleteUtil {
    public static void main(String[] args) throws SQLException {
        String sql ="delete from user where id = 8";
        delete(sql);
    }
    public static void delete(String sql) throws SQLException {
        String url ="jdbc:mysql://localhost:3306/0910demo?useSSL=false&serverTimezone=UTC";//数据库连接地址
        Connection con =null;
        Statement stat = null;
        try{
            Class.forName("com.mysql.cj.jdbc.Driver");//加载驱动
            con = DriverManager.getConnection(url,"root","2020");//连接数据库
            stat = con.createStatement();//创建Statement对象
            stat.executeUpdate(sql);//更新数据库
        }catch (Exception e){
            e.printStackTrace();
        }
        finally {
            //资源关闭
            stat.close();
            con.close();
        }
    }
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值