汕尾海湾 发表于 2024-2-10 03:43:04

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就行)
https://img2023.cnblogs.com/blog/2815669/202312/2815669-20231208204909370-77380672.png
2.右击jar包->Add as Library
https://img2023.cnblogs.com/blog/2815669/202312/2815669-20231208204933865-912729050.png
3.Name可以自己改,正常默认ok就行
https://img2023.cnblogs.com/blog/2815669/202312/2815669-20231208205016626-455615482.png
4.出现下面这样就添加成功了
https://img2023.cnblogs.com/blog/2815669/202312/2815669-20231208205039142-1172339214.png
5.删除的方法
File->Project Structure->Libraries,然后在中间找到要删除的,点击减号就行,记得别忘了Apply->OK(我喜欢两步个人习惯,直接点OK也行)
https://img2023.cnblogs.com/blog/2815669/202312/2815669-20231208205048623-1247527019.png
下面这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,这里只是看看,实际用的时候不要解压
https://img2023.cnblogs.com/blog/2815669/202312/2815669-20231208205111795-440224464.jpg
https://img2023.cnblogs.com/blog/2815669/202312/2815669-20231208205119012-280620382.jpg
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;
    }
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: JDBC连接数据库