原生JDBC请求

1 篇文章 0 订阅

package com.itemutils.jdbc;

import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;

/**

  • @Author zbf

  • @DATA 2019/9/1 14:38

  • @ClassIntroduction 原生jdbc的实现
    /
    public class UseJDBCUtil {
    /
    *

    • 修改数据库的链接对象
    • @param sql sql语句
    • @return
      */
      public static int updateEntity(String sql){
      Connection conn=null;
      PreparedStatement pr=null;
      int update=0;
      try {
      //加载驱动
      Class.forName(JDBCConstant.DB_DRVIER);
      //创建连接
      conn = DriverManager.getConnection(JDBCConstant.DB_URL, JDBCConstant.DB_USER, JDBCConstant.DB_PASSWORLD);
      conn.setAutoCommit(false);
      //预编译SQL
      pr = conn.prepareStatement(sql);
      //执行sql
      update= pr.executeUpdate();
      //提交更改
      conn.commit();
      } catch (ClassNotFoundException e) {
      e.printStackTrace();
      } catch (SQLException e) {
      e.printStackTrace();
      } finally {
      try {
      pr.close();
      conn.close();
      } catch (SQLException e) {
      e.printStackTrace();
      }
      }
      return update;
      }

    /**

    • 查询单个对象
    • @param sql sql
    • @param tClass 需要查询的对象
    • @param
    • @return
      */
      public static T getEntity(String sql,Class tClass){
      return getRestult(sql,tClass).get(0);
      }

    /**

    • 查询全部需要的集合对象

    • @param sql 查询的sql

    • @param tClass 需要返回的对象

    • @param 返回的对象实体

    • @return
      */
      public static ArrayList getRestult(String sql, Class tClass){
      //装结果的集合
      ArrayList resUlt = new ArrayList<>();
      //连接对象
      Connection con=null;
      PreparedStatement ps=null;
      ResultSet rs=null;
      try {
      //注册驱动,利用反射机制加载
      Class.forName(JDBCConstant.DB_DRVIER);
      //获得连接对象
      con = DriverManager.getConnection(JDBCConstant.DB_URL, JDBCConstant.DB_USER, JDBCConstant.DB_PASSWORLD);
      //需要执行的SQL
      ps= con.prepareStatement(sql);
      //获得结果集
      rs= ps.executeQuery();
      //获得结果集的元素对象
      ResultSetMetaData metaData = rs.getMetaData();
      //获得结果的元素个数
      int columnCount = metaData.getColumnCount();
      //获得对象的属性数组
      Field[] fields = tClass.getFields();
      //构造业务函数
      while (rs.next()){
      //获得对象
      T t = tClass.newInstance();
      //循环结果属性
      for (int i=1;i<columnCount;i++){
      //获得结果
      Object obj = rs.getObject(i);
      //对象属性集合
      for (int j=0;j<fields.length;j++){
      Field field = fields[j];
      //判断是否对应
      if (field.getName().equals(metaData.getCatalogName(i))){
      boolean accessible = field.isAccessible();
      field.setAccessible(true);
      field.set(t,obj);
      field.setAccessible(accessible);
      }
      }
      }
      resUlt.add(t);
      }
      } catch (ClassNotFoundException e) {
      e.printStackTrace();
      } catch (SQLException e) {
      e.printStackTrace();
      } catch (IllegalAccessException e) {
      e.printStackTrace();
      } catch (InstantiationException e) {
      e.printStackTrace();
      } finally { //关闭连接
      try {
      rs.close();
      ps.close();
      con.close();
      } catch (SQLException e) {
      e.printStackTrace();
      }

      }
      return resUlt;
      }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值