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-> roject 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{}
二、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;
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |