一、JDBC的概述
规范!!!
Sun公司制定的通过java来连接数据库的标准规范,而且要求数据库的提供商解决 连接和操作的问题。
JDK:
java.sql
javax.sql
如果想要操作数据的类,必须下载第三方jar包
mysql-connector-java-5.1.47.jar
如何下载第三方jar包:
1.百度输入maven
2.点击第一个网址https://mvnrepository.com/
3.进来以后输入mysql进行查询
4.找到5.1.47这个版本点击小手下载即可
二、MySQL数据库连接需要的参数
cmd> mysql -hlocalhost -uroot -p123456
1.确定连接数据是哪一个。mysql
2.确定连接数据库是在哪一个主机上面,数据库的服务器的地址
3.当前数据库的用户名
4.对应用户名密码
JDBC的URL=协议名+子协议名+数据源名。
a 协议名总是“jdbc”。
b 子协议名由JDBC驱动程序的编写者决定。
c 数据源名也可能包含用户与口令等信息;这些信息也可单独提供。
几种常见的数据库连接
-------------------------------oracle------------------
驱动:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@machine_name:port:dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1521
-------------------------------mysql-------------------
驱动:com.mysql.jdbc.Driver
URL:jdbc:mysql://machine_name:port/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认3306
--------------------------SQL Server------------------
驱动:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://<machine_name><:port>;DatabaseName=
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是1433
--------------------------DB2--------------------------
驱动:com.ibm.db2.jdbc.app.DB2Driver
URL:jdbc:db2://<machine_name><:port>/dbname
注:machine_name:数据库所在的机器的名称;
port:端口号,默认是5000
1.驱动:com.mysql.jdbc.Driver
2.目前适用的url是:
jdbc:mysql://localhost:3306/java2102(数据库名)
3.需要对应的用户名字和密码
三、JDBC核心的API()
java.sql.Driver 接口
–|connect(String url, Properties prop);
url:java连接数据的url的协议
prop:java连接数据库所需要的属性,通常保存在一个文件中,读取对应的文件。
root password 等
java.sql.Drivermanager类
--|static regiterDriver(java.sql.Driver driver);
用来注册驱动的,需要的参数是java.sql.Driver接口实现的类对象
--|static java.sql.Connection getConnection(String url, String user, String password);
获取数据库连接对象的方法
url:JDBC连接数据库所需要的协议
user:数据库所需要的用户名
password:数据库所需要的密码
java.sql.Connection接口
--|java.sql.Statement createStatement();
获取一个叫statement对象,这个对象叫数据库sql语句的搬运工,直接搬到数据库中运行你这个sql语句。也是一个资源型的对象,也是需要关闭的
--|java.sql.PreparedStatement preparedStatement();
这个对象也是数据库sql语句搬运工,只不过是预处理了一下。防止sql注入。
java.sql.Statement 接口
--|int excuteUpdate(String sql );
执行传入的sql语句,主要执行的sql语句有增,删,改。返回值是int类型
受影响的行数
java.sql.Resultset excuteQuery(String sql);
执行传入的sql语句,主要执行的是查询(select),返回值是一个java.sql.Result这个结果集对象
interface java.sql.PrepareStatement extends java.sql.statement
--|int executeUpdate();
执行预处理的sql语句,主要执行的sql语句,有增删改,返回值是int类型的数据,受影响的行数。
--|setXXX(int index, Object obj);
sql语句是用?占位的,没有实际的值,set方法专门给?赋值的
index是下标,从1开始
obj 是参数值 代替?的
java.sql.ResultSet 接口
resultSet也是一个资源型的数据,需要close
--|boolean next();======>hasNext();
判断是否还可以继续遍历下面的数据
--|getXXX(int columnIndex);
xxx表示是数据类型,可以根据下标的位置获取对应的字段的数据
--|getxxx(String filename);
xxx表示是数据类型,可以根据字段的名字
四、借助于JDBC,java程序连接mysql数据库进行增、删、改、查
首先创建一个数据库javaday25
创建表student
create table student(
-> id int primary key auto_increment,
-> name varchar(30) not null,
-> age int not null,
-> info varchar(30)
-> );
需要在项目中导第三方jar包
1.在项目新建一个文件夹叫lib
2.复制对应的jar包到lib文件中
3.在jar包鼠标右键,add as library
写一个文件叫db.properties,放在src文件夹下面
diver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/数据库名?useSSL=false
user=root
password=123456
JdbcUtil.java
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
/**
* @author xue_yun_xiang
* @create 2021-03-29-8:48
*/
public class JdbcUtil {
private static String driverClass = null;
private static String url = null;
private static String user = null;
private static String password = null;
//使用静态代码块完成驱动的自动加载
static {
try {
//1、创建对象properties
Properties properties = new Properties();
//2、使用load 加载src下面的文件
properties.load(new FileInputStream("./src/db.properties"));
//3、从properties这个对象中取出来对应的属性
driverClass = properties.getProperty("driver");
url = properties.getProperty("url");
user = properties.getProperty("user");
password = properties.getProperty("password");
//4.加载驱动
Class.forName(driverClass);
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
//getConnection
public static Connection getConnection() throws SQLException {
Connection connection = null;
connection = DriverManager.getConnection(url,user,password);
return connection;
}
//完成统一的close方法
public static void close(Connection connection) {
close(connection,null,null);
}
public static void close(Connection connection, Statement statement) {
close(connection,statement,null);
}
public static void close(Connection connection,Statement statement,ResultSet resultSet) {
try {
if (connection != null) {
connection.close();
}
if (statement != null) {
statement.close();
}
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
增、删、改:
Demo1.java
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
/**
* @author xue_yun_xiang
* @create 2021-03-29-9:17
*/
public class Demo1 {
//增
@Test
public void addTest() throws SQLException {
Connection connection = JdbcUtil.getConnection();
//1.准备sql语句
String sql = "insert into student(name,age,info) values('张三',88,'老色皮')";
//2.创建搬运工
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//3.执行sql语句,返回影响的行数
int i = preparedStatement.executeUpdate();
System.out.println(i);
//4.关闭
JdbcUtil.close(connection,preparedStatement);
}
//删
@Test
public void deleteTest() throws SQLException {
Connection connection = JdbcUtil.getConnection();
String sql = "delete from student where id = 4";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
int i = preparedStatement.executeUpdate();
System.out.println(i);
JdbcUtil.close(connection,preparedStatement);
}
//改
@Test
public void updateTest() throws SQLException {
Connection connection = JdbcUtil.getConnection();
String sql = "update student set name = '李凯馨',age = 22,info = '女神' where id = 1";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
int i = preparedStatement.executeUpdate();
System.out.println(i);
JdbcUtil.close(connection,preparedStatement);
}
}
查:
Student.java
public class Student {
private int id;
private String name;
private int age;
private String info;
public Student() {
}
public Student(int id, String name, int age, String info) {
this.id = id;
this.name = name;
this.age = age;
this.info = info;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", info='" + info + '\'' +
'}';
}
}
Demo1.java
//查
public class Demo1 {
@Test
public void selectTest() throws SQLException {
Connection connection = JdbcUtil.getConnection();
String sql = "select * from student";
PreparedStatement preparedStatement = connection.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
List<Student> students = new ArrayList<Student>();
while (resultSet.next()) {
int id = resultSet.getInt("id");
String name = resultSet.getString(2);
int age = resultSet.getInt(3);
String info =resultSet.getString(4);
students.add(new Student(id,name,age,info));
}
for (Student student : students) {
System.out.println(student);
}
JdbcUtil.close(connection,preparedStatement,resultSet);
}
}