概念
JDBC是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问。
主要分为4类:
1.sun JDBC- ODBC 桥驱动
2.JDBC 本地驱动–只能在特定数据库,丧失可移植性
3.JDBC网络驱动
4.本地协议纯JDBC驱动
主要接口和类
DriverManager–管理JDBC驱动。
Connection --建立数据库连接,建立可以执行sql语句,获取结果。
Statement–一个该对象执行静态sql,获取语句结果。
PreparedStatement–创建一个可编译的sql语句对象,该对象可多次运行,提高执行效率,是Statement的子类。
ResultSet–用于创建表示sql语句结果的结果集,用户通过结果集完成对数据库的访问。
Driver–数据库驱动接口。
Date–表示sqlDate类型,不含时间。
DatebaseMetaDAta–和ResulstMetaData 一起访问数据库元信息。
Timestamp–Date的扩展,表示sql的时间戳,增加了关于纳秒的时间域。
DatebaseMetaDAta–和ResulstMetaData 一起访问数据库元信息。
DataTRuncation–数据库出现异常,报告异常警告。-----{
–DataTRuncation–数据库出现异常,报告异常警告。
–SqlWarning–数据库警告 。 }-----
DriverPropertyInfo–驱动属性的全部信息。
新建一个mysql数据库
CREATE TABLE `student`(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(225) not null,
age SMALLINT NOT NULL,
sex CHAR(1) NOT NULL DEFAULT '男',
birthday DATE NOT NULL
)
连接驱动
数据库是资源类数据,使用后需要关闭链接。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class JDBCExample {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/mydatabase";//mydatebase数据库名
String username = "username";
String password = "password";
try {
Connection connection = DriverManager.getConnection(url, username, password);
System.out.println("Connected to the database.");
// 在这里可以进行数据库操作
connection.close();//关闭链接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
封装驱动
package libManger;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DButil {
public static final String DB = "com.mysql.cj.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/my_db";
public static final String DBUserName = "root";
public static final String DBPassWord = "1234";
Connection dd = null;
public DButil() {
try {
Class.forName(DB);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
try {
dd = DriverManager.getConnection(DBURL, DBUserName, DBPassWord);
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public Connection getConn() {
return dd;
}
public Connection open(){
try {
Class.forName(DB);
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
try {
dd = DriverManager.getConnection(DBURL,DBUserName,DBPassWord);
} catch (SQLException e) {
throw new RuntimeException(e);
}
return dd;
}
public void close(){
try {
dd.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
Statement和PreparedStatement接口使用
Statement用于执行静态 SQL 语句,而PreparedStatement用于执行预编译的 SQL 语句,它可以防止 SQL 注入攻击,并提高性能。
Statement–增删查改使用
package libManger;
import java.sql.*;
public class DButil_1 {
public static void main(String[] args) throws SQLException {
DButil dbutil = new DButil();
Connection dd = dbutil.open();
Statement st = dd.createStatement();
String insert = "insert into student (id,name,age,sex,birthday) values('2','老公','18','男','1988-3-18')";
String update = "update student set name = '李四'";
String delete = "delete student from student where id='1'";
String select = "select * from student ";
int ids = st.executeUpdate(delete);
System.out.println(ids);
ResultSet s = st.executeQuery(select);
while (s.next()){
int id = s.getInt(1);
String name = s.getString(2);
String sex = s.getString(4);
int age = s.getInt(3);
Date brithday = Date.valueOf(s.getString(5));
Student student = new Student(id,name,sex,age,brithday);
System.out.println(student);
}
System.out.println(s);
System.out.println("操作数据库");
dbutil.close();
}
}
PreparedStatement增删查改使用
package libManger;
import java.sql.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class DButil_2 {
public static void main(String[] args) throws SQLException, ParseException {
DButil dbutil = new DButil();
Connection dd = dbutil.open();
String insert = "insert into student (id,name,age,sex,birthday) values(?,?,?,?,?)";
String update = "update student set name = ? where id=?";
String delete = "delete student from student where id=?";
String select = "select * from student ";
PreparedStatement ps = dd.prepareStatement(insert);
ps.setInt(1,4);
ps.setString(2,"章三");
ps.setInt(3,89);
ps.setString(4,"男");
java.util.Date date = new SimpleDateFormat("yyyy-MM-dd").parse("1998-2-5");
java.sql.Date date1 = new java.sql.Date(date.getTime());
ps.setDate(5,date1);
int ids = ps.executeUpdate(insert);
System.out.println(ids);
PreparedStatement ps1 = dd.prepareStatement(select);
ResultSet rs = ps1.executeQuery();
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String sex = rs.getString(4);
int age = rs.getInt(3);
java.sql.Date brithday = Date.valueOf(rs.getString(5));
Student student = new Student(id, name, sex, age, brithday);
System.out.println(student);
System.out.println(rs);
}
rs.close();
ps1.close();
System.out.println("操作数据库");
dbutil.close();
}
}
优势
1.平台独立性:
由于 Java 的平台独立性,使用 JDBC 编写的程序可以在不同的操作系统和数据库平台上运行,只需更换相应的 JDBC 驱动程序。
2.易于使用:
提供了一套相对简单的 API,使开发人员能够轻松地执行数据库操作,包括查询、插入、更新和删除数据。
3.安全性:
通过使用PreparedStatement可以防止 SQL 注入攻击,提高了应用程序的安全性。