JDBC连接数据库

打印 上一主题 下一主题

主题 940|帖子 940|积分 2820

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、声明驱动
  1. //5版本
  2. private static String driver = "com.mysql.jdbc.Driver";
  3. //8版本
  4. private static String driver = "com.mysql.cj.jdbc.Driver";
复制代码
他们的区别就是8版本比5版本多了一层.cj,这里只是看看,实际用的时候不要解压


0.2、声明用户名

正常情况下是root,如果修改了话根据你的实际情况而定
  1. private static String username = "root";
复制代码
0.3、声明密码

根据自身情况而定
  1. 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:设置时区,这个如果设置错了,在处理时间问题时候显示的时间会跟自己想象的不太一样
举个例子:日本时间比中国早一个小时
  1. private static String url = "jdbc:mysql://localhost:3306/数据库名字?useSSL=false&characterEncoding=utf8&timeZone=UTC";
复制代码
一、Class.forName()加载数据库连接驱动

会让处理异常,这里直接try{}catch{}
  1. Class.forName(driver);
复制代码
二、DriverManager.getConnection()获取数据连接对象
  1. DriverManager.getConnection(url, username, password);
复制代码
三、根据SQL获取sq|会话对象

有2种方式Statement、PreparedStatement 建议用PreparedStatement,用Statement连接的话容易被sql注入
  1. private PreparedStatement pstm;
  2. //?是要传入的数据,有几个写几个
  3. String sql = "SELECT * FROM user WHERE id = ?;";
  4. pstm = conn.prepareStatement(sql);
复制代码
四、执行SQL,执行SQL前如果有参数值就设置参数值setXXX()
  1. //查询用这个
  2. private ResultSet rs= null;
  3. //如上面第三步需要一个int类型的数据id
  4. pstm.setInt(1,id);
  5. rs = pstm.executeQuery();
  6. //其他的增删改,不需要返回结果集,他们返回一个整数,代表改变了几条数据
  7. n = pstm.executeUpdate();
复制代码
五、处理结果集
  1. //在查询的时候使用处理结果
  2. //找下一个,通常写在while中
  3. rs.next()
  4. //获取
  5. rs.getString()
复制代码
六、释放资源
  1. //这里我封装起来了省的来回写一大堆
  2. //正着写,倒着关
  3. //查询关三个
  4. ResultSet.close;
  5. PreparedStatement.close;
  6. Connection.close;
  7. //其他关两个
  8. PreparedStatement.close;
  9. Connection.close;
复制代码
七、案例

案例一二六

整个可以直接全部复制,改改参数就行
  1. import java.sql.*;
  2. /**
  3. * @Auther QY
  4. * @Date 2023/11/16
  5. */
  6. public class DBTools {
  7.     //(1)声明驱动
  8.     //我这里用的是8版本的
  9.     private static String driver = "com.mysql.cj.jdbc.Driver";
  10.     //(2)声明用户名
  11.     private static String username = "root";
  12.     //(3)声明密码
  13.     private static String password = "qy666";
  14.     //(4)数据库的完整地址
  15.     private static String url = "jdbc:mysql://localhost:3306/数据库名字?useSSL=false&characterEncoding=utf8&timeZone=UTC";
  16.     public static Connection ConnDB() {
  17.         Connection connection = null;
  18.         try {
  19.             //一、Class.forName()加载数据库连接驱动
  20.             Class.forName(driver);
  21.             //二、DriverManager.getConnection()获取数据连接对象
  22.             connection = DriverManager.getConnection(url, username, password);
  23.         } catch (ClassNotFoundException e) {
  24.             e.printStackTrace();
  25.         } catch (SQLException throwables) {
  26.             throwables.printStackTrace();
  27.         }
  28.         return connection;
  29.     }
  30.     //六、释放资源
  31.     public static void closeDB(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
  32.         //(1)关闭连接对象
  33.         if (connection != null) {
  34.             try {
  35.                 connection.close();
  36.             } catch (SQLException throwables) {
  37.                 throwables.printStackTrace();
  38.             }
  39.         }
  40.         //(2)关闭数据操作对象
  41.         if (preparedStatement != null) {
  42.             try {
  43.                 preparedStatement.close();
  44.             } catch (SQLException throwables) {
  45.                 throwables.printStackTrace();
  46.             }
  47.         }
  48.         //(3)关闭结果集对象
  49.         if (resultSet != null) {
  50.             try {
  51.                 resultSet.close();
  52.             } catch (SQLException throwables) {
  53.                 throwables.printStackTrace();
  54.             }
  55.         }
  56.     }
  57. }
复制代码
案例三四五

