• JDBC复习1


    1.什么是JDBC

    JDBC是java数据库连接技术的简称(Java DataBase Connectivity)

    jdbc是接口,jdbc驱动才是接口的实现,负责连接各种不同的数据库。jdbc的API由Sun公司提供,要遵循其规范

    PS:驱动就是比如你买个鼠标,并不能直接用,需要插入电脑并安装驱动程序才可以使用。这里你有个JDBC,但是你得有jdbc驱动才可以和数据库建立连接

    2.组成JDBC的类和接口

    java.sql

      类:DrivaerManager --------由sun公司提供,载入不同的jdbc驱动(由数据库厂商提供)

      接口:

        Connection(连接数据库)

        Statement和PreparedStatement:执行sql语句。要搞清楚两者的用法和区别

        ResultSet:

    javax.sql

      接口:DataSource

    3.关于Statement和PreparedStatement的区别与使用

      1. 二者都是执行sql语句的载体,PreparedStatement是Statement的一个子接口。使用PreparedStatement可以防止SQL攻击,提高可读性和效率,建议使用

      2.Statement执行sql语句提供了以下常用方法:executUpdate(可执行sql中的增删改,还可以用于判断是否数据库更新成功),executeQuery(执行sql语句的查询语句)

      3.关于PreparedStatement的使用

    1     string sql = "select * from people p where p.id = ? and p.name = ?";  //1.编写sql语句,"?"代表占位符,参数
    2     preparedstatement ps = connection.prepareStatement(sql);        //2.获取执行sql语句的载体
    3     ps.setint(1,id);             //3.设置占位符,提供了setInt,setString,setDouble等
    4     ps.setstring(2,name);    
    5     ResultSet rs = ps.executequery();

      4.关于statement的使用    

    1     Statement stmt = connection.createStatement();  //获取Statement
    2     string sql = "select * from people p where p.id = 1 and p.name = '张三' ";
    3     ResultSet rs = stmt.executeQuery(sql);

      5.看了不少资料说了很多,都是建议有一点开发水平的程序员都使用PreparedStatement。

       好处有很多,有jdbc模板,方便维护,防止sql注入攻击,预编译处理等等,至于其中的原因,会在后面转载几篇大佬的文章来学习学习

    4.关于结果集ResultSet

    1 ResultSet.next(); // 将游标由当前位置移动到下一行
    2 ResultSet.getString(String columnName); // 获取指定字段的String类型值
    3 ResultSet.getString(int columnIndex); // 获取指定索引的String类型值
    4 ResuleSet.previous(); // 将游标由当前位置移动到上一行

    /*

     *参数columnIndex表示列的索引,列索引从1开始,而不是0,

     *这第一点与数组不同。如果你清楚当前列的数据类型,那么可以使用getInt()之类的方法来获取

     *如果你不清楚列的类型,那么你应该使用getObject()方法来获取。

    */

    5. 把数据库连接关闭这种重复度很高的代码抽取出来(三种方式)

    第一种方式(我用的最多)

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * 提供获取连接和释放资源的方法
     */
    public class JDBCUtils_V1 {
    
        /**
         * 获取连接方法
         */
        public static Connection getConnection() {
            Connection conn = null;
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/web08", "root", "root");
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
    
            /*
             *释放资源
            */
        public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }                

    第二种方式--通过读取配置文件

    在src目录下新建一个db.properties

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3307/test?useUnicode=true&characterEncoding=utf8
    username=root
    password=123456
    package cn.itheima.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ResourceBundle;
    
    /**
     * 提供获取连接和释放资源的 方法
     */
    public class JDBCUtils_V2 {
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
        
        /**
         * 静态代码块加载配置文件信息
         */
        static{
            ResourceBundle bundle = ResourceBundle.getBundle("db");
            driver = bundle.getString("driver");
            url = bundle.getString("url");
            username = bundle.getString("username");
            password = bundle.getString("password");
        }
    
        /**
         * 获取连接方法
         */
        public static Connection getConnection() {
            Connection conn = null;
            try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url, username, password);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }

    第三种方式--也是通过读取配置文件

    package cn.itheima.jdbc;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Properties;
    import java.util.ResourceBundle;
    
    /**
     * 提供获取连接和释放资源的 方法*/
    public class JDBCUtils_V3 {
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
    
        /**
         * 静态代码块加载配置文件信息
         */
        static {
            try {
                // 1.通过当前类获取类加载器
                ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();
                // 2.通过类加载器的方法获得一个输入流
                InputStream is = classLoader.getResourceAsStream("db.properties");
                // 3.创建一个properties对象
                Properties props = new Properties();
                // 4.加载输入流
                props.load(is);
                // 5.获取相关参数的值
                driver = props.getProperty("driver");
                url = props.getProperty("url");
                username = props.getProperty("username");
                password = props.getProperty("password");
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    
        /**
         * 获取连接方法
         */
        public static Connection getConnection() {
            Connection conn = null;
            try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url, username, password);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (pstmt != null) {
                try {
                    pstmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
    
        }
    }
  • 相关阅读:
    用ant发布项目版本
    11 款用于优化、分析源代码的Java工具 转载
    第四章 数学运算
    jdbc for mysql demo
    第二章 PHP基础
    第七章 自定义函数
    第五章 数组
    jmock2.5基本教程 转载
    jdbc for mssql2005 demo
    oracle实战第三天事务处理与函数
  • 原文地址:https://www.cnblogs.com/zengcongcong/p/10366307.html
Copyright © 2020-2023  润新知