1、数据库驱动
驱动:声卡、显卡、数据库
2、jdbc
jdbc是一种可用于执行SQL语句的JavaAPI
1.创建项目
2、导入数据库驱动
3、编写测试性代码
import java.sql.*;
public class jdbc01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
//1、加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");//固定写法
//2、用户信息和url
String url="jdbc:mysql://localhost:3306/+库名?参数...";
String username="root";
String password="123456";
//3、连接成功,数据库对象 Connection 代表数据库
Connection connection=DriverManager.getConnection(url,username,password);
//4、执行SQL的对象
Statement statement=connection.createStatement();
//5、执行SQL的对象去执行SQL
String sql="SELECT * FROM users";
ResultSet resultSet=statement.executeQuery(sql); //返回的结果集,结果集中封装了我们全部的查询出来的结果
while (resultSet.next()){
System.out.println("id="+resultSet.getObject("id"));
System.out.println("name="+resultSet.getObject("NAME"));
System.out.println("pwd="+resultSet.getObject("PASSWORD"));
System.out.println("email="+resultSet.getObject("email"));
System.out.println("birth="+resultSet.getObject("birthday"));
}
//6、释放连接
resultSet.close();
statement.close();
connection.close();
}
}
该部分原文链接:https://blog.csdn.net/ljheee/article/details/50988796
步骤总结
1、加载驱动
Class.forName(“com.mysql.cj.jdbc.Driver”);
推荐这种方式,不会对具体的驱动类产生依赖
2、建立连接
建立Connection接口类对象:
Connection conn =DriverManager.getConnection(url, user, password);
其中URL的格式要求为:
JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
如:"jdbc:mysql://localhost:3306/test“
3、获得执行sql的对象 Statement
执行对象Statement负责执行SQL语句,由Connection对象产生。
Statement接口类还派生出两个接口类PreparedStatement和CallableStatement,这两个接口类对象为我们提供了更加强大的数据访问功能。
创建Statement的语法为:
Statement st = conn.createStatement();
4、执行sql语句
执行对象Statement提供两个常用的方法来执行SQL语句。
executeQuery(Stringsql),该方法用于执行实现查询功能的sql语句,返回类型为ResultSet(结果集)。
如:ResultSet rs =st.executeQuery(sql);
executeUpdate(Stringsql),该方法用于执行实现增、删、改功能的sql语句,返回类型为int,即受影响的行数。
如:int flag = st.executeUpdate(sql);
5、处理执行结果
ResultSet对象负责保存Statement执行后所产生的查询结果。
结果集ResultSet是通过游标来操作的。
5、释放连接
Connection对象的close方法用于关闭连接,并释放和连接相关的资源。
3、statement对象
jdbc中的statement对象用于向数据库发送SQL语句,想完对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可
代码实现
提取工具类
4、PreparedStatement对象
PreparedStatement可以防止SQL注入,效率更好
1、新增
package com.xx.Demo01;
import lesson.utils.JdbcUtils;
import java.sql.Connection;
import java.util.Date;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class lesson01 {
public static void main(String[] args) {
Connection conn=null;
PreparedStatement st=null;
try {
conn = JdbcUtils.getConnection();
//区别
//使用? 占位符代替参数
String sql="INSERT INTO users(id,`NAME`,`PASSWORD`,`email`,`birthday`) values(?,?,?,?,?)";
st = conn.prepareStatement(sql);//预编译SQL,先写sql,然后不执行
//手绘参数赋值
st.setInt(1,4);//id
st.setString(2,"huarong");
st.setString(3,"234567");
st.setString(4,"5rtg");
//注意点:sql.Date 数据库
// util.Date java //获得时间戳
st.setDate(5,new java.sql.Date(new Date().getTime()));
int i=st.executeUpdate();
if(i>0){
System.out.println("插入成功");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
JdbcUtils.release(conn,st,null);
}
}
}
2、删除
3、更新
4、查询
5、使用IDEA连接数据库
6、事物
要么都成功,要么都失败
原子性:要么全部完成,要么都不完成
一致性:总数不变
隔离性:多个进程互不干扰
持久性:一旦提交不可逆,持久化数据库了
隔离性问题:
脏读:一个事物读取了另一个没有提交的事物
不可重复读:在同一个事物内,重复读取表中的事物,表数据发生了改变
虚读(幻读):在一个事物内,读取到了别人插入的数据,导致前后读取出来的结果不一致
7、数据库连接池
池化技术:准备一些预先的资源,过来就连接预先准备好的
编写连接池,实现一个接口 DataSource
开源数据源实现
DBCP
C3P0
Druid:阿里巴巴
使用了这些数据库连接池之后,我们在项目中就不需要编写连接数据库的代码了
DBCP
需要用到jar包