概念
- Java Database Connectivity,简称JDBC
- JDBC:sun公司定义的一套操作数据库的规范,就是接口
四个核心对象
- DriverManager:依据数据库的不同,管理JDBC驱动
- Connection: 负责连接数据库并担任传送数据的任务
- Statement: 由 Connection 产生、负责执行SQL语句
- ResultSet:负责保存Statement执行后所产生的查询结果
使用步骤
- 注册驱动
- 获取数据库连接对象 Connection
- 定义sql
- 获取执行sql语句的对象 Statement
- 执行sql,接受返回结果
- 处理结果
- 释放资源
# 注册驱动
Class.forName("com.mysql.jdbc.Driver");
- 括号中的数据不知道怎么写的时候,可以去复制
获取数据库连接对象 Connection,故名思意,连接肯定需要连接的地址,用户名和密码
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/xinzhi666", "root", "root");
- 如果java操作数据库的时候有乱码,可以在地址后面跟 ?useUnicode=true&characterEncoding=UTF-8
定义sql语句,就是个字符串,如果需要字符串拼接,注意单引号。
String sql = "update person set name='赵琳鹏' where id=1";
获取执行sql语句的对象 Statement,是由连接对象创建出来的
Statement statement = connection.createStatement();
执行sql,接受返回结果
- 1.查询executeQuery(SQL),会有返回值ResultSet,保存了查询的结果
- 2.增删改executeUpdate(增删改SQL),返回一个数据,表示数据库中受影响的行数
处理结果
- ResultSet,可以把ResultSet看成我们java里的set,迭代的时候用next()方法
- 获取每一列resultSet.getString(),括号中的参数可以是数字,从1开始,表示第几列,也可以是字符串,列名的字符串。
释放资源
调用close()的方法
sql注入
statement执行sql语句的时候会有sql注入的风险,所以推荐使用PreparedStatemen
PreparedStatement ps = con.prepareStatement(sql);
sql语句中的参数可以使用?代替
statement.setInt(索引,值); 索引从1开始的
setXXX XXX代表数据类型
查询使用executeQuery(); 增删改使用executeUpdate();
工具类
public class JDBCUtils {
private JDBCUtils(){}
private static String url = "jdbc:mysql://localhost:3306/xinzhi666?useUnicode=true&characterEncoding=UTF-8";
private static String user="root";
private static String password="root";
private static String driver="com.mysql.jdbc.Driver";
static {
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection connection = null;
try {
connection = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void release(Connection connection, Statement statement, ResultSet resultSet){
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
加密工具
package utils;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MD5Utils {
public static String encrypt(String password){
MessageDigest md = null;
String s = null;
try {
md = MessageDigest.getInstance("MD5");
md.update(password.getBytes());
s = new BigInteger(1, md.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return s;
}
}
dao层代码
package dao;
import model.User;
public interface ILoginDao {
/**
* 注册
* @param user 用户的实体类
* @return 返回值是一个数字,表示数据库中受影响的行数
*/
int register(User user);
/**
* 登录
* @param username 用户名
* @param password 密码
* @return
*/
User login(String username, String password);
/**
* 修改用户信息
* @param user
* @return
*/
int update(User user,String pw);
/**
* 删除用户
* @param username
* @param password
* @return
*/
int delete(String username, String password);
}
实体类
package model;
/**
* 实体类 ,一般放在model包下, entity
*/
public class User {
private int id;
private String username;
private String password;
private String name;
private String phone;
private String email;
public User() {
}
public User(int id, String username, String password, String name, String phone, String email) {
this.id = id;
this.username = username;
this.password = password;
this.name = name;
this.phone = phone;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", name='" + name + '\'' +
", phone='" + phone + '\'' +
", email='" + email + '\'' +
'}';
}
}