ToB企服应用市场:ToB评测及商务社交产业平台

标题: 利用JDBC毗连数据库(包含封装JDBC) [打印本页]

作者: 丝    时间: 2024-10-29 09:47
标题: 利用JDBC毗连数据库(包含封装JDBC)
一、JDBC的基本利用:

JDBC是数据库毗连技术
它们位于java.sql包以及javax.sql包中
JDBC的作用:

1.建立与数据库之间的访问毗连
2.将编写好的SQL语句发送到数据库执行
3.对数据库返回的效果进行处理

四个重要类和接口:

1.DriverManager类:管理JDBC驱动
2.Connection接口:负责毗连数据库,并担当传送数据的任务
3.Statement接口:由Connection产生,负责SQL语句
4.ResultSet接口:负责保存Statement执行后所产生的执行效果

运行代码须要准备的:

我创建的是web项目
须要引一下mysql的包
然后右键lib包
Add as library






二、JDBC访问数据库步调(查询):

1.加载驱动:Class.forName():加载驱动,假如系统中不存在给定的类,则会引发异常,异常类型为"ClassNotFoundException"
2. 通过DriverManager创建Connection对象;DriverManeger类跟踪已注册的驱动程序,当调用getConnection时,它会搜索驱动程序列表,直到找到一个可以或许毗连至字符串指定命据库驱动程序,加载此驱动程序后,将利用DriverManager的getConnection()建立毗连,此方法接收三个参数
3.通过Connection获得Statement对象,用于执行sql
4.准备sql语句

5.利用Statemennt执行SQL语句,并返回效果。利用ResultSet对象的next()方法判断效果集是否包含数据。在next()方法返回true时,利用ResultSet的getxxx()方法得到对应字段的值。
6.处理rs遍历集合
7.关闭效果集

注意:


查询JDBC代码:

  1. public static void main(String[] args)  {
  2.         Connection connection = null;
  3.         Statement stmt = null;
  4.         ResultSet rs = null;
  5.         //1.加载驱动
  6.         try {
  7.             Class.forName("com.mysql.cj.jdbc.Driver");
  8.         //2.通过DriverManager创建Connection对象
  9.              connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool02", "root", "root");
  10.         //3.通过Connection获得Statement对象,用于执行sql
  11.              stmt = connection.createStatement();
  12.         //4.准备sql语句
  13.             String sql = "select * from orders";
  14.         //5.使用Statemennt执行SQL语句,并返回结果
  15.              rs = stmt.executeQuery(sql);
  16.         //6.处理rs遍历集合
  17.             while (rs.next()){
  18.                 int id = rs.getInt("order_id");
  19.                 int customerId = rs.getInt("customer_id");
  20.                 String orderDate = rs.getString("order_date");
  21.                 String status = rs.getString("status");
  22.                 System.out.println("id:"+'\t'+id+"customerId"+'\t'+customerId+"orderDate"+'\t'+orderDate+"status"+'\t'+status);
  23.             }
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.         } finally {
  27.             //7.关闭结果集
  28.             if(rs!=null){
  29.                  rs.close();
  30.             }
  31.             if(stmt!=null){
  32.                  stmt.close();
  33.             }
  34.             if(connection!=null){
  35.                  connection.close();
  36.             }
  37.          
  38.         }
  39. }
复制代码


三、PrepareStatement实现增删改:


PrepareStatement继续Statement接口,PrepareStatement包含已编译的SQL语句,这些输入参数的值在SQL创建时未被指定,而是为每一个输入参数保留一个?作为占位符。
在执行PrepareStatement之前,必须设置每个输入参数的值,可以通过调用setXxx()方法
PrepareStatement对语句进行了预编译,以是速度比statement快


增删改返回的数据是影响行数

增删改步调:前两条都一样


增删改代码:

  1. public class jdbc02 {
  2.     public static void main(String[] args) {
  3.    
  4.         Connection connection = null;
  5.         PreparedStatement pstmt = null;
  6.         ResultSet rs = null;
  7.         //1.加载驱动
  8.         try {
  9.             Class.forName("com.mysql.cj.jdbc.Driver");
  10.         //2.通过DriverManager创建Connection对象
  11.             connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool02", "root", "root");
  12.         //3.prepareStatement对象
  13.             String sql = "update orders set customer_id=? where order_id = ?";
  14.             pstmt = connection.prepareStatement(sql);
  15.             //4设置参数值
  16.             int customerId = 111;
  17.             int orderId = 2;
  18.             pstmt.setInt(1,customerId);
  19.             pstmt.setInt(2,orderId);
  20.             //5.执行操作
  21.             int rowsAffected = pstmt.executeUpdate();
  22.             //6. 检查是否有行受到影响
  23.             if (rowsAffected > 0) {
  24.                 System.out.println("成功更新了" + rowsAffected + "条记录!");
  25.             } else {
  26.                 System.out.println("没有找到指定的员工记录。");
  27.             }
  28.         } catch (Exception e) {
  29.             e.printStackTrace();
  30.         } finally {
  31.             //7.关闭
  32.             try {
  33.                 if (pstmt != null) {
  34.                     pstmt.close();
  35.                 }
  36.                 if (connection != null) {
  37.                     connection.close();
  38.                 }
  39.             } catch (SQLException e) {
  40.                e.printStackTrace();
  41.             }
  42.         }
  43.     }
  44. }
