/**
* JDBC [Java DataBase Connectivity] JAVA数据库连接
* JDBC是SUN提供的一套API接口,使用JAVA连接数据库的一套标准接口。
* 各个数据库提供上都提供了一套JDBC的实现类用于连接自家的DBMS。而提供的这一套
* 实现类也称为连接该DBMS的驱动(Driver)
*
* 1:要加载需要操作的DBMS厂商提供的驱动(MAVEN直接加载依赖)
* 2:基于标准的JDBC操作流程操作该数据库
*/
//1 JDBC中Driver接口的实现类不同数据库厂商提供的的包名与类名不相同
Class.forName("com.mysql.cj.jdbc.Driver");//mysql固定就是这个
Connection connection = DriverManager.getConnection(
// 数据库名,相当于USE tedu
// ||||
// VVVV
"jdbc:mysql://localhost:3306/user?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
"root",
"root");
Statement state = connection.createStatement();
String sql = "";
state.execute(sql);
/**
* 数据库工具类,维护数据库驱动加载,连接的创建
*/
public class DBUtil {
static {
try {
//DBUtil第一次被加载时,加载数据库驱动类
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(
"jdbc:mysql://localhost:3306/user?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",
"root",
"root");
}
}
/**
* 执行预编译SQL语句
* 优点:
* 1:避免了繁琐的拼接SQL语文
* 2:避免了被SQL注入的问题
* 3:大批量执行相同语义的SQL(语义相同,值不同)时性能好
*
* 实际开发中我们的CRUD都建议使用预编译SQL来执行
*/
public class JDBCDemo5 {
public static void main(String[] args) {
try (
Connection conn = DBUtil.getConnection();
){
//向userinfo表中插入数据
String sql = "INSERT INTO userinfo " +
"(username,password,nickname,age) " +
"VALUES " +
"(?,?,?,?)";//预编译SQL中可以先用"?"代替值
/*
此时Connection会现将该SQL发送给数据库,使其生成该SQL的
执行计划,表明该SQL的语义.
数据库理解了,要向userinfo表插入数据,并且对4个字段插入内容
只不过该SQL不能真正执行,因为还没有数据.
*/
PreparedStatement ps = conn.prepareStatement(sql);
//使用PreparedStatement为四个预留的"?"设置应有的值
ps.setString(1,"张三");//第1个?的值为字符串类型的"王克晶"
ps.setString(2,"123456");
ps.setString(3,"克晶");
ps.setInt(4,18);//第4个?的值为int类型的数字18
//此时执行时仅将4个?对应的值传递给数据库
int count = ps.executeUpdate();
if(count>0){
System.out.println("插入成功");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* SELECT语句
*/
public class JDBCDemo6 {
public static void main(String[] args) {
try (
Connection conn = DBUtil.getConnection();
){
String sql = "SELECT id,username,password,nickname,age " +
"FROM userinfo " +
"WHERE username=? AND password=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1,"张三");
// ps.setString(2,"666666");
ps.setString(2,"' OR '1'='1");
ResultSet rs = ps.executeQuery();
if(rs.next()){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}