目录
1.JDBC(java DataBase Connectivity)
2.加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver");
PreparedStatement和Statement 区别
一.关于JDBC
1.JDBC(java DataBase Connectivity)
java语言连接数据库。
2.JDBC的本质:
JDBC是一套接口(面向接口写实现类,能够解耦合,提高代码的扩展力,因为每个数据库底层的实现原理是不同的,如果没有接口 访问不同数据库就要不同的代码。
jdbc驱动: 所有的数据库连接的驱动都以 jar包存在(里面是.class) ,有很多的 .class文件他们是对JDBC接口的实现类 由数据库厂商提供连接相应的数据库 官网下载 。
3.为什么要使用JDBC
有了JDBC,java开发人员只需要编写一次程序,就可以访问不同的数据库.
二.连接步骤
1.在项目添加jar文件
2.加载驱动类 Class.forName("com.mysql.cj.jdbc.Driver");
3.建立与数据库的连接,获得连接对象
String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url,user,password);
4.发送sql
Statement st = connection.createStatement();
st.executeUpdate("INSERT INTO student(NAME,num,gender,birthday,phone,address,reg_time,majorid)" +
"VALUES('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now(),"+majorid+")");
PreparedStatement ps = connection.prepareStatement("delete from student where num=?");
ps.setObject(1,num);
ps.executeUpdate();
举例:
import java.sql.*;
import java.util.Collection;
public class Demo1 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
//建立与数据的链接
String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
String user="root";
String account="root";
Connection connection= DriverManager.getConnection(url,user,account);
//发送
Statement statement=connection.createStatement();
statement.executeUpdate("insert into course(name) values ('数学')");
statement.close();
connection.close();
}
}
使用此代码实现向mysql的course表的名称中插入数学数据
三.实现及分析
import java.sql.*;
public class Demo2 {
public static void main(String[] args) {
Demo2 demo2=new Demo2();
try {
try {
//demo2.send("力宏","女","2002-05-06","11111111111","汉中","now()",3);
demo2.updete("李洪","男","西安");
} catch (SQLException throwables) {
throwables.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public void send(String name,String gender,String birthday,String phone,String address,String reg_time,int id) throws ClassNotFoundException, SQLException {
// 加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
//建立连接
String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
String user="root";
String account="root";
Connection connection= DriverManager.getConnection(url,user,account);
//发送
Statement statement=connection.createStatement();
statement.executeUpdate("insert into student(name,gender,birthday,phone,address,reg_time,id)values('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now()),'"+3+"'");
}
public void updete(String name,String gender,String address) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
String user="root";
String account="root";
Connection connection= DriverManager.getConnection(url,user,account);
Statement statement=connection.createStatement();
statement.executeUpdate("update student set name='"+name+"',gender='"+gender+"',address='"+address+"'");
connection.close();
statement.close();
}
}
import java.sql.*;
public class Demo3 {
public static void main(String[] args) {
try {
//update("朱磊","女",6);
try {
delete(1);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void update(String name,String gender,int num) throws ClassNotFoundException, SQLException {
// 加载驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
//建立与数据的链接
String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
String user="root";
String account="root";
Connection connection= DriverManager.getConnection(url,user,account);
//发送
//预先编译
PreparedStatement p=connection.prepareStatement("update student set name=?,gender=?where num=?");
p.setObject(1,name);
p.setObject(2,gender);
p.setObject(3,num);
p.executeUpdate();
connection.close();
p.close();
}/*
PreparedStatement与Statement区别
PreparedStatement相比Statement简单,安全,先用?占位再用setObject方法赋值,不用拼接字符串,安全,在赋值时先进行检测
*/
public static void delete(int num) throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/studentdb?serverTimezone=Asia/Shanghai";
String user="root";
String account="root";
Connection connection=DriverManager.getConnection(url,user,account);
PreparedStatement p=connection.prepareStatement("delete from student where num=?");
p.setObject(1,num);
p.executeUpdate();
connection.close();
p.close();
}
}
使用Statement发送sql要拼接字符串不安全,所以大多数使用PreparedStatement
PreparedStatement和Statement 区别
相同点: 都是向数据库发送sql
Statement: 将参数直接拼接到sql中, 要拼接字符串,写起来麻烦, 安全性差, 可以在参数中拼接 or 1=1
PreparedStatement : 先用?占位, 然后通过setObject方法赋值, 写起来不用拼接字符串, 安全可靠的, 在赋值时进行检测,可以防止sql注入攻击。
关闭与数据库连接
rs.close();
ps.close();
connection.close();