您的位置:1010cc时时彩经典版 > 1010cc安卓版 > 让大家来谈谈JDBC

让大家来谈谈JDBC

发布时间:2019-10-14 02:43编辑:1010cc安卓版浏览(74)

    Statement试行静态sql对象

    功能:

    1. 执行sql
      • boolean execute(String sql) :能够进行自便的sql (了然)
      • int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
        • 重回值:影响的行数,能够通过这么些影响的行数推断DML语句是不是实践成功 重回值>0的则试行成功,反之,则失败。
      • ResultSet executeQuery(String sql) :执行DQL(select)语句

    插入譬如:

     public static void main(String[] args) {
            Connection conn = null;
            Statement stmt = null;
            try {
                // 1. 加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 2. 获取连接对象
                conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3?useSSL=true", "root", "nrblwbb7");
                // 3. 创建sql
                String sql = "INSERT INTO ACCOUNT VALUES (NULL,'网址',2000)";
                // 4. 获取执行sql对象
                stmt = conn.createStatement();
                // 5. 执行sql
                int count = stmt.executeUpdate(sql);
                // 6. 处理结果
                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 {
                // 7. 释放资源
                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 main(String[] args) {
            /**
             * 由于Connection和Statement实现了AutoCloseable接口,所以可以使用自动关闭
             */
            try(
                    // 2.获取Connection对象
                    Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/db3?useSSL=true",
                            "root",
                            "nrblwbb7") ;
                    // 3. 获取Statement对象
                    Statement stmt = conn.createStatement()
                    ){
                // 1.加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 4. 创建sql
                String sql = "UPDATE ACCOUNT SET BALANCE = 1500 WHERE NAME = '网址'";
                // 5. 执行sql
                int count = stmt.executeUpdate(sql);
                // 6. 处理结果
                System.out.println(count);
                if(count > 0){
                    System.out.println("修改成功");
                }else{
                    System.out.println("操作失败或者记录未更改");
                }
                // 7. 关闭连接,由于try..with..resource会自动关闭,所以无须担心
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    

    除去譬喻:

     public static void main(String[] args) {
            /**
             * 由于Connection和Statement实现了AutoCloseable接口,所以可以使用自动关闭
             */
            try(
                    // 2.获取Connection对象
                    Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/db3?useSSL=true",
                            "root",
                            "nrblwbb7") ;
                    // 3. 获取Statement对象
                    Statement stmt = conn.createStatement()
                    ){
                // 1.加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 4. 创建sql
                String sql = "DELETE FROM ACCOUNT WHERE NAME = '网址'";
                // 5. 执行sql
                int count = stmt.executeUpdate(sql);
                // 6. 处理结果
                System.out.println(count);
                if(count > 0){
                    System.out.println("删除成功");
                }else{
                    System.out.println("删除失败");
                }
                // 7. 关闭连接,由于try..with..resource会自动关闭,所以无须担心
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    

                                    java.sql.DriverManager.registerDriver(new Driver());

    一、JDBC简介

    1、JDBC是SUN公司为了简化操作数据推出一套标准。数据库厂家的驱动正是对JDBC的完成。

    2、Java Data Base Connectivity(java数据库三番五次),它至关心珍视要由接口组成。

      java.sql.*    javax.sql.*   JDK中

      数据库的驱动jar包 (mysql-connector-java-5.0.8-bin.jar )

    三、使用JDBC的步骤

    连忙入门

    自己使用的是jdk10和mysql-connector-java-5.1.45-bin.jar。

    步骤:

    1. 导入驱动jar包
      • 体系根目录创制文件夹libs。
      • 将mysql-connector-java-5.1.45-bin.jar复制到libs目录下
      • 右击libs下,Add as Library将jar包导入项目中
    2. 注册驱动
    3. 取得数据库连接对象(Collection)
    4. 定义sql
    5. 得到试行sql语句的对象 Statement
    6. 实行sql,接受再次来到结果(ResultSet)
    7. 管理结果
    8. 放出能源

       // 2. 注册驱动
       Class.forName("com.mysql.jdbc.Driver");
       // 3. 获取连接对象Collection
       Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "nrblwbb7");
       // 4. 定义sql
       String sql = "UPDATE STUDENT SET AGE = 23 WHERE NAME = '王智'";
       // 5. 获取执行sql语句的对象 Statement
       Statement statement = conn.createStatement();
       // 6. 执行sql,接受返回结果(ResultSet)
       int result = statement.executeUpdate(sql);
       // 7. 处理结果
       System.out.println(result);
       // 8. 释放资源
       statement.close();
       conn.close();
      

                            } catch (SQLException e) {

    五、JDBC进行CRUD(增刪改查)操作

    工具類:

    getConnection() return conn; 獲取連接
    
    配置文件放在 dbcgf.properties 中
    
    release () 施放資源
    
    //工具类
    public class JdbcUtil {
    
    private static String driverClass;
    private static String url;
    private static String user;
    private static String password;
    
    static{
      try {
        ClassLoader cl = JdbcUtil.class.getClassLoader();
        InputStream in = cl.getResourceAsStream("dbcfg.properties");
        Properties props = new Properties();
        props.load(in);
        driverClass = props.getProperty("driverClass");
        url = props.getProperty("url");
        user = props.getProperty("user");
        password = props.getProperty("password");
    
        Class.forName(driverClass);
        } catch (Exception e) {
            throw new ExceptionInInitializerError(e);
            }
        }
    
        public static Connection getConnection() throws Exception{
          Connection conn = DriverManager.getConnection(url,user, password);
          return conn;
        }
        public static void release(ResultSet rs,Statement stmt,Connection conn){
          if(rs!=null){
            try {
              rs.close();
            } catch (SQLException e) {
              e.printStackTrace();
            }
              rs = null;
            }
            if(stmt!=null){
            try {
                  stmt.close();
              } catch (SQLException e) {
                e.printStackTrace();
              }
              stmt = null;
            }
            if(conn!=null){
            try {
              conn.close();
            ] catch (SQLException e) {
                e.printStackTrace();
            }
              conn = null;
            }
        }
    }
    

     測試:

    package com.yif.jdbc;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import org.junit.Test;
    import com.yif.util.JdbcUtil;
    
    public class JdbcDemo6 {
        @Test
          public void testAdd(){
          Connection conn = null;
          Statement stmt = null;
          ResultSet rs = null;
          try{
            conn = JdbcUtil.getConnection();
            stmt = conn.createStatement();
            stmt.executeUpdate("insert into users (name,password,email,birthday) values ('范青霞','123','fqx@itcast.cn','2000-10-01')");
          }catch(Exception e){
            throw new RuntimeException(e);
          }finally{
            JdbcUtil.release(rs, stmt, conn);
          }
        }
        @Test
        public void testUpdate(){
          Connection conn = null;
          Statement stmt = null;
          ResultSet rs = null;
          try{
            conn = JdbcUtil.getConnection();
            stmt = conn.createStatement();
            stmt.executeUpdate("update users set password=111 where id=4");
          }catch(Exception e){
            throw new RuntimeException(e);
          }finally{
            JdbcUtil.release(rs, stmt, conn);
          }
        }
        @Test
        public void testDelete(){
          Connection conn = null;
          Statement stmt = null;
          ResultSet rs = null;
          try{
            conn = JdbcUtil.getConnection();
            stmt = conn.createStatement();
            stmt.executeUpdate("delete from users where id=1");
          }catch(Exception e){
            throw new RuntimeException(e);
          }finally{
            JdbcUtil.release(rs, stmt, conn);
          }
        }
    }
    

     

    sql 注入 :

    1、客商的表单输入域:幸免某个特殊字符。

    2、对密码加密:MD5加密

     

    ·executeUpdate(String sql):运维insert/update/delete操作,重临更新的行数。

    Collection连接对象

    功能:

    1. 获取施行sql的指标
      • Statement createStatement()
      • PreparedStatement prepareStatement(String sql)
    2. 管理职业
      • 翻开事务:setAutoCommit(boolean autoCommit) :调用该格局设置参数为false,即展开事务
      • 提交业务:commit()
      • 回滚事务:rollback()

                    //开启事务

    四、释放占用的财富

     

    //释放资源
    //JDBC编码的代码模板
    public class JdbcDemo5 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "sorry");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select id,name,password,email,birthday from users");
            List<User> users = new ArrayList<User>();
            while (rs.next()) {
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setPassword(rs.getString("password"));
                user.setEmail(rs.getString("email"));
                user.setBirthday(rs.getDate("birthday"));
                users.add(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
          finally {
            if (rs != null) {
              try {
                rs.close();
              } catch (SQLException e) {
                e.printStackTrace();
               }
               rs = null;
            }
            if (stmt != null) {
              try {
                stmt.close();
              } catch (SQLException e) {
                e.printStackTrace();
              }
              stmt = null;
            }
            if (conn != null) {
              try {
                conn.close();
              } catch (SQLException e) {
                e.printStackTrace();
              }
              conn = null;
            }
        }
    
      }
    
    }
    

    JDBC(Java Data Base Connectivity,java数据库总是)是一种用于试行SQL语句的Java API,可认为两种关周详据库提供联合访谈,它由一组用Java语言编写的类和接口组成。JDBC提供了一种口径,据此能够营造更加尖端的工具和接口,使数据库开荒职员能够编写数据库应用程序。

    PreparedStatement:试行动态sql的靶子

    功能:

    1. 奉行动态的sql
      1. SQL注入难题:在拼接sql时,有一部分sql的万分注重字加入字符串的拼凑。会导致安全性难题
        1. 输入客户无论,输入密码:a' or 'a' = 'a
        2. sql:select * from user where username = 'fhdsjkf' and password = 'a' or 'a' = 'a'
      2. 不留余地sql注入难点:使用PreparedStatement对象来缓慢解决
      3. 预编写翻译的SQL:参数使用?作为占位符
      4. 步骤:
        1. 导入驱动jar包 mysql-connector-java-5.1.45-bin.jar
        2. 挂号驱动
        3. 获取数据库连接对象 Connection
        4. 定义sql
          • 留心:sql的参数使用?作为占位符。 如:select * from user where username = ? and password = ?;
        5. 赢得施行sql语句的对象 PreparedStatement Connection.prepareStatement(String sql)
        6. 给?赋值:
          • 方法: setXxx(参数1,参数2)
            • 参数1:?的岗位编号 从1 先河
            • 参数2:?的值
        7. 试行sql,接受重临结果,没有须要传递sql语句
        8. 管理结果
        9. 释放财富
      5. 在乎:早先时期都会选拔PreparedStatement来完毕增加和删除改查的具有操作
        1. 可防止止SQL注入
        2. 频率更加高

                        使用PreparedStatement,实施三回之后,会对SQL语句进行缓存,后一次再一次实行时功用越来越高。

    三、JDBC中常用的接口详解

    1、DriverManager:

      作用:

        a、注册驱动:

        方式一:(不提议使用)

        DriverManager.registerDriver(new com.mysql.jdbc.Driver());

        原因:1、信赖具体驱动。2、导致驱动注册2遍

        方式二:(建议)

        Class.forName("com.mysql.jdbc.Driver");

     

        b、获取与数据库的链接

          url:SUN和数据库厂家间的磋商。具体查看数据库的文书档案。

          public static Connection getConnection(String url,String user,String password)

                                    throws SQLException

          public static Connection getConnection(String url,Properties info)

                                    throws SQLException

          public static Connection getConnection(String url)

                                    throws SQLException

    2、Connection

    富有的数据库操作都是依据链接之上的。

    Statement createStatement():创制向数据库发送sql的statement对象。

    //2、获取与数据库的链接
    //方式一:
    //Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15", "root", "sorry");
    
    //方式二:
    //Properties props = new Properties();
    //props.setProperty("user", "root");//  参数名:参考数据库的文档
    //props.setProperty("password", "sorry");
    //props.setProperty("useUnicode", "true");//编码有关的参数
    //props.setProperty("characterEncoding", "utf8");
    //Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15",props);
    
    //方式三
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15?user=root&password=sorry");
    

     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day15?user=root&password=");

    3、Statement

    Statement stmt = conn.createStatement();

    职能:代表SQL语句对象。能够向数据库发送任何的SQL语句

    ResultSet executeQuery(String sql):sql平日都以询问语句

    int executeUpdate(String sql):sql日常是DML语句。insert update delete。再次回到值,操作几条记下。

    boolean execute(String sql):sql能够是轻巧的口舌。重临值不是表示成功与否。如若是查询语句,就有结果集,再次来到true。未有回到结果集的,重回false。

    4、ResultSet

    效能:封装了询问的结果集

    1010cc时时彩经典版 1

    ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from users");
    List<User> users = new ArrayList<User>();
    while(rs.next()){
      User user = new User();
      user.setId(rs.getInt("id"));
      user.setName(rs.getString("name"));
      user.setPassword(rs.getString("password"));
      user.setEmail(rs.getString("email"));
      user.setBirthday(rs.getDate("birthday"));
      users.add(user);
    }
    

     

    boolean next():游标下移。再次回到值是有无记录

    boolean previous():游标上移。

    boolean absolute(int count):定位到钦点的行。第一行是1。

    void beforeFirst():移动游标到第一行的前边。

    void afterLast():移动游标到最终一行的前面。

    = DriverManager.getConnection("jdbc:mysql://host:port/database", "user","password");

    详解种种对象

    1. DriverManager:驱动管理对象
    2. Connection:数据库连接对象
    3. Statement:执行sql对象
    4. ResultSet:结果集对象
    5. PreparedStatement :执行sql对象

                                getInt("id")

    二、JDBC的编码步骤

    0、前提:拷贝数据库的驱动到创设路线中(classpath)

    1、注册驱动

    2、获取与数据库的链接

    3、创制代表SQL语句的靶子

    4、执行SQL语句

    5、假使是询问语句,供给遍历结果集

    6、释放占用的财富

     

    public class JdbcDemo1 {
    
      public static void main(String[] args) throws SQLException {
        // 1、注册驱动
        DriverManager.registerDriver(new com.mysql.jdbc.Driver());
        // 2、获取与数据库的链接
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/day15", "root", ""); //没有密码则“” 空
        // System.out.println(conn.getClass().getName()); 要想知道具体类型,就这么办
        // 3、创建代表SQL语句的对象
        Statement stmt = conn.createStatement();
        // 4、执行SQL语句
        ResultSet rs = stmt.executeQuery("select id,name,password,email,birthday from users");
        // 5、如果是查询语句,需要遍历结果集
        while (rs.next()) {
            System.out.println("---------------------");
            System.out.println(rs.getObject("id"));
            System.out.println(rs.getObject("name"));
            System.out.println(rs.getObject("password"));
            System.out.println(rs.getObject("email"));
            System.out.println(rs.getObject("birthday"));
        }
        // 6、释放占用的资源
        rs.close();
        stmt.close();
        conn.close();
      }   
    }
    

     

    ResultSet提供搜索分化门类字段的艺术,常用的有:

    概念

    • JDBC : Java Database Connectivity,java连接数据库,使用Java操作数据库的本领。
    • 实为 : 其实便是sun集团定义的一套操作全部关系型数据库的条条框框,即接口。
      梯次数据库商家去落到实处那套接口,提供数据库操作驱动jar包,大家可以动用那套
      接口举行(JDBC)编制程序,真正施行的代码是驱动jar包的兑现类。

                    - 注意:

    PreparedStatement接口

    1、帮衬SQL的预编译。得到该指标时,就不能够不给他SQL语句。

    2、补助参数占位符:  ?  三个问号代表着二个参数。

     

    注:能用PreparedStatement就不要用Statement。

    ·createStatement():成立向数据库发送sql的statement对象。

    ResultSet:结果及对象,封装查询结果

    功能:

    1. 包装查询结果:
      • boolean next(): 游标向下移动一行,剖断当前行是不是是最终一行最后(是还是不是有多少),假设是,则赶回false,要是还是不是则赶回true
      • getXxx(参数):获取数据
        • Xxx:代表数据类型 如: int getInt() , String getString()
        • 参数:
          1. int:代表列的号码,从1发端 如: getString(1)
          2. String:代表列名称。 如: getDouble("balance")
      • 注意:
        • 动用手续:
          1. 游标向下活动一行
          2. 推断是还是不是有多少
          3. 获取数据

    举个轻易例子:

     @Test
        public void selectDemo(){
            try {
                // 1.加载驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 2.创建sql语句
                String sql = "select * from account";
                try(
                        // 3.获取连接对象
                        Connection conn = DriverManager.getConnection(
                                "jdbc:mysql://localhost:3306/db3?useSSL=true",
                                "root",
                                "root");
                        // 4.获取执行sql语句对象
                        Statement stmt = conn.createStatement()
                ){
                    // 5.执行sql
                    ResultSet rs = stmt.executeQuery(sql);
                    // 6.处理结果集
                    while(rs.next()){
                        // 获取id
                        int id = rs.getInt("id");
                        // 获取姓名
                        String name = rs.getString("name");
                        // 获取账户余额
                        double balance = rs.getDouble("balance");
                        // 正确的处理应该是封装为对象,进行处理,这就简单展示下
                        System.out.println("id = "   id   ", name = "   name   ", balance = "   balance);
                    }
    
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
    
        }
    

                    mysql-connector-java-5.1.37-bin.jar

    推荐这种方法,不会对具体的驱动类发生信任。

    DriverManager

    功能:

    1. 登记驱动:告诉程序该接纳哪一个数据库驱动jar

      • 行使的法子:static void registerDriver(Driver driver) :注册与给定的驱动程序 DriverManager 。
      • 写代码应用:Class.forName("com.mysql.jdbc.Driver");
      • 由此查阅源码开采:在com.mysql.jdbc.Driver类中留存静态代码块

           static {
                  try {
                      java.sql.DriverManager.registerDriver(new Driver());
                  } catch (SQLException E) {
                      throw new RuntimeException("Can't register driver!");
                  }
           }
        

        静心:mysql5自此的驱动jar包能够省略注册驱动的步骤。

    2. 获取数据库连接

      • 方法:static Connection getConnection(String url, String user, String password)
      • 参数:
        • url:内定连接的门道
          • 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
          • 例子:jdbc:mysql://localhost:3306/db
          • 细节:假使老是的是本机mysql服务器,并且mysql服务暗中同意端口是3306,则url能够简写为:jdbc:mysql:///数据库名称
          • jdbc是连连数据库的情商,mysql是接二连三mysql数据库的子合同
        • user:用户名
        • password:密码

                    - 将修改应用到数据库

    ··Statement:由createStatement创制,用于发送简单的SQL语句(不带参数)。

    包装工具类

    src下db.properties的信息:

    # 驱动
    driver=com.mysql.jdbc.Driver
    # url
    url=jdbc:mysql://127.0.0.1:3306/db3?useSSL=true
    # 用户
    username=root
    # 密码
    password=root
    

    卷入的工具类如下:

    public class JDBCUtils {
    
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
    
        static{
            try {
                // 读取配置文件
                InputStream inputStream = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
                Properties pro = new Properties();
                pro.load(inputStream);
                // 静态变量赋值
                driver = pro.getProperty("driver");
                url = pro.getProperty("url");
                username = pro.getProperty("username");
                password = pro.getProperty("password");
                // 注册驱动
                Class.forName(driver);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取连接对象
         * @return 返回连接对象
         */
        public static Connection getConn() throws SQLException {
            return DriverManager.getConnection(url,username,password);
        }
    
        /**
         * 关闭资源
         * @param stmt
         * @param conn
         */
        public static void close(Statement stmt,Connection conn){
            if(stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    
        /**
         * 关闭资源
         * @param rs
         * @param stmt
         * @param conn
         */
        public static void close(ResultSet rs, Statement stmt, Connection conn){
            if(rs != null){
                try {
                    rs.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();
                }
            }
        }
    
    }
    

                        - 但是大家以此事物不写也好使,因为在JDBC4从此,程序会自动加载数据库驱动。

    Connection与一定数据库的接连(会话),在三番五次内外文中推行sql语句并回到结果。DriverManager.getConnection(url, user, password)方法制造在JDBC UENVISIONL中定义的数据库Connection连接上。

    JDBC的简短介绍

                1.开启事务

    ·getObject(int index)、getObject(String columnName):获取在数据Curry随便等级次序的多少。

    事务管理

    1. 思想政治工作:五个含有两个步骤的业务操作。纵然这些职业操作被事务管理,则这多少个步骤要么同期打响,要么同一时间败北。
    2. 操作:
      1. 1010cc时时彩经典版,翻开事务
      2. 付给业务
      3. 回滚事务
    3. 运用Connection对象来保管作业

      • 张开事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即张开事务
        • 在实行sql此前开启事务
      • 付给业务:commit()
        • 当有着sql都试行完提交业务
      • 回滚事务:rollback()
        • 在catch中回滚事务

      测试:

       public static void main(String[] args) {
           Connection conn = null;
           PreparedStatement pstmt1 = null;
           PreparedStatement pstmt2 = null;
           try {
               // 1.创建sql,转账的sql
               String sql1 = "UPDATE ACCOUNT SET BALANCE = BALANCE - ? WHERE ID = ?";
               String sql2 = "UPDATE ACCOUNT SET BALANCE = BALANCE   ? WHERE ID = ?";
               // 2.获取连接对象
               conn = JDBCUtils.getConn();
      
               // 开启事务
               conn.setAutoCommit(false);
      
               // 3.获取执行sql对象,进行预编译
               pstmt1 = conn.prepareStatement(sql1);
               pstmt2 = conn.prepareStatement(sql2);
               // 4.替换占位符
               pstmt1.setDouble(1,500);
               pstmt1.setInt(2,1);
               pstmt2.setDouble(1,500);
               pstmt2.setInt(2,2);
               // 5.执行sql
               pstmt1.executeUpdate();
               // int i = 3 / 0;
               pstmt2.executeUpdate();
      
               // 提交事务
               conn.commit();
           } catch (Exception e) {
               if(conn != null) {
                   try {
                       // 事务回滚
                       conn.rollback();
                   } catch (SQLException e1) {
                       e1.printStackTrace();
                   }
               }
               e.printStackTrace();
           } finally {
               JDBCUtils.close(pstmt1,conn);
               JDBCUtils.close(pstmt2,null);
           }
       }
      

                            }

    1010cc时时彩经典版 2

                2.C3P0(重点)

    连接SqlServer数据库:Connection conn

     

    1010cc时时彩经典版 3

                - 方法:

    ·addBatch(String sql):把多条sql语句放到一个批管理中。

                //获取id,name,age

    1.什么是JDBC

     

    ·next():移动到下一行

            //创建Statement对象

    ·getString(int index)、getString(String columnName):获得在数据Curry是varchar、char等项指标数目对象。

                }

    1010cc时时彩经典版 4

                在my.ini文件中加多如下配置

    2.确立连接

                    - 开启事务未来再去操作数据库,全体操作将不会直接提交到数据库中

    常用Statement方法:

                                getString("name")

    其他参数如:useUnicode=true&characterEncoding=utf8

                            int指的是读取数据的列数。

    用以实施静态SQL语句并回到它所生成结果的对象。

     

    咱俩设置好数据库之后,我们的应用程序也是不可能直接采取数据库的,必须求经过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也等于数据库厂家的JDBC接口实现,即对Connection等接口的得以实现类的jar文件。

                2.备选五个参数

    ·commit():在链接上付出业务。

            > 所以大家提出了三个数据库连接池的概念,数据库连接池放的都是数据库连接(Connection)

    Driver接口由数据库商家提供,作为java开辟职员,只须要采取Driver接口就能够了。在编制程序中要三番五次数据库,必需先装载特定厂家的数据库驱动程序,差别的数据库有两样的装载方法。如:

                    void commit() throws SQLException;

    ·rollback():在这里链接上回滚事务。

     

    方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);

                    语法:jdbc:子公约:厂家内容

    4.ResultSet接口

                1.敞开事务

    ·executeQuery(String sql):运行select语句,返回ResultSet结果集。

            //executeUpdate用来实行一条修改SQL的言语

    ·getDate(int index)、getDate(String columnName):拿到在数据Curry是Date类型的多少。

                3.付给业务

    U翼虎L用于标志数据库的地方,通过UPRADOL地址告诉JDBC程序连接哪个数据库,U凯雷德L的写法为:

                    - 核心类:

    ·beforeFirst():移动resultSet的最前面。

                    - password

    = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database","user", "password");

                System.out.println(id "--" name "--" age);

    ·prepareCall(sql):创设推行存款和储蓄进程的callableStatement对象。

                        }

    动用后种种关闭指标及连接:ResultSet→Statement→Connection

            String sql = "SELECT id, name sname, age FROM t_stu WHERE id=2";

    ·getBoolean(int index)、getBoolean(String columnName):获得在数据Curry是Boolean类型的数码。

                            那个代码会将数据库驱动注册进DriverManager中。

    ·executeBatch():向数据库发送一批sql语句推行。

                            - 实行修改数据的SQL语句(增加和删除改),并回到受影响的行数

    加载JDBC驱动程序→创立数据库连接Connection→创设实施SQL的说话Statement→管理实践结果ResultSet→释放财富

            > 获取PreparedStatement是透过Connection的prepareStatement()的章程得到的,那么些格局供给传贰个SQL语句,

    ·CallableStatement:承继自PreparedStatement接口,由艺术prepareCall创设,用于调用存储进度。

            - mysql暗许批管理是停业的,所以大家还索要去开采mysql的批管理:

    ·prepareStatement(sql):创造向数据库发送预编写翻译sql的PrepareSatement对象。

                        列数是从1初始的。

    = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database","user", "password");

     

    一、相关概念

                            现在,该静态代码块会立刻进行。

    ·PreparedStatement:承接自Statement接口,由preparedStatement创设,用于发送含有贰个或多少个参数的SQL语句。PreparedStatement对象比Statement对象的效能越来越高,并且可避防御SQL注入,所以大家通常都采取PreparedStatement。

                    最地拉那接数:数据库连接池的最大体积,当最奥斯汀接数饱和了,则不再创造新的数据库连接

    ResultSet还提供了对结果集举行滚动的方法:

                    conn.rollback()

    ·absolute(int row):移动到内定行

                try{

    2.Connection接口

                        commons-dbcp-1.4.jar

    1.注册驱动(只做三回)

                    try{

    ··execute(String sql):运行语句,再次来到是不是有结果集

        6) 数据库连接池

    ·afterLast():移动到resultSet的末梢面。

                        if(stmt != null){

    连接MySql数据库:Connection conn

                                rs.close();

    二、常用接口

                    //获取Connection

    四、事务(ACID特点、隔开等第、提交commit、回滚rollback)

                    使用Statement时,每叁回都急需开展这七个步骤,而MySQL能够对曾经编译过的语句举行缓存,

    1.Driver接口

                2.执行SQL语句

    ·setAutoCommit(boolean autoCommit):设置工作是还是不是自动提交。

                    让大家的数据库对SQL语句进行预编写翻译操作。

    3.Statement接口

                    - 数据库连接

    会形成DriverManager中生出四个一样的驱动,并会对实际的驱动类发生注重性。

                                try {

    ·getFloat(int index)、getFloat(String columnName):获得在数据Curry是Float类型的数码对象。

                1.数据库的地点 url

    Connection conn = DriverManager.getConnection(url, user, password);

                            } catch (SQLException e) {

    2.数据库驱动

                    事必须得是使数据库从贰个一致性状态变到另三个一致性状态。一致性与原子性是紧凑相关的。

    ·Previous():移动到前一行

        3) 大数据

    1010cc时时彩经典版 5

     

    方式一:Class.forName(“com.MySQL.jdbc.Driver”);

                    //操作成功,提交业务

    装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");

                        在关 Statement

    三种Statement类:

     

    连接Oracle数据库:Connection conn

                            }

    装载Oracle驱动:Class.forName("oracle.jdbc.driver.OracleDriver");

            - mysql中的事务调节

    常用方法:

                    ResultSet rs = null;

                #回滚事务

            - 注意:低版本的mysql-jdbc驱动也不补助批管理

     

            int count = stat.executeUpdate(sql);

                那样就对大家的网址带来比十分大的安全隐患

                而小编辈传递的参数时通过拼接字符串的款型增加进SQL语句

            > 使用PreparedStatement的好处:

     

                    max_allowed_packet = 10M

                - java.sql.Connection

                    - url

                        注意:要是查询的SQL使用了别称,则列名以外号字为准。

                    - boolean next() 

                    conn = JDBCUtils.getConnection();

            - 事务的表征(ACID):

                                    throw new RuntimeException("Can't register driver!");

     

            - JDBC正是Java中年老年是数据库格局

                        e1.printStackTrace();

      - java.sql.Connection 数据库连接

     

                    e.printStackTrace();

                            } catch (SQLException e) {

                    2) 执行SQL语句

                    每趟扩展连接数:当数据库连接都被攻克今后,一次性扩展的数据库连接的个数

                int age = rs.getInt("age");

                int id = rs.getInt("id");

            - 在支付中大家的一个事务往往要求同不经常候操作四个表,那些操作往往是不可分割,业务中的对数据库的频繁操作,

                - 全数的数据库连接池都亟待落成DataSource,当使用数据库连接池时,大家便不再须求接纳DriverManger获取数据库连接

                1.PreparedStatement行使占位符来替换SQL语句中的变量,更有利于编写和阅读,维护起来更为的简练。

                        - 那一个办法在设置完全部的占位符之后调用

                                // TODO Auto-generated catch block

            - mysql对文本的大大小小有限量,也正是超越一定的分寸以往,文件将不能够插入进数据库,插入时会抛出万分

    本文由1010cc时时彩经典版发布于1010cc安卓版,转载请注明出处:让大家来谈谈JDBC

    关键词:

上一篇:MySQL常用命令,MySQL添加用户

下一篇:没有了