JDBC连接数据库
JDBC连接数据库
共六步
1.Class.forName()加载数据库连接驱动
2.DriverManager.getConnection()获取数据连接对象
3.根据SQL获取sq|会话对象
4.执行SQL,执行SQL前如果有参数值就设置参数值setXXX()
5.处理结果集
6.释放资源
0.前期工作
0.0文件jar
包下载,配置,删除
目前常用的驱动版本就是5或者8(根据自己的数据库版本判断)-5和8的数据库驱动下载地址
1.建一个
lib
文件夹与src
同级,把对应的jar
包放进从(CV就行)
2.右击
jar
包->Add as Library
3.Name可以自己改,正常默认ok就行
4.出现下面这样就添加成功了
5.删除的方法
File->Project Structure->Libraries,然后在中间找到要删除的,点击减号就行,记得别忘了Apply->OK(我喜欢两步个人习惯,直接点OK也行)
下面这4步可以不写,写他的好处是为了方便修改
0.1、声明驱动
//5版本
private static String driver = "com.mysql.jdbc.Driver";
//8版本
private static String driver = "com.mysql.cj.jdbc.Driver";
他们的区别就是8版本比5版本多了一层
.cj
,这里只是看看,实际用的时候不要解压
0.2、声明用户名
正常情况下是
root
,如果修改了话根据你的实际情况而定
private static String username = "root";
0.3、声明密码
根据自身情况而定
private static String password = "123456";
0.4、数据库完整地址
用
127.0.0.1
、localhost
(无网)或者本地IP(有网)
jdbc:mysql://localhost:3306
不写后面的数据库名也不会报错多用于测试
useSSL
:不建议在没有服务器身份验证的情况下建立SSL连接。如果不设置显式选项,则必须建立默认的SSL连接。需要通过设置useSSL=false来显式禁用SSL,或者设置useSSL=true并为服务器证书验证提供信任存储。所以建议设置useSSL为false,有时遇到的问题可以这样来考虑
characterEncoding
:设置字符集
timeZone
:设置时区,这个如果设置错了,在处理时间问题时候显示的时间会跟自己想象的不太一样
举个例子:日本时间比中国早一个小时
private static String url = "jdbc:mysql://localhost:3306/数据库名字?useSSL=false&characterEncoding=utf8&timeZone=UTC";
一、Class.forName()加载数据库连接驱动
会让处理异常,这里直接
try{}catch{}
Class.forName(driver);
二、DriverManager.getConnection()获取数据连接对象
DriverManager.getConnection(url, username, password);
三、根据SQL获取sq|会话对象
有2种方式
Statement
、PreparedStatement
建议用PreparedStatement
,用Statement
连接的话容易被sql注入
private PreparedStatement pstm;
//?是要传入的数据,有几个写几个
String sql = "SELECT * FROM user WHERE id = ?;";
pstm = conn.prepareStatement(sql);
四、执行SQL,执行SQL前如果有参数值就设置参数值setXXX()
//查询用这个
private ResultSet rs= null;
//如上面第三步需要一个int类型的数据id
pstm.setInt(1,id);
rs = pstm.executeQuery();
//其他的增删改,不需要返回结果集,他们返回一个整数,代表改变了几条数据
n = pstm.executeUpdate();
五、处理结果集
//在查询的时候使用处理结果
//找下一个,通常写在while中
rs.next()
//获取
rs.getString()
六、释放资源
//这里我封装起来了省的来回写一大堆
//正着写,倒着关
//查询关三个
ResultSet.close;
PreparedStatement.close;
Connection.close;
//其他关两个
PreparedStatement.close;
Connection.close;
七、案例
案例一二六
整个可以直接全部复制,改改参数就行
import java.sql.*;
/**
* @Auther QY
* @Date 2023/11/16
*/
public class DBTools {
//(1)声明驱动
//我这里用的是8版本的
private static String driver = "com.mysql.cj.jdbc.Driver";
//(2)声明用户名
private static String username = "root";
//(3)声明密码
private static String password = "qy666";
//(4)数据库的完整地址
private static String url = "jdbc:mysql://localhost:3306/数据库名字?useSSL=false&characterEncoding=utf8&timeZone=UTC";
public static Connection ConnDB() {
Connection connection = null;
try {
//一、Class.forName()加载数据库连接驱动
Class.forName(driver);
//二、DriverManager.getConnection()获取数据连接对象
connection = DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
//六、释放资源
public static void closeDB(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
//(1)关闭连接对象
if (connection != null) {
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//(2)关闭数据操作对象
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
//(3)关闭结果集对象
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
案例三四五
这里可以看看大概结构,部分代码可以复制
public class UserDaoImpl implements UserDao {
//声明数据库连接对象
private Connection conn = DruidTools.getConn();
//声明数据库操作对象
private PreparedStatement pstm;
//声明结果集对象
private ResultSet rs= null;
/**
* 通过id号查一个用户
* @param id
* @return
*/
@Override
public User selectUserById(int id) {
//声明User
User user = null;
//写sql
String sql = "SELECT * FROM user WHERE id = ?;";
try {
pstm = conn.prepareStatement(sql);
//设置参数的值
pstm.setInt(1,id);
rs = pstm.executeQuery();
if (rs.next()){
user = new User();
String username = rs.getString("username");
String password = rs.getString("password");
user.setId(id);
user.setUsername(username);
user.setPassword(password);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//查不到返回null
return user;
}
/**
* 查询所有对象
* @return
*/
@Override
public List<User> selectUsers() {
List<User> users = new ArrayList<>();
//写sql语句
String sql = "select * FRom user;" ;
User user;
try {
pstm = conn.prepareStatement(sql);
rs = pstm.executeQuery();
while (rs.next()){
//跟实体类对应
int id = rs.getInt("id");
String username = rs.getString("username");
String password = rs.getString("password");
user = new User();
user.setId(id);
user.setUsername(username);
user.setPassword(password);
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return users;
}
/**
* 添加用户
* @param user
* @return
*/
@Override
public int insertUser(User user) {
//声明变量
int n = 0;
String sql = "INSERT INTO user(username,password,realname,gender,address,email,regdate) " +
"VALUES(?,?,?,?,?,?,?);";
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1,user.getUsername());
pstm.setString(2,user.getPassword());
pstm.setString(3,user.getRealname());
pstm.setString(4,user.getGender());
pstm.setString(5,user.getAddress());
pstm.setString(6,user.getEmail());
pstm.setTimestamp(7,user.getRegdate());
//执行添加
n = pstm.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return n;
}
@Override
public Integer selectUserByUsername(String username) {
//声明对象
Integer temp = null;
//写sql
String sql = "SELECT id FROM user WHERE username = ?;";
//创建对象
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1,username);
rs = pstm.executeQuery();
if (rs.next()){
temp = rs.getInt("id");
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return temp;
}
/**
* 修改密码
* @param username
* @param newPassword
* @return
*/
@Override
public int updateUser(String username, String newPassword) {
int n = 0;
String sql = "UPDATE user SET password = ? WHERE username = ?;";
try {
pstm = conn.prepareStatement(sql);
pstm.setString(2,username);
pstm.setString(1,newPassword);
//执行修改
n = pstm.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return n;
}
@Override
public int deleteUser(String username) {
int n = 0;
String sql = "DELETE FROM user WHERE username = ?;";
try {
pstm = conn.prepareStatement(sql);
pstm.setString(1,username);
//执行修改
n = pstm.executeUpdate();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return n;
}
}