zoukankan      html  css  js  c++  java
  • JDBC对象详解DriverManager&Connection&Statement

    1.DriverManager

    驱动管理对象

      功能:

    (1)注册驱动,告诉程序该使用哪个数据库驱动jar

    static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager

    写代码使用:Class.forName("com.mysql.jdbc.Driver"); 

    将Driver类加载进内存,就有一些代码会被自动执行(Driver类中有一些静态代码块的存在)

    通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块

    注意:MySQL5之后的驱动jar包可以省略注册驱动的步骤,因为在这个java.sql.Driver中已经写好了。

    (2)获取数据库连接

    •  方法: static Connection getConnection(String url, String user, String password)
    • 参数:
      • url:指定连接的路径,语法:jdbc:mysql://ip地址(域名):端口号/数据库名称,即:JDBC:子协议:子名称//主机名:端口/数据库名?属性名=属性值&…
        • 例子:jdbc:mysql://localhost:3306/db3
        • 如果连接的是本机的mysql服务器,并且mysql服务默认的端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
      • user:用户名
      • password:密码
    	String url = "jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8&useSSL=false";
    	// mysql端口默认3306
    	// 协议://主机地址:端口号/数据库名?参数1&参数2&参数3
    	 
    	// oracle默认端口1521
    	// jdbc:oracle:thin:@localhost:1521:sid

    2.Connection

    数据库连接对象

    代表了当前的代码与数据库之间的桥梁

    功能:

    (1)获取执行sql的对象,创建一个Statement对象,用于将SQL语句发送到数据库。

    • Statement createStatement()   
    • PreparedStatement prepardStatement(String sql)

    (2)管理事务

    • 开启事务:void setAutoCommit(boolean autoCommit)   调用该方法设置参数为false,即开启事务
    • 提交事务:void commit()  
    • 回滚事务:void rollback()

    3.Statement

    执行Sql的对象

    jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可

    • Statement对象的executeUpdate方法,用于向数据库发送增删改查的sql语句。
    • executeUpdate执行完后,将会返回一个整数(即增删改查语句导致了数据库几行数据发生了变化)。
    • Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。
    	statement.executeQuery(); // 查询操作返回ResultSet
    	statement.execute(); // 执行任何sql
    	statement.executeUpdate(); // 更新,插入,删除,都是用这个,返回一个受影响的行数
    	statement.executeBatch(); // 批量执行多个sql

    CRUD操作-create

     使用executeUpdate(String sql)方法完成数据添加操作,示例如下:

    	Statement st = conn.createStatement();
    	String sql = "insert into user(...) values(...)";
    	int num = st.executeUpdate(sql);
    	if(num>0){
    		System.out.println("插入成功!!!");
    	}

    CRUD操作-delete

    使用executeUpdate(String sql)方法完成数据删除操作,示例操作:

    	Statement st = conn.createStatement();
    	String sql = "delete from user where id=1";
    	int num = st.executeUpdate(sql);
    	if(num>0){
    		System.out.println("删除成功!!!");
    	}

    CRUD操作-update

    使用executeUpdate(String sql)方法完成数据更新操作,示例操作:

    	Statement st = conn.createStatement();
    	String sql = "update user set name='' where name=''";
    	int num = st.executeUpdate(sql);
    	if(num>0){
    		System.out.println("修改成功!!!");
    	}

    CRUD操作-read

    使用executeQuery(String sql)方法完成数据查询操作,示例操作:

    	Statement st = conn.createStatement();
    	String sql = "select * from user where id=1";
    	ResultSet rs = st.executeQuery(sql);
    	while(rs.next()){
    		// 根据获取列的数据类型,分别调用rs的相应方法映射到java对象中
    	}
    

      代码实现

    (1)提取工具类

    db.properties

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=false
    username=root
    password=123456

    注意:这里有个坑,一定要把db.properties放在src目录下,不然classload的范围有局限,导致一直加载不到

    JdbcUtils.java

    package cn.company.jdbc.utils;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class JdbcUtils {
        private static String driver = null;
        private static String url = null;
        private static String username = null;
        private static String password = null;
    
        static {
            try {
                InputStream inputStream = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
                System.out.println(inputStream);
                Properties properties = new Properties();
                properties.load(inputStream);
    
                driver = properties.getProperty("driver");
                url = properties.getProperty("url");
                username = properties.getProperty("username");
                password = properties.getProperty("password");
                System.out.println(url);
    
                // 驱动只用加载一次
                Class.forName(driver);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        // 获取连接
        public static Connection getConnection() throws SQLException {
            return DriverManager.getConnection(url,username,password);
        }
    
        // 释放连接
        public static void releaseConnection(Connection connection, Statement statement, ResultSet resultSet)
            throws SQLException {
            if (resultSet != null) {
                resultSet.close();
            }
    
            if (statement != null) {
                statement.close();
            }
    
            if (connection != null) {
                connection.close();
            }
    
        }
    }
    

    (2)编写增删改的方法,executeUpdate
    增:

    package cn.company.jdbc;
    
    import cn.company.jdbc.utils.JdbcUtils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TestInsert {
        public static void main(String[] args) throws SQLException {
            Connection connection = null;
            Statement statement = null;
            ResultSet resultSet = null;
    
            try {
                connection = JdbcUtils.getConnection();  // 获取数据库连接
                statement = connection.createStatement();
                String sql = "INSERT INTO users VALUES(4,'kuanghen','123456','2435579944@qq.com','2020-02-01')";
                int i = statement.executeUpdate(sql);
                if (i > 0) {
                    System.out.println("插入成功!");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.releaseConnection(connection, statement, resultSet);
            }
    
        }
    }
    

      数据库jdbcStudy的users表中增加了一条信息

     删:

    package cn.company.jdbc;
    
    import cn.company.jdbc.utils.JdbcUtils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TestDelete {
        public static void main(String[] args) throws SQLException {
            Connection connection = null;
            Statement statement = null;
            ResultSet rs = null;
            try {
                connection = JdbcUtils.getConnection();
                statement = connection.createStatement();
                String sql = "DELETE FROM users WHERE id='4'";
                int i = statement.executeUpdate(sql);
                if (i > 0) {
                    System.out.println("删除成功!");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.releaseConnection(connection, statement, rs);
            }
        }
    }
    

      改:

    package cn.company.jdbc;
    
    import cn.company.jdbc.utils.JdbcUtils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TestUpdate {
        public static void main(String[] args) throws SQLException {
            Connection conn = null;
            Statement statement = null;
            ResultSet rs = null;
    
            try {
                conn = JdbcUtils.getConnection();
                statement = conn.createStatement();
                String sql = "update users set name='kuangshen',email='123@163.com' WHERE id='1'";
                int i = statement.executeUpdate(sql);
                if (i > 0) {
                    System.out.println("修改成功!");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.releaseConnection(conn, statement, rs);
            }
        }
    }

      修改结果:

     查:

    package cn.company.jdbc;
    
    import cn.company.jdbc.utils.JdbcUtils;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    
    public class TestSelect {
        public static void main(String[] args) throws SQLException {
            Connection conn = null;
            Statement statement = null;
            ResultSet rs = null;
            try {
                conn = JdbcUtils.getConnection();
                statement = conn.createStatement();
                String sql = "select * from users";
                ResultSet resultSet = statement.executeQuery(sql);
                while (resultSet.next()) {
                    System.out.println("id="+resultSet.getObject("id") + 
                        ",name="+resultSet.getObject("name"));
                    System.out.println("---------");
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                JdbcUtils.releaseConnection(conn,statement, rs);
            }
        }
    }
    

      

    4.Resultset

    结果集对象

    封装查询结果

    (1)next():游标向下移动一行

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

      Xxx:代表数据类型,如getInt() 会返回int型值,getString()  会返回String类型

      参数有两种情况:

        可以接受int:代表列的编号,从1开始。如,getString(1)

        可以接受String:代表列的名称。如:getDouble("name")

    5.PreparedStatement

    执行sql的对象(功能比Statement强)

  • 相关阅读:
    七牛云上传图片
    找到当前字符串中最后一个/并获取之后的字符串
    jquery正则表达式验证:验证身份证号码
    apply()与call()的区别
    js 判断字符串是否包含某字符串,String对象中查找子字符,indexOf
    改变父元素的透明度,不影响子元素的透明度—css
    c实现生产者消费者问题。 windows下。
    python基础练习 dict切片
    html+css test1
    codewars[7]-python Friend or Foe?
  • 原文地址:https://www.cnblogs.com/GumpYan/p/14066704.html
Copyright © 2011-2022 走看看