您当前的位置: 首页 >  Java

慕晨sekurlsa

暂无认证

  • 4浏览

    0关注

    82博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JavaWeb基础之JDBC

慕晨sekurlsa 发布时间:2022-10-11 23:46:38 ,浏览量:4

一、目录
  • JDBC介绍
  • JDBC本质
  • JDBC连接数据库
  • Druid德鲁伊数据库连接池
  • 使用原生JDBC实现数据的CRUD
二、JDBC介绍

JDBC是java用作操作数据库的,全称Java DataBase Connectivity,定义了每个数据库操作需要的步骤和内容。

当JDBC操作具体的某一个数据库时,例如Mysql、Oracle、SQLServer,都需要相应的驱动,这些驱动就是JDBC接口实现的相关数据库的类。

三、JDBC本质

Java官方(sun)定义了一套用来操作数据库的规则,也就是JDBC接口。每个数据库厂商根据这套接口完成自己的实现类,提供相对应的jar包。我们使用jdbc编程其实就是在使用jar包中的实现类。

四、JDBC连接数据库
  • 方式一:
package com.javaweb.jdbc_;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

public class JavaJDBC01 {
    public static void main(String[] args) {
        try {
            Driver driver = new Driver();

            String url = "jdbc:mysql://localhost:3306/jdbc_test";

            Properties dbinfo = new Properties();
            dbinfo.setProperty("user", "root");
            dbinfo.setProperty("password", "root");

            Connection connect = driver.connect(url, dbinfo);

            if (connect != null) {
                System.out.println("Open connect successfully");
            }


        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

  • 方式二(硬编码方式): 利用反射来加载jdbc驱动。 这种方式的缺点就是修改的时候不方便,因为连接数据库所有的信息都是硬编码写在代码中的。
package com.javaweb.jdbc_;

import java.sql.Connection;
import java.sql.DriverManager;

public class JavaJDBC02 {
    public static void main(String[] args) throws Exception{
        String url = "jdbc:mysql://localhost:3306/jdbc_test";

        String user = "root";
        String password = "root";

        String drivername = "com.mysql.cj.jdbc.Driver";

        Class.forName(drivername);

        Connection connection = DriverManager.getConnection(url, user, password);

        if (connection != null) {
            System.out.println("Open connect Successfully");
        }

    }
}

  • 方式三(最常用的方式): 将数据库配置信息都存放在properties文件中。
package com.javaweb.jdbc_;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class JavaJDBC03 {
    public static void main(String[] args) throws Exception{

        InputStream resourceAsStream = JavaJDBC03.class.getClassLoader().getResourceAsStream("jdbc.properties");

        //InputStream resourceAsStream = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");

        Properties properties = new Properties();

        properties.load(resourceAsStream);

        String username = properties.getProperty("mysql.username");
        String password = properties.getProperty("mysql.password");
        String url = properties.getProperty("url");
        String driverClass = properties.getProperty("driverclass");

        Class.forName(driverClass);

        Connection connection = DriverManager.getConnection(url, username, password);

        if (connection != null) {
            System.out.println("Open connect Successfully");
        }
    }
}

五、Druid德鲁伊数据库连接池

druid是阿里的一款数据库连接池,中文名德鲁伊。

tips: druid中properties文件中的各个字段名都是指定好的,比如username、driverClassname等,在我们使用普通的jdbc去配置文件中获取值时,都是指定字段名,但是在德鲁伊中,它是自己通过指定好的字段名去获取值。

username=root
password=root
url=jdbc:mysql://localhost:3306/jdbc_test
driverClassname=com.mysql.cj.jdbc.Driver

#设置初始化连接数
initialSize=5
#设置最大连接数
maxActive=10
#设置最大等待时间(ms)
maxWait=3000

druid使用步骤:

  1. 导入jar包
  2. 定义需要的数据库连接配置文件properties
  3. 通过流的方式加载src下的properties文件
  4. 获取连接池datasource
  5. 获取数据库连接
package com.javaweb.druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.util.Properties;

public class JavaDruidTest {
    public static void main(String[] args) throws Exception{
        Properties properties = new Properties();
        properties.load(ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties"));

        DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }
}
六、使用原生JDBC实现数据的CRUD

CRUD也就是增删改查,Create, Read, update, and delete

数据库与java类的对应关系:

  • 一行叫做一条记录,包含着整个对象的数据,一行对应一个对象。
  • 一个单元格叫一个字段,对应着一个属性。
  • 一个表对应着一个类。

这里只举一个添加数据例子:

package com.javaweb.jdbccrud;

public class Dog {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;

    public Dog() {
    }

    public Dog(Integer id, String name, Integer age, String sex) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                '}';
    }
}

package com.javaweb.jdbccrud;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

public class DogCRUD {
    public boolean AddDog(Dog dog) {

        int i = 0;
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            Properties properties = new Properties();
            properties.load(ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties"));

            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
            connection = dataSource.getConnection();

            String sql = "insert into dogs values(?,?,?,?)";
            preparedStatement = connection.prepareStatement(sql);

            preparedStatement.setInt(1, dog.getId());
            preparedStatement.setString(2, dog.getName());
            preparedStatement.setInt(3, dog.getAge());
            preparedStatement.setString(4, dog.getSex());

            i = preparedStatement.executeUpdate();

            return i > 0;

        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("Sorry, Has an Error!");
        } finally {
            try {
                preparedStatement.close();
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        return  false;

    }
}

package com.javaweb.jdbccrud;

public class TestAddDog {
    public static void main(String[] args) {
        Dog dog = new Dog(3, "Na", 2, "F");

        DogCRUD dogCRUD = new DogCRUD();
        boolean b = dogCRUD.AddDog(dog);

        System.out.println(b);

    }
}
关注
打赏
1663680270
查看更多评论
立即登录/注册

微信扫码登录

0.0472s