• JDBC—常用类


    详解各个对象

    DriverManager

    驱动管理对象

    功能:

    1.注册驱动:

    静态方法:static void registerDriver(Driver driver) 注册与给定的驱动程序 DriverManager 。

    *使用:Class.forName("com.mysql.jdbc.Driver");

    //Driver中的一个静态代码块
    static {
            try {
                java.sql.DriverManager.registerDriver(new Driver());
            } catch (SQLException E) {
                throw new RuntimeException("Can't register driver!");
            }
        }

    2.获取数据库连接:

    静态方法: static Connection getConnection (String url, String user, String password) 尝试建立与给定数据库URL的连接。

    参数:url:指定连接的路径;语法:jdbc:mysql://IP地址:端口号/数据库名称;

    user:用户名; password:密码;

    Connection

    数据库连接对象

    功能:

    1.获取执行sql对象:

    Statement createStatement() 创建一个 Statement对象,用于将SQL语句发送到数据库。
    PreparedStatement prepareStatement(String sql) 
    创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。

    2.管理事务:

    1.开启事务:setAutoCommit (boolean autoCommit) ;将参数设置为false,即开启事务;

    2.提交事务:commit();

    3.回滚事务:rollback();

    Statement

    执行sql的对象(静态)

    1.执行sql: 1.boolean excute(String sql):可以执行的任意sql;

    2.int excuteUpdate(String sql):执行DML、DCL语句;

    返回值:受到影响的行数(可以根据该值判断语句是否执行成功)

    3.ResultSet excuteQuery(String sql):执行DCL语句;

    返回结果集对象;

    练习:

    public static void main(String[] args)  {
        Statement stmt  = null;
        Connection  conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String  sql  = "insert into acount values(null,'wang',1500) ";
            //String  sql2 = "update acount set balance = 1000 where id=3";
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/qinsujie", "root", "qinsujie123");
            stmt= conn.createStatement();
            int count  = stmt.executeUpdate(sql);
            System.out.println(count);
            if(count>0){
                System.out.println("添加成功");
            }else{
                System.out.println("添加失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
           /* stmt.close();
            conn.close();*/
        }

    ResultSet

    结果集对象,封装查询结果

    1.next():游标向下移动一行,判断当前行是否是最后一行末尾(返回false时没有数据);

    2.getXxx(参数):获取数据;

    Xxx表示数据类型;

    参数:1.int :代表列的编号(从1开始);2. String : 代表列的名称;

    注意:使用步骤:1.游标向下移动一行;2.判断是否有数据;3.获取数据

    while(res.next()){
        int id=res.getInt(1);
        String name  = res.getString(2);
        String balance = res.getString(3);
        System.out.println("id="+id+"  name="+name+"  balance="+balance);
    }

    //抽取JDBC工具类

    目的:简化书写;

    配置jdbc.properties文件;
    url=jdbc:mysql://127.0.0.1:3306/practice
    user=root
    password=qinsujie123
    driver=com.mysql.jdbc.Driver
    public class JDBCUtils {
        private static String url;
        private static String user;
        private static String password;
        private static String driver;
        /**
         * 文件只读取一次即可拿到这些值
         */
        static{
    
            try {
                Properties pro = new Properties();
                //获取src路径下的资源方式
                ClassLoader  classLoader= JDBCUtils.class.getClassLoader();
                URL resourse = classLoader.getResource("jdbc.properties");
                String path = resourse.getPath();
                //加载文件
               // pro.load(new FileReader("learn.DataBase\JDBC\src\jdbc.properties"));
                pro.load(new FileReader(path));
                url=pro.getProperty("url");
                user=pro.getProperty("user");
                password=pro.getProperty("password");
                driver = pro.getProperty("driver");
                try {
                    Class.forName(driver);
                } catch (ClassNotFoundException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取连接
         * 不传递参数,但是要求通用性
         * 解决:配置文件
         * @return 返回连接对象
         */
        public static Connection  getConnection(){
            try {
                return DriverManager.getConnection(url,user,password);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return null;
        }
    
        /**
         * 释放资源
         * @param conn
         * @param stmt
         * @param res
         */
        public static void close(Connection conn , Statement stmt , ResultSet res){
            if(res!=null){
                try {
                    res.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        public static void close(Connection conn , Statement stmt ){
                if (stmt!=null){
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if(conn!=null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
        }
    }

    PreparedStatement

    表示预编译的sql对象:参数使用?占位符替代。

    1.SQL注入问题:在拼接sql时,有sql特殊的关键字参与拼接,有安全隐患;

    2.解决SQL注入问题:使用PreparedStatement对象解决

  • 相关阅读:
    第三周学习进度
    四则运算之结对开发
    第二周学习进度
    单元测试
    构建之法阅读笔记03
    本周学习进度
    四则运算三
    构建之法阅读笔记02
    本周学习进度
    按照Right-BICEP要求设计的测试用例
  • 原文地址:https://www.cnblogs.com/susexuexi011/p/14353782.html
Copyright © 2020-2023  润新知