java与数据库(day1)

java与数据库(day1)

1、在idea中创建一个project
2、选择src源文件,new一个包

image

3、选中上一步new的包,new一个类

image

4、在上一步new的类中,进行jdbc增删改查操作(jdbc对数据库的操作)
  • 新建目录,用来存放包
    image
  • 在增删改查操作之前,首先需要配置环境
    • mysql connector中下载jar包
      image
      也许进行下一步操作,需要提前配置java环境变量和下载java
    • 将下载好的jar包复制到目录文件中
    • 将目录下的jar包配置到路径中
      • 点击设置,选择project structure
        image
      • libries->"+"->java
        image
      • 定位到下载的jar包,将jar包放到构建路径下
        image
    • sdks选项:选择java版本
      image
5、java操作数据库
  • 步骤:获取数据库连接,建立statement,发出增删改查命令,返回结果集,关闭数据库连接
  • 异常问题
    image
    选择moreactions,在运行时抛出异常
    image
    两个"!"均可点击,都会自动解决异常
package com.day1;

import java.sql.*;

public class jdbcutils {
    //日志记录器的默认实例
    //匿名内部类
    private static final Logger LOGGER = new Logger(){
        private boolean out = true;//是否输出日志,有点像github博客主题配置文件
        @Override
        public void info(String msg) {
            if(out) {
                System.out.print(msg);
            }
        }
        @Override
        public void error(String error) {
            if(out){
                System.out.print(error);
            }

        }

        @Override
        public void error(String error, Throwable throwable) {
            if(out){
                System.out.print(error+"\n"+throwable.getMessage());
            }

        }
    };
    /*
    获取数据库连接,四个参数:驱动名,连接数据库字符串,数据库用户名,密码
    public static Connection getConnection(String driver, String url,String user, String password)throws SQLException {
        return DriverManager.getConnection(url, user, password);
    }
     */

    /*
    获取数据库连接:转换为运行时异常
     */
    public static Connection getConnection(String driver, String url,String user, String password) {

        try {
            Class.forName(driver); //也可采用本行也可抛出异常
            return DriverManager.getConnection(url, user, password);
        } catch (SQLException | ClassNotFoundException e) {
            throw new RuntimeException(e);
        }
    }
    /*
    关闭数据库连接
     */
    public static void closeConnection(Connection connection){
        //connection.close();需要抛出异常,将强制异常转换为运行时异常
        try {
            connection.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    /*
    不抛出异常,关闭数据库
     */
    public static void closeQuietly(Connection connection){
        try {
            connection.close();
        } catch (SQLException e) {
            LOGGER.error("关闭数据库连接失败", e);//定义了匿名内部类之后可以使用,下边那行就可以删掉了
            e.printStackTrace();//输出异常,取代抛出异常。将异常打印到控制台中。
        }
    }
    /*
    关闭statement,statement承载数据库和参数的载体
     */
    public static void closeQuietly(Statement statement){
        try {
            statement.close();//关闭数据库流载体
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }

    /*
    关闭结果集,数据据库查出来的二维表格
     */
    public static void closeQuietly(ResultSet resultSet){
        try {
            resultSet.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
    /*
    同时关闭多个数据库对象
     */
    public static void closeQuietly(Object... objs) { //非常神奇,下边代码是报错的,报错也没事,咱可以一个一个关闭,不用非得一次关闭好几个
        if (objs != null) {
            for (Object obj : objs) {
                if (obj instanceof Connection conn) {
                    closeQuietly(conn);
                } else if (obj instanceof Statement stmt) {
                    closeQuietly(stmt);
                } else if (obj instanceof ResultSet rst) {
                    closeQuietly(rst);
                }
            }
        }
    }

    private static interface Logger{
        //输出一条日志信息
        void info(String msg);

        //输出错误信息/异常日志
        void error(String error);

        //一条更加详细的日志信息:打印异常信息和异常对象
        void error(String error, Throwable throwable);
    }
}

posted @ 2022-12-13 23:28  风归去  阅读(1)  评论(0编辑  收藏  举报