Oracle JDBC 详解类实现方法介绍 封装增删改查方法

Oracle JDBC

介绍:

Java DataBase Connectivity java与数据库连接。

java通过jdbc这个连接,连接数据库,操作数据库。所以java 制定了标准 ,不同的数据库厂商实现 接口即可。

java 中提供的接口 java.sql.* 包下,常用接口如下。

接口名称功能
java.sql.Connection连接
java.sql.Statementsql静态处理块
java.sql.PreparedStatementsql预处理块
java.sql.ResultSet结果集
java.sql.ResultSetMetaData结果集元信息

连接前提,环境

Oracle数据库:

https://blog.csdn.net/xiaoliang98/article/details/109407665

数据库加载器:

F:\app\Administrator\product\11.2.0\dbhome_1\jdbc\li b\ojdbc6.jar 视安装路径而定

常用类介绍

java.sql.Connection

接口方法作用
Statement createStatement()得到该连接的静态处理块
PreparedStatement prepareStatement(String sql)得到该连接的预处理块
void setAutoCommit(boolean autoCommit)设置事务是否自动提交
true自动false手动
boolean getAutoCommit()得到该连接的提交属性
void commit()提交事务
void close()关闭连接
void rollback()回滚事务
boolean isClosed()连接是否关闭
Statement与PreparedStatement的区别

Statement:是直接给sql语句,必须在String sql中拼接成完整的sql语句,然后直接sql语句执行。

PreparedStatement:后期拼接通过?,后期注入需要拼接的属性值,而且多了一层检验。避免了sql语句的注入。因为拼接过程只能填写值,若检测到sql语句则阻止注入。

java.sql.Statement

接口方法作用
ResultSet executeQuery(String sql)返回结果集
int executeUpdate(String sql)返回修改行数
void close()关闭sql静态处理块

java.sql.PreparedStatement

接口方法作用
ResultSet executeQuery( )返回结果集
int executeUpdate( )返回修改行数
void setNull(int parameterIndex, int sqlType)赋值为空
void set基本类型(int parameterIndex, 基本类型 x)给n个?赋值
void close()关闭sql静态处理块

java.sql.ResultSet

接口方法作用
boolean next()与迭代器类似
void close()关闭结果集
boolean wasNull()结果集是否为空
String get基本类型(int columnIndex)得到索引的属性

java.sql.ResultSetMetaData 表结构信息

接口方法作用
int getColumnCount()表格的列数
String getColumnName(int column)获取列名
String getTableName(int column)获取该列的表名

获取表名我傻了。我找不到。

jdbc.properties

DRIVERS=oracle.jdbc.driver.OracleDriver
URL=jdbc:oracle:thin:@localhost:1521:MyOra
USER=user
PASSWORD=123456

常规的jdbc

public class JdbcUtil {
    private static Connection conn;
    private static Properties properties=new Properties();
    /**
     * 预先加载驱动 配置文件
     */
    static {
        try {
            properties.load(JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties"));
        } catch (IOException e) {
            System.out.println("配置文件加载错误");
            e.printStackTrace();
        }
        try {
            Class.forName(properties.getProperty("driver"));
        } catch (ClassNotFoundException e) {
            System.out.println("驱动加载错误");
            e.printStackTrace();
        }
    }

    //获取配置文件的值
    private static String url=properties.getProperty("url");
    private static String name=properties.getProperty("username");
    private static String pwd=properties.getProperty("password");

    //连接数据库
    public Connection getConn(){
        try {
            conn=DriverManager.getConnection(url,name,pwd);
        } catch (SQLException e) {
            System.out.println("url 用户 密码 错误 数据库连接失败。");
            e.printStackTrace();
        }
        System.out.println("连接成功");
        return conn;
    }

    //关闭连接
    public void close(){
        if(conn!=null){
            conn=null;
        }
    }
}

package ppl.com.jdbc;

public class Jdbc {
    protected Connection conn =null;
    protected PreparedStatement state =null;//预封装sql语句 加入判断
    protected ResultSet result =null;

    //传入sql conn 连接赋值  state 封装SQL语句
    protected void init(String sql){
        JdbcUtil jdbcUtil=new JdbcUtil();
        conn =jdbcUtil.getConn();
        try {
            state=conn.prepareStatement(sql);
            conn.setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //关闭所有连接
    protected void allClose(){
        if(result !=null){
            try {
                result.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(state !=null){
            try {
                state.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn !=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

封装后的jdbc 代码不全

package ppl.com.baseUtil;

public interface InterJdbc {
    /**
     * 更新数据
     * @param sql
     * @param objs  可变参数列表
     * @return
     */
    boolean update(String sql,Object... objs);

    /**
     * 查找数据
     * @param obj
     * @param sql
     * @param objs
     * @return
     */
    List<Object> select(Object obj,String sql,Object... objs);

    /**
     * 插入语句
     * @param sql
     * @param objs
     * @return
     */
    boolean insert(String sql,Object... objs);

    /**
     * 删除数据
     * @param sql
     * @param objs
     */
    void delete(String sql,Object... objs);
}

package ppl.com.baseUtil;

public class JdbcBase extends Jdbc implements InterJdbc {

    /**
     * 更新数据
     *
     * @param sql
     * @param objs 可变参数列表
     * @return
     */
    @Override
    public boolean update(String sql, Object... objs) {
        boolean T=false;
        setSql(sql,objs);

        try {
            state.executeUpdate();
            conn.commit();
            T=true;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                conn.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return T;
    }

    /**
     * 查找数据
     *
     * @param classname
     * @param sql
     * @param objs
     * @return
     */
    @Override
    public List<Object> select(Object classname, String sql, Object... objs) {
        setSql(sql,objs);
        try {
            result = state.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return getList(result,classname);
    }
    /**
     * 插入语句
     *
     * @param sql
     * @param objs
     * @return
     */
    @Override
    public boolean insert(String sql, Object... objs) {
        return update(sql,objs);
    }

    /**
     * 删除数据
     *
     * @param sql
     * @param objs
     */
    @Override
    public void delete(String sql, Object... objs) {
        update(sql,objs);
    }

    /**
     * 将resultSet集 赋值给List<T>
     * @param resultSet
     * @param t
     * @return
     */
    public List<Object> getList(ResultSet resultSet,Object  t){
        List<Object> list=new ArrayList<>();
        Class<?> aClass = t.getClass();
        try {
                while (resultSet.next()){
                    Object o = aClass.newInstance();
                    Field[] fields = aClass.getDeclaredFields();
                    for (Field field : fields) {
                        field.setAccessible(true);
                        field.set(o,resultSet.getObject(field.getName()));
                    }
                    list.add(o);
                }
            } catch (Exception e) {
                e.printStackTrace();
        }
        allClose();
        return list;
    }

    private void setSql(String sql, Object... objs){
        init(sql);
        if(objs!=null&&objs.length>0){
            for (int i = 1; i <=objs.length ; i++) {
                try {
                    state.setObject(i,objs[i-1]);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值