复制代码

PrepareStatement和Statement区别:


四、对实体类数据封装查询的三种方式:

在表中,一张表是一个类,每一行数据是一个对象
实体类是SmbmsUser
封装方法到Userserver里
返回值

方法名
返回值类型
单行多列
根据id查询
findUserById( )
User
多行多列
直接select*查询
findUserList( )
List<User>
单行单列
count(1)
findUserCount( )
int
注意:


1.查找单行多列:

我传入了一个id
  1. public SmbmsUser findUserById(int id){
  2.         Connection connection = null;
  3.         Statement stmt = null;
  4.         ResultSet rs = null;
  5.         try {
  6.             Class.forName("com.mysql.cj.jdbc.Driver");
  7.             String url="jdbc:mysql://localhost:3306/javaweb_test";
  8.             String username = "root";
  9.             String pwd = "root";
  10.             Connection conn =  DriverManager.getConnection(url,username,pwd);
  11.             String sql = "select * from smbms_user where id = "+id;
  12.              stmt = conn.createStatement();
  13.              rs = stmt.executeQuery(sql);
  14.              SmbmsUser smbmsUser = null;
  15.              while (rs.next()){
  16.                  smbmsUser = new SmbmsUser();
  17.                  rs.getString("userPassword");
  18.                  smbmsUser.setId( rs.getInt("id"));
  19.                  smbmsUser.setUserCode(rs.getString("userCode"));
  20.                  smbmsUser.setUserName(rs.getString("userName"));
  21.                  smbmsUser.setUserPassword( rs.getString("userPassword"));
  22.              }
  23.             return smbmsUser;
  24.         } catch (Exception e) {
  25.             e.printStackTrace();
  26.         }
  27.         return  null;
  28.     }
复制代码

2.查找多行多列


  1. public List<SmbmsUser> findUserList(){
  2.         Connection connection = null;
  3.         Statement stmt = null;
  4.         ResultSet rs = null;
  5.         try {
  6.             Class.forName("com.mysql.cj.jdbc.Driver");
  7.             String url="jdbc:mysql://localhost:3306/javaweb_test";
  8.             String username = "root";
  9.             String pwd = "root";
  10.             Connection conn =  DriverManager.getConnection(url,username,pwd);
  11.             String sql = "select * from smbms_user where userRole is not null" ;
  12.             stmt = conn.createStatement();
  13.             rs = stmt.executeQuery(sql);
  14.             List<SmbmsUser> smbmsUserList = new ArrayList<>();
  15.             while (rs.next()){
  16.                 //这个是在里面创建对象
  17.                 SmbmsUser smbmsUser = new SmbmsUser();
  18.                 smbmsUser = new SmbmsUser();
  19.                 smbmsUser.setId( rs.getInt("id"));
  20.                 smbmsUser.setUserCode(rs.getString("userCode"));
  21.                 smbmsUser.setUserName(rs.getString("userName"));
  22.                 smbmsUser.setUserPassword( rs.getString("userPassword"));
  23.                 smbmsUserList.add(smbmsUser);
  24.             }
  25.             return smbmsUserList;
  26.         } catch (Exception e) {
  27.             e.printStackTrace();
  28.         }
  29.         return  null;
  30.     }
复制代码

3.查找单行单列


  1. public int findUserCount( ) {
  2.         Connection connection = null;
  3.         Statement stmt = null;
  4.         ResultSet rs = null;
  5.         try {
  6.             Class.forName("com.mysql.cj.jdbc.Driver");
  7.             String url="jdbc:mysql://localhost:3306/javaweb_test";
  8.             String username = "root";
  9.             String pwd = "root";
  10.             Connection conn =  DriverManager.getConnection(url,username,pwd);
  11.             String sql = "select count(*) countuser from smbms_user";
  12.             stmt = conn.createStatement();
  13.             rs = stmt.executeQuery(sql);
  14.             int count = 0;
  15.             //6.处理resultSet遍历集合
  16.             while(rs.next()){
  17.                 count = rs.getInt("countuser");
  18.             }
  19.             return count;
  20.         } catch (Exception e) {
  21.             e.printStackTrace();
  22.         }
  23.         return  0;
  24.     }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4