这里可以看看大概结构,部分代码可以复制
  1. public class UserDaoImpl implements UserDao {
  2.     //声明数据库连接对象
  3.     private Connection conn = DruidTools.getConn();
  4.     //声明数据库操作对象
  5.     private PreparedStatement pstm;
  6.     //声明结果集对象
  7.     private ResultSet rs= null;
  8.     /**
  9.      * 通过id号查一个用户
  10.      * @param id
  11.      * @return
  12.      */
  13.     @Override
  14.     public User selectUserById(int id) {
  15.         //声明User
  16.         User user = null;
  17.         //写sql
  18.         String sql = "SELECT * FROM user WHERE id = ?;";
  19.         try {
  20.             pstm = conn.prepareStatement(sql);
  21.             //设置参数的值
  22.             pstm.setInt(1,id);
  23.             rs = pstm.executeQuery();
  24.             if (rs.next()){
  25.                 user = new User();
  26.                 String username = rs.getString("username");
  27.                 String password = rs.getString("password");
  28.                 user.setId(id);
  29.                 user.setUsername(username);
  30.                 user.setPassword(password);
  31.             }
  32.         } catch (SQLException throwables) {
  33.             throwables.printStackTrace();
  34.         }
  35.         //查不到返回null
  36.         return user;
  37.     }
  38.     /**
  39.      * 查询所有对象
  40.      * @return
  41.      */
  42.     @Override
  43.     public List<User> selectUsers() {
  44.         List<User> users = new ArrayList<>();
  45.         //写sql语句
  46.         String sql = "select * FRom user;" ;
  47.         User user;
  48.         try {
  49.             pstm = conn.prepareStatement(sql);
  50.             rs = pstm.executeQuery();
  51.             while (rs.next()){
  52.                 //跟实体类对应
  53.                 int id = rs.getInt("id");
  54.                 String username = rs.getString("username");
  55.                 String password = rs.getString("password");
  56.                 user = new User();
  57.                 user.setId(id);
  58.                 user.setUsername(username);
  59.                 user.setPassword(password);
  60.             }
  61.         } catch (SQLException throwables) {
  62.             throwables.printStackTrace();
  63.         }
  64.         return users;
  65.     }
  66.     /**
  67.      * 添加用户
  68.      * @param user
  69.      * @return
  70.      */
  71.     @Override
  72.     public int insertUser(User user) {
  73.         //声明变量
  74.         int n = 0;
  75.         String sql = "INSERT INTO user(username,password,realname,gender,address,email,regdate) " +
  76.                 "VALUES(?,?,?,?,?,?,?);";
  77.         try {
  78.             pstm = conn.prepareStatement(sql);
  79.             pstm.setString(1,user.getUsername());
  80.             pstm.setString(2,user.getPassword());
  81.             pstm.setString(3,user.getRealname());
  82.             pstm.setString(4,user.getGender());
  83.             pstm.setString(5,user.getAddress());
  84.             pstm.setString(6,user.getEmail());
  85.             pstm.setTimestamp(7,user.getRegdate());
  86.             //执行添加
  87.             n = pstm.executeUpdate();
  88.         } catch (SQLException throwables) {
  89.             throwables.printStackTrace();
  90.         }
  91.         return n;
  92.     }
  93.     @Override
  94.     public Integer selectUserByUsername(String username) {
  95.         //声明对象
  96.         Integer temp = null;
  97.         //写sql
  98.         String sql = "SELECT id FROM user WHERE username = ?;";
  99.         //创建对象
  100.         try {
  101.             pstm = conn.prepareStatement(sql);
  102.             pstm.setString(1,username);
  103.             rs = pstm.executeQuery();
  104.             if (rs.next()){
  105.                 temp = rs.getInt("id");
  106.             }
  107.         } catch (SQLException throwables) {
  108.             throwables.printStackTrace();
  109.         }
  110.         return temp;
  111.     }
  112.     /**
  113.      * 修改密码
  114.      * @param username
  115.      * @param newPassword
  116.      * @return
  117.      */
  118.     @Override
  119.     public int updateUser(String username, String newPassword) {
  120.         int n = 0;
  121.         String sql = "UPDATE user SET password = ? WHERE username = ?;";
  122.         try {
  123.             pstm = conn.prepareStatement(sql);
  124.             pstm.setString(2,username);
  125.             pstm.setString(1,newPassword);
  126.             //执行修改
  127.             n = pstm.executeUpdate();
  128.         } catch (SQLException throwables) {
  129.             throwables.printStackTrace();
  130.         }
  131.         return n;
  132.     }
  133.     @Override
  134.     public int deleteUser(String username) {
  135.         int n = 0;
  136.         String sql = "DELETE FROM user WHERE username = ?;";
  137.         try {
  138.             pstm = conn.prepareStatement(sql);
  139.             pstm.setString(1,username);
  140.             //执行修改
  141.             n = pstm.executeUpdate();
  142.         } catch (SQLException throwables) {
  143.             throwables.printStackTrace();
  144.         }
  145.         return n;
  146.     }
  147. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

汕尾海湾

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表