目录
一、JDBC
1.JDBC的概念
JDBC(Java数据库连接)是Java访问数据库的标准规范。
2.JDBC的由来
JDBC规范定义接口,具体的实现由各大数据库厂商来实现。
3.JDBC的好处
(1)我们只需要会调动JDBC接口中的方法即可
(2)使用同一套java代码,进行少量的修改就可以访问其它JDBC支持的数据库
4. JDBC会用到的包
(1)java.sql:JDBC访问数据库的基础包,在JavaSE中的包。如:java.sql.Connection
(2)javax.sql:JDBC访问数据库的扩展包
(3)数据库的驱动,各大数据库厂商来实现。如:MySQL的驱动:com.mysql.jdbc.Driver
5. JDBC四个核心对象
(1)DriverManager: 用于注册驱动
(2)Connection: 表示与数据库创建的连接
(3)Statement: 执行SQL语句的对象
(4)ResultSet: 结果集或一张虚拟表
二、获取连接
1. API介绍
static Connection getConnection(String url,String user,String password)
url:连接数据库的URL
Mysql数据库写法为:
jdbc:mysql://localhost:3306/数据库名
user:数据库的账号
password:数据库的密码
2.注册驱动
Java.sql.DriverManager类用于注册驱动
方法如下:
static void registerDriver(Driver driver)
该方法源码如下:
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
static {
try {
// 自己自动注册
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
public Driver() throws SQLException {
}
}
使用 Class.forName(“包名.类名”)会走这个类的静态代码块,无需调用DriverManager的方法,不然驱动会被注册两次。
3.使用配置文件保存数据库帐号密码
public static Connection getConnection() throws Exception {
//准备连接数据库的四个字符串
String driverClass = null;
String user = null;
String password = null;
String jdbcUrl = null;
//读取配置文件
//读取类路径下的jdbc.properties
InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(is);
driverClass = properties.getProperty("driverClass");
user = properties.getProperty("user");
password = properties.getProperty("password");
jdbcUrl = properties.getProperty("jdbcUrl");
//加载数据库驱动程序(注册驱动)
Class.forName(driverClass);
//通过DriverManager获取连接
Connection coo = DriverManager.getConnection(jdbcUrl, user, password);
return coo;
}
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/8.24
user=root
password=123456
注意:
JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
会找到src/jdbc.properties加载并返回InputSreream对象
三、JDB增删改操作
1. API介绍
Statement createStatement():创建一个Statement对象将SQL语句发送到数据库
2.Starement的API介绍
boolean execute(String sql):可以执行任意sql语句
int executeUpdate(String sql):可以执行DML语句
ResultSet executeQuery(String sql):可以执行SELECT语句
四、JDBC事务
1.API介绍
void setAutoCommit(boolean autoCommit) throws SQLException;
false:开启事务 true:关闭事务
void commit() throws SQLException:提交事务
void rollback() throws SQLException:回滚事务
五、JDBC工具类
1.将固定字符串定义为常量
2. 在静态代码块中注册驱动(只注册一次)
3. 提供一个获取连接的方法static Connection getConneciton();
4. 定义关闭资源的方法close(Connection conn, Statement stmt, ResultSet rs)
5. 重载关闭方法close(Connection conn, Statement stmt)
public class JDBCUtils {
// 1.将固定字符串定义为常量
private static final String DRIVER_CLASS = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql:///day24";
private static final String USER = "root";
private static final String PASSWORD = "root";
// 2.在静态代码块中注册驱动(只注册一次)
// 当这个类加载到内存的时候就走这个静态代码块,再去触发Driver类中的静态代码块,主动注册
static {
try {
Class.forName(DRIVER_CLASS);
} catch (ClassNotFoundException e) {
}
}
// 3.提供一个获取连接的方法static Connection getConneciton();
// 我们面向JDBC编程
public static Connection getConnection() throws SQLException {
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
return conn;
}
// 5.重载关闭方法close(Connection conn, Statement stmt)
public static void close(Connection conn, Statement stmt) {
close(conn, stmt, null);
}
// 4.定义关闭资源的方法close(Connection conn, Statement stmt, ResultSet rs)
public static void close(Connection conn, Statement stmt, ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
}
六、PreparedSatement预编译对象
prepareStatement()会先将SQL语句发送给数据库预编译。PreparedStatement会引用着预编译后的结果。可以多次传入不同的参数给PreparedStatement对象并执行。相当于调用方法多次传入不同的参数。
编写SQL语句,未知内容使用?占位:
"SELECT * FROM user WHERE name=? AND password=?";
1.API介绍
PreparedStatement prepareStatement(String sql):会先将SQL语句发送给数据库预编译
void setDouble(int paramterIndex,double x)
void setFloat(int paramterIndex,float x)
void setObject(int paramterIndex,Object x)
ResultSet executeQuery():在此PreparedStatement对象中执行SQL查询,并返回该查询生成的ResultSet对象
int executeUpdate():在此PreparedStatement对象中执行SQL语句,比如INSERT、UPDATE或DELETE语句。