IDEA导入本地jar包

数据库提高批量插入的效率

  1. 使用prepareStatement
  2. 攒sql
  3. 设置不允许自动提交数据

数据库事务

例如转账这件事,要么两个人的数据都改,要么都不改

  1. 回滚操作

    需要保证数据不被提交

    哪些操作会导致数据的自动提交:

    • DDL操作
    • DML操作(增删改查):默认自动提交,但可以通过sql语句修改
    • 关闭连接(关闭窗口)

数据库连接池避免重复造池子: 使用静态代码块

工具包 核心是创建QueryRunner对象,调用方法

以及

ResultSetHandler的实现类的对象作为方法的一个参数传入,不同的实现类对象对应不同的搜索要求(sql字符串), 其中scalaHandler是用来查询特殊值.例如最大值

编程步骤

  1. 导入jdbc规范化接口
  2. 添加相应的数据驱动依赖
  3. 获取连接对象Connection
  4. 获取Statement对象用以执行sql语句
  5. 使用ResultSet结果集获取返回结果
  6. 关闭资源连接

DriverManager

作用

  • 注册驱动(例如,MySQL驱动、Oracle驱动)
  • 获取连接对象(Connection / Session)

连接数据库的方式

方式一

new com.mysql.cj.jdbc.Drive()使用到了第三方的API, 不利于程序移植, 想要程序正确的执行, 必须添加该jar包, 否则编译错误

    @Test
    public void test1() throws SQLException {
//        数据库驱动
//        com.mysql.cj.jdbc.Driver()是一个具体的实现类, 实现了Driver接口
        Driver driver = new com.mysql.cj.jdbc.Driver();

//        可以从Database选项中进行查找
//        jdbc:mysql表示协议
//        root@localhost表示主机名,前面记得添加root, 否则默认windows对应的用户名
//        3306表示端口号
//        jdbc表示数据库
//        8.0版本后必须设置时区
        String url = "jdbc:mysql://root@localhost:3306/jdbc";
//        通过查找driver.connect()发现需要一个Properties对象, 并且必须包含username和password属性
        Properties info = new Properties();
        info.setProperty("username", "root");
        info.setProperty("password", "root");

//        接口的多态: 实际上执行的是实现类中重写的connect方法
        Connection connection = driver.connect(url, info);
        System.out.println(connection);
    }

方式二

通过反射来获取Driver实例化对象

    @Test
    public void test2() throws Exception {
//        通过反射来获取Driver的实现类对象
        Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver) clazz.newInstance();

        String url = "jdbc:mysql://root@localhost:3306/jdbc";
        Properties info = new Properties();
        info.setProperty("username", "root");
        info.setProperty("password", "root");
        Connection connection = driver.connect(url, info);
        System.out.println(connection);
    }

方式三

使用DriverManager来获取驱动, MySQL驱动在加载到内存中会自动创建一个

    @Test
    public void test3() throws Exception {
        Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        // 下面两行代码实际上可以注释掉, 因为Driver中有一个静态代码块, 会自动创建一个对象并加载
        Driver driver = (Driver) clazz.newInstance();
        DriverManager.registerDriver(driver);

        String url = "jdbc:mysql://root@localhost:3306/jdbc";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }

com.mysql.cj.jdbc.Driver源代码

    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }

方式四

基本信息放入到配置信息中, 而不要放在java代码中.

优点

  • 实现了数据和代码的解耦
  • 如果需要修改配置文件信息, 不需要对程序重新进行打包
    @Test
    void test4() throws Exception {
//        读取文件创建流, 这里需要注意文件的存放路径
        InputStream inputStream = ConnectTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties properties = new Properties();
//        加载流对象, 获取键值对
        properties.load(inputStream);
        String driverClass = properties.getProperty("driverClass");
        String username = properties.getProperty("username");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
//      进行数据库连接配置
        Class.forName(driverClass);
        Connection connection = DriverManager.getConnection(url, username, password);
        System.out.println(connection);
    }

jdbc.properties文件配置如下, 存放路径在resource

driverClass=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://root@localhost:3306/jdbc
username=root
password=root

   转载规则


《》 熊水斌 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
Statement作用 执行 SQL 语句 DML、DDL语句 DQL语句(返回值是ResultSet结果集对象) 实现CRUD操作使用Statement操作数据表的弊端 需要拼接字符串 存在sql注入的问题 使用PreparedS
2023-05-17
下一篇 
自动注入原理假定 Spring 容器按下图组织管理 Bean 对象 @Autowired:默认按类型注入,当容器中存在多个相同类型的Bean时,按变量名查找。按类型注入理解成不需要指定名字。 使用 @Autowired 自动注入 Bean
2023-05-14
  目录