一、目录
- JDBC介绍
- JDBC本质
- JDBC连接数据库
- Druid德鲁伊数据库连接池
- 使用原生JDBC实现数据的CRUD
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使用步骤:
- 导入jar包
- 定义需要的数据库连接配置文件properties
- 通过流的方式加载src下的properties文件
- 获取连接池datasource
- 获取数据库连接
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);
}
}