zoukankan      html  css  js  c++  java
  • 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对象解决

  • 相关阅读:
    PHP基本的语法以及和Java的差别
    Linux 性能測试工具
    【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
    【Oracle 集群】Oracle 11G RAC教程之集群安装(七)
    【Oracle 集群】11G RAC 知识图文详细教程之RAC在LINUX上使用NFS安装前准备(六)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 特殊问题和实战经验(五)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之缓存融合技术和主要后台进程(四)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之RAC 工作原理和相关组件(三)
    Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
    【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)
  • 原文地址:https://www.cnblogs.com/susexuexi011/p/14353782.html
Copyright © 2011-2022 走看看