使用原生的JDBC实现数据库的连接

JDBCUtils工具类

import java.sql.*;

public class JDBCUtils {
    //创建一些静态成员变量,用来存储数据库的连接信息
    private static String driver="com.mysql.jdbc.Driver";
    private static String url = "jdbc:MySQL://localhost:3308/day03";
    private static String user = "root";
    private static String password = "root";

//静态代码块,优先执行,里面的代码会被执行一次,多次调用此工具类时,注册驱动只需要执行一次
static{
    //1.注册驱动
    try {
        Class.forName(driver);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}

//2.获取数据库连接对象
public static Connection getConnection(){
    Connection conn = null;
    try {
       conn = DriverManager.getConnection(url,user,password);
    } catch (SQLException e) {
        throw new RuntimeException("数据库连接异常"+e);
    }
    return conn;
}

//3.释放资源
public static void close(Connection conn, Statement stat,ResultSet rs){
    if(rs!=null){
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (conn != null){
        try {
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    if (stat != null){
        try {
            stat.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    }
}

使用上面的工具类实现增删改查

import com.itheima.demo02Utils.JDBCUtils;

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

/*
    使用JDBC技术,实现对数据库表的增删改查
 */
public class Demo03JDBC {
    public static void main(String[] args) throws SQLException {
        //insert();
        //update();
        //delete();
        //select();
        select_row();
    }

    /*
     使用JDBC技术,实现对数据库表进行查询数据
     只查询一行数据
 */
private static void select_row() throws SQLException {
    //1.使用JDBCUtils工具类,获取数据库连接对象Connection
    Connection conn = JDBCUtils.getConnection();
    //2.获取执行sql语句的执行者对象Statement
    Statement stat = conn.createStatement();
    //3.执行sql语句,获取结果
    ResultSet rs = stat.executeQuery("SELECT * FROM category WHERE cid = 20");
    //4.处理结果
    if (rs.next()){
        int cid = rs.getInt("cid");
        String cname = rs.getString("cname");
        System.out.println(cid+"\t"+cname);
    }else{
        System.out.println("没有查询到结果!");
    }
    //5.释放资源
    JDBCUtils.close(rs,stat,conn);
}

/*
   使用JDBC技术,实现对数据库表进行查询数据
*/
private static void select() throws SQLException {
    //1.使用JDBCUtils,获取数据库连接对象Connection
    Connection conn = JDBCUtils.getConnection();
    //2.获取执行sql语句的执行者对象Statement
    Statement stat = conn.createStatement();
    /*
        3.执行sql语句,获取结果
        使用Statement接口中的方法
            ResultSet executeQuery(String sql) 执行给定的 SQL 语句,该语句可能为SELECT
            参数:
                String sql:查询的sql语句
            返回值:
                java.sql.ResultSet接口:返回的是ResultSet接口的实现类对象,我们无需关注返回的是ResultSet接口的哪个实现类对象
                我们只需要会使用ResultSet接口来接收这个实现类对象即可(多态)
     */
    ResultSet rs = stat.executeQuery("SELECT * FROM category;");
    System.out.println(rs);//com.mysql.jdbc.JDBC42ResultSet@27fa135a

    /*
        4.处理结果:遍历集合
            在ResultSet接口有一个方法next,用于判断还有没有下一行数据
                boolean next() 将光标从当前位置向前移一行。
                有返回true,没有返回false
            此方法相当于迭代器Iterator中hasNext方法
            我们发现判断有没有下一行数据是一个重复的过程,所以可以使用循环优化
            不知道有多少行数据,使用while循环,while循环结束条件,next方法返回false
     */
    while(rs.next()){//相当于it.hasNext()
        /*
            如果有数据,那么我们就可以使用ResultSet接口中的方法getXXX(参数)取出行中数据
            a.数据库中每行都有多列,每列数据的数据类型可能不同,想要获取数据类型对应的数据就可以使用
                int getInt(xxx); double getDouble(xxx); String getString(xxx) Date getDate() ...
            b.如果我们仅仅是想看一下查询的结果,不关系返回值类型,就可以使用
                Object getObject(xxx); String getString(xxx)
            -----------------------------------------------------------------
            int getInt(int columnIndex) : 列的索引,从1开始
            int getInt(String columnLabel) :列名 cid,cname
         */
        //int cid = rs.getInt(1);
        //String cname = rs.getString(2);
        int cid = rs.getInt("cid");
        String cname = rs.getString("cname");
        System.out.println(cid+"\t"+cname);
    }

    //5.释放资源
    JDBCUtils.close(rs,stat,conn);
    /*
        boolean b = rs.next();
        System.out.println(b);//true

        b = rs.next();
        System.out.println(b);//true

        b = rs.next();
        System.out.println(b);//true

        b = rs.next();
        System.out.println(b);//false
     */
}

/*
    使用JDBC技术,实现对数据库表进行删除数据
 */
private static void delete() {
    //1.使用JDBCUtils工具类中的getConnection完成
    Connection conn = JDBCUtils.getConnection();
    //2.获取执行sql语句的执行者对象Statement
    Statement stat = null;
    try {
        //有可能产生异常的代码
        stat = conn.createStatement();
        //3.执行sql语句,获取结果
        int row = stat.executeUpdate("DELETE FROM category WHERE cid IN(4,5);");
        //4.处理结果
        if(row>0){
            System.out.println(row+"行数据删除成功!");
        }else{
            System.out.println("数据删除失败!");
        }
    } catch (SQLException e) {
        //异常的处理逻辑
        e.printStackTrace();
    } finally {
        //一定会执行的代码:一般用于释放资源
        //5.释放资源
        JDBCUtils.close(null,stat,conn);
    }
}

/*
    使用JDBC技术,实现对数据库表进行修改数据
 */
private static void update() throws SQLException {
    //1.使用JDBCUtils工具类中的方法getConnection获取数据库连接对象Connection
    Connection conn = JDBCUtils.getConnection();
    //2.获取执行sql语句的执行者对象Statement
    Statement stat = conn.createStatement();
    //3.执行sql语句获取结果
    int row = stat.executeUpdate("UPDATE category SET cname='可乐' WHERE cid=5;");
    //4.处理结果
    System.out.println(row+"行数据修改成功!");
    //5.释放资源
    JDBCUtils.close(null,stat,conn);
}

/*
    使用JDBC技术,实现对数据库表进行添加数据
    注册驱动,获取数据库连接对象Connection(1.使用JDBCUtils工具类中的getConnection完成)
    2.获取执行sql语句的执行者对象Statement
    3.执行sql语句,获取结果
    4.处理结果
    5.释放资源
 */
private static void insert() throws SQLException {
    //1.使用JDBCUtils工具类中的getConnection完成
    Connection conn = JDBCUtils.getConnection();
    //2.获取执行sql语句的执行者对象Statement
    Statement stat = conn.createStatement();
    //3.执行sql语句,获取结果
    int row = stat.executeUpdate("INSERT INTO category (cname) VALUES('饮料');");
    //4.处理结果
    System.out.println(row+"行数据添加成功!");
        //5.释放资源
        JDBCUtils.close(null,stat,conn);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值