zoukankan      html  css  js  c++  java
  • java深入探究07-jdbc上

    1.连接数据库三种方式

    //连接数据库的URL
        private String url = "jdbc:mysql://localhost:3306/day17";
                            // jdbc协议:数据库子协议:主机:端口/连接的数据库   //
    
        private String user = "root";//用户名
        private String password = "root";//密码
    方法一:创建驱动程序对象
    //1.创建驱动程序类对象
            Driver driver = new com.mysql.jdbc.Driver(); //新版本
            //Driver driver = new org.gjt.mm.mysql.Driver(); //旧版本
            
            //设置用户名和密码
            Properties props = new Properties();
            props.setProperty("user", user);
            props.setProperty("password", password);
            
            //2.连接数据库,返回连接对象
            Connection conn = driver.connect(url, props);
    View Code
    
    

    方法二:使用驱动器类连接数据库(注册了2次没必要)

    Driver driver = new com.mysql.jdbc.Driver();
            //Driver driver2 = new com.oracle.jdbc.Driver();
            //1.注册驱动程序(可以注册多个驱动程序)
            DriverManager.registerDriver(driver);
            //DriverManager.registerDriver(driver2);
            
            //2.连接到具体的数据库
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println(conn);
    View Code

    方式三推荐:加载驱动程序

    //通过得到字节码对象的方式加载静态代码块,从而注册驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            
            //Driver driver2 = new com.oracle.jdbc.Driver();
            //1.注册驱动程序(可以注册多个驱动程序)
            //DriverManager.registerDriver(driver);
            //DriverManager.registerDriver(driver2);
            
            //2.连接到具体的数据库
            Connection conn = DriverManager.getConnection(url, user, password);
            System.out.println(conn);
    View Code
     

    2.JDBC核心API

      java.sql.*和javax.sql

      1)Driver接口:java驱动程序接口,任何数据库厂商都要实现这个接口;

            这个接口里面有一个方法:connect(url,properties)

              url:jdbc协议:数据库子协议://主机:端口号/数据库

              user:数据库用户名

              password:数据库密码

      2)DriverManger类:管理驱动程序Driver的

            registerDriver(Driver):注册驱动程序,可以注册多个驱动程序对他们进行管理

            getConnection(url,user,password):获得连接对象

      3)Connection接口:表示java程序与数据库的连接对象

            CreateStatement();创建Stataement对象

            prepareStatement();创建PrepareStatement()对象

            prepareCall(String sql);创建CallableStatement对象

      4)Statement接口

            excuteUpdate():执行预编译存储过程sql语句

            executeQuery()   执行预编译的查询sql语句(DQL

            PrepareStatement接口:执行预编译

            CallableStatement接口:用于执行存储过程的sql语句(call xxx

            ResultSet executeQuery()   调用存储过程的方法

      5)ResultSet接口

            boolean next()  将光标移动到下一行

            getXX() : 获取列的值

    3.预编译:PreparedStatement执行sql语句

        执行sql语句会预编译,sql中有参数,可以之后再添加

    //2.准备预编译的sql
                String sql = "INSERT INTO student(NAME,gender) VALUES(?,?)"; //?表示一个参数的占位符
                
                //3.执行预编译sql语句(检查语法)
                stmt = conn.prepareStatement(sql);
                
                //4.设置参数值
                /**
                 * 参数一: 参数位置  从1开始
                 */
                stmt.setString(1, "李四");
                stmt.setString(2, "");
    View Code

    4.CallableStatement执行存储过程

    1.sql
        String sql=conn.prepareCall(sql);
        //预编译
        stmt=conn.prepareCall(sql);
        //设置输入参数
        stmt.setInt(1,6);
        //设置输出参数(注册输出参数)
        stmt.registerOutParameter(2,java.sql.Type.varchar);
        //发送参数,执行
        stmt.executeQuery();
        //得到结果
        String result=stmt.getString(2);//getXX方法专门用于获取存储过程中的输出参数

    5.事务;

      事务特性:原子性,一致性,隔离性,持久性

        原子性,是一个最小逻辑操作单元 !

        一致性,事务过程中,数据处于一致状态。

        持久性, 事务一旦提交成功,对数据的更改会反映到数据库中。

        隔离性, 事务与事务之间是隔离的。

      技术:setAutoCommit();设置是否自动提交事务

          commit();手动提交事务

          rollback();代码需要回退到开始前的状态

      例子:转账,这里可以设置回滚的到莫一位置,在第一次转账结束位置设置一个回滚点,要是在哪里就发生错误就回滚到指定的代码段

    // 3. 转账,使用事务, 回滚到指定的代码段
        public void trans() {
            // 定义个标记
            Savepoint sp = null;
            
            // 第一次转账
            String sql_zs1 = "UPDATE account SET money=money-1000 WHERE accountName='张三';";
            String sql_ls1 = "UPDATE account SET money=money+1000 WHERE accountName='李四';";
            
            // 第二次转账
            String sql_zs2 = "UPDATE account SET money=money-500 WHERE accountName='张三';";
            String sql_ls2 = "UPDATE1 account SET money=money+500 WHERE accountName='李四';";
    
            try {
                con = JdbcUtil.getConnection(); // 默认开启的隐士事务
                con.setAutoCommit(false);       // 设置事务手动提交
    
                /*** 第一次转账 ***/
                pstmt = con.prepareStatement(sql_zs1);
                pstmt.executeUpdate();
                pstmt = con.prepareStatement(sql_ls1);
                pstmt.executeUpdate();
                
                // 回滚到这个位置?
                sp = con.setSavepoint(); 
                
                
                /*** 第二次转账 ***/
                pstmt = con.prepareStatement(sql_zs2);
                pstmt.executeUpdate();
                pstmt = con.prepareStatement(sql_ls2);
                pstmt.executeUpdate();
                
    
            } catch (Exception e) {
                try {
                    // 回滚 (回滚到指定的代码段)
                    con.rollback(sp);
                } catch (SQLException e1) {
                }
                e.printStackTrace();
            } finally {
                try {
                    // 提交
                    con.commit();
                } catch (SQLException e) {
                }
                JdbcUtil.closeAll(con, pstmt, null);
            }
    
        }
    View Code

      

  • 相关阅读:
    实数---Currency讲解
    自己写的 限制文本框TEdit中只能输入数字
    maven增加自定义jar包
    delphi 类方法、类变量、类常量、类属性的研究,自己的研究
    BASE64 官方方法,我自己用的,注意记住换行问题。
    ComponentCount 与 ControlCount 区别
    关于delphi 中 Sender的学习
    Redis源码分析(二十八)--- object创建和释放redisObject对象
    Redis源码分析(二十八)--- object创建和释放redisObject对象
    Redis源码分析(二十九)--- bio后台I/O服务的实现
  • 原文地址:https://www.cnblogs.com/xiaoping1993/p/6861123.html
Copyright © 2011-2022 走看看