IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JDBC增删改查 -> 正文阅读

[Java知识库]JDBC增删改查

一:工具类(连接数据库,关闭)

连接数据库

public static Connection getConnection() throws Exception {
        //1.读取配置文件中的4个基本信息
        InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
        properties.load(is);
        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driverClass = properties.getProperty("driverClass");

        //2.加载驱动
        Class.forName(driverClass);
        //3.获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        return connection;
    }

关闭资源

public static  void closeResource(Connection connection, Statement ps, ResultSet rs){
        try {
            if (ps!=null)
                ps.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            if (connection!=null)
                connection.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        try {
            if (rs!=null)
            rs.close();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

二:增删改通用方法

public  void update(String sql,Object ...args) {
        Connection connection = null;
        PreparedStatement ps = null;
        try {
            connection = JDBCutils.getConnection();
            ps = connection.prepareStatement(sql);

            for (int i=0;i<args.length;i++){
                ps.setObject(i+1,args[i]);
            }
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            JDBCutils.closeResource(connection,ps);
        }
    }

三:查询通用方法

(1)为了显示查询结果,将字段放入一个类中封装好

/**
 * @author Lydia
 * @create 2021-10-15 16:53
 * ORM编程思想(Object relational mapping)
 * 一个数据表对应一个java类
 * 表中的一条记录队形java类的一个对象
 * 表中一个字段对应java类的一个属性
 */
public class Order {
    private int orderId;
    private String orderName;
    private Date orderDate;

    public Order() {
        super();
    }

    public Order(int orderId, String orderName, Date orderDate) {
        super();
        this.orderId = orderId;
        this.orderName = orderName;
        this.orderDate = orderDate;
    }

    public int getOrderId() {
        return orderId;
    }

    public void setOrderId(int orderId) {
        this.orderId = orderId;
    }

    public String getOrderName() {
        return orderName;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public Date getOrderDate() {
        return orderDate;
    }

    public void setOrderDate(Date orderDate) {
        this.orderDate = orderDate;
    }

    @Override
    public String toString() {
        return "Order{" +
                "orderId=" + orderId +
                ", orderName='" + orderName + '\'' +
                ", orderDate=" + orderDate +
                '}';
    }
}

(2)查询某个特定表的结果

public Order QueryOrder(String sql,Object ...args) throws Exception {
        //1.获取连接
        Connection connection = JDBCutils.getConnection();
        //2.预编译sql语句
        PreparedStatement ps = connection.prepareStatement(sql);
        for (int i=0;i<args.length;i++){
            ps.setObject(i+1,args[i]);
        }
        //3.执行并返回结果集
        ResultSet resultSet = ps.executeQuery();
        ResultSetMetaData rsmd = resultSet.getMetaData();//元数据
        int columnCount = rsmd.getColumnCount();//列数
        //4.处理结果集
        if (resultSet.next()){
            Order order = new Order();
            for (int i=0;i<columnCount;i++){
                Object columnValue = resultSet.getObject(i+1);//将columnValue赋值给columnName
//                String columnName = rsmd.getColumnName(i+1);//获取列属性名
                String columnLabel = rsmd.getColumnLabel(i+1);//获取列的别名
                Field field = Order.class.getDeclaredField(columnLabel);
                field.setAccessible(true);
                field.set(order, columnValue);
            }
            return order;
        }
        //关闭流
        JDBCutils.closeResource(connection,ps,resultSet);
        return null;
    }

(3)用泛型代替表名,查询任意表的结果

//将SQL表名用泛型代替
 public <T> T QueryCommon(Class<T> clazz,String sql,Object ...args) throws Exception {
        //1.获取连接
        Connection connection = JDBCutils.getConnection();
        //2.预编译sql语句
        PreparedStatement ps = connection.prepareStatement(sql);
        for (int i=0;i<args.length;i++){
            ps.setObject(i+1,args[i]);
        }
        //3.执行并返回结果集
        ResultSet resultSet = ps.executeQuery();
        ResultSetMetaData rsmd = resultSet.getMetaData();//元数据
        int columnCount = rsmd.getColumnCount();//列数
        //4.处理结果集
        if (resultSet.next()){
            T t = clazz.getConstructor().newInstance();
            for (int i=0;i<columnCount;i++){
                Object columnValue = resultSet.getObject(i+1);//将columnValue赋值给columnName
                String columnLabel = rsmd.getColumnLabel(i+1);//获取列的别名
                Field field = clazz.getDeclaredField(columnLabel);
                field.setAccessible(true);
                field.set(t, columnValue);
            }
            return t;
        }
        //关闭流
        JDBCutils.closeResource(connection,ps,resultSet);
        return null;
    }

(4)查询返回多个结果,将多个对象装入集合中

    public <T> List<T> getForList(Class<T> clazz, String sql, Object ...args)  {
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet resultSet = null;
        try {
            //1.获取连接
            connection = JDBCutils.getConnection();
            //2.预编译sql语句
            ps = connection.prepareStatement(sql);
            for (int i=0;i<args.length;i++){
                ps.setObject(i+1,args[i]);
            }
            //3.执行并返回结果集
            resultSet = ps.executeQuery();
            ResultSetMetaData rsmd = resultSet.getMetaData();//元数据
            int columnCount = rsmd.getColumnCount();//列数
            //4.处理结果集
            ArrayList<T> list = new ArrayList<>();//创建集合对象
            while (resultSet.next()){
                T t = clazz.getConstructor().newInstance();
                for (int i=0;i<columnCount;i++){
                    Object columnValue = resultSet.getObject(i+1);//将columnValue赋值给columnName
                    String columnLabel = rsmd.getColumnLabel(i+1);//获取列的别名
                    Field field = clazz.getDeclaredField(columnLabel);
                    field.setAccessible(true);
                    field.set(t, columnValue);
                }
                list.add(t);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //关闭流
            JDBCutils.closeResource(connection,ps,resultSet);
        }
        return null;
    }

(5)查询测试

表的字段名和类的属性名不一致时,需要给字段名起别名

String sql="select order_id orderId,order_name orderName,order_date orderDate from `order` where order_id=?";
Order order = QueryOrder(sql, 1);
System.out.println(order);

打印集合的结果forEach(System.out::println)

String sql2="select id,name,email,birth from `customers` where id<?";
        List<Customer> forList = getForList(Customer.class, sql2, 4);
        forList.forEach(System.out::println);

四:preparedStatement与statement比较

preparedStatement替换statement,实现数据的增删改查
*          解决Statement sql注入问题,因为他会预编译sql语句
*          操作Blob的数据,而statement做不到
*          实现更高效的批量插入

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:30:54  更:2021-10-16 19:32:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:13:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码