0
点赞
收藏
分享

微信扫一扫

JDBC-笔记

陆公子521 2022-04-07 阅读 69
javaoracle

JDBC(JavaDataBase Connectivity)就是Java数据库连接,就是用JAVA语言操作数据库

JDBC基本流程:
        1.加载驱动(选择数据库)
        2.获取连接(与数据库建立连接)
        3.准备SQL
        4.构建处理块(封装发送SQL)
        5.发送SQL,得到结果
        6.处理结果
        7.连接关闭

public class Class001_JDBC {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        //1.加载驱动(选择数据库)
        Class.forName("oracle.jdbc.driver.OracleDriver");
        //2.获取连接(与数据库建立连接)
        Connection conn = DriverManager.getConnection(
                "jdbc:oracle:thin:@localhost:1521:XE",
                "SCOTT",
                "TIGER"
        );
        //3.准备SQL
        String sql = "SELECT * FROM DEPT";
        //4.构建处理块(封装发送SQL)
        Statement state = conn.createStatement();
        //5.发送SQL,得到结果
        ResultSet result = state.executeQuery(sql);
        //6.处理结果
        while(result.next()){
            int deptno = result.getInt(1);
            String dname = result.getString("dname");
            String loc = result.getString(3);
            System.out.println(deptno+"-->"+dname+"-->"+loc);
        }
        //7.连接关闭
        conn.close();
    }
}

处理块 

处理块分为:

1.静态处理块Statement

2.预处理块PreparedStatement

静态处理块Statement

Statement 是 Java 执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发 送要执行的 SQL 语句。Statement 对象,用于执行不带参数的简单 SQL 语句。 执行静态 SQL 语句并返回它所生成结果的对象。

创建:

连接.Connection.createStatement()

执行 :

ddl -->execute(dd语句) -- 通常不会在代码中执行

dml -->executeUpdate(dml语句)

select -->executeQuery(select)

 特点 :

处理 不变的静态的 sql 语句

优点:

直接查看sql ,方便处理错误

缺点:性能不高 拼接 sql 麻烦 可能存在 sql 注入


    //静态处理块 Statement
    /*public static boolean login(String username,String password){
        boolean flag = false;
        Connection conn = null;
        Statement state = null;
        ResultSet result = null;
        //1.获取连接
        try {
            conn = JDBCUtils.getConnection();
            //2.准备sql
            String sql = "select * from t_user where username='"+username+"' and password = "+password;
            //3.封装处理块
            state = conn.createStatement();
            //4.执行,得到结果
            result = state.executeQuery(sql);
            //5.处理结果
            if(result.next()){
                flag = true;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //6.关闭资源
            JDBCUtils.close(conn,state,result);
        }
        //7.返回结果
        return flag;
    }*/

预处理块PreparedStatement

PreparedStatement 接口继承了 Statement,并与之在两方面有所不同.始终以 PreparedStatement 代替 Statement.也就是说,在任 何时候都不要使用 Statement。

优点:

1. 由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement对象。因此,多次 执行的 SQL 语句经常创建为 PreparedStatement 对象,以提高效率。

2. 防止SQL注入问题 7.2.1. 创建: 创建:连接.prepareStatement(sql)

 执行: 存在? ,先填充参数再执行 ddl -->execute() dml -->executeUpdate() select -->executeQuery()

特点: 处理 不变的静态的 sql 语句 |可变的 sql 语句 带 ? 的 sql 优点:性能高,方便编写sql 不存在sql注入 安全

缺点:不能直接打印sql语句 不方便处理错误

 //预处理块 PreparedStatement
    public static boolean login(String username,String password){
        boolean flag = false;
        Connection conn = null;
        PreparedStatement state = null;
        ResultSet result = null;
        //1.获取连接
        try {
            conn = JDBCUtils.getConnection();
            //2.准备sql
            String sql = "select * from t_user where username=? and password =?";
            //3.构建预处理块
            state = conn.prepareStatement(sql);
            //4.为?赋值
            state.setString(1,username);
            state.setObject(2,password);

            //5.执行,得到结果
            result = state.executeQuery();
            //5.处理结果
            if(result.next()){
                flag = true;
            }
        }catch(SQLSyntaxErrorException e){
            System.out.println("遇到SQL注入了....");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            //6.关闭资源
            JDBCUtils.close(conn,state,result);
        }
        //7.返回结果
        return flag;
    }

释放资源

后打开的先关闭

举报

相关推荐

0 条评论