zoukankan      html  css  js  c++  java
  • JDBC的使用

    1.JDBC概念
    Java DataBase Connectivity, Java 数据库连接.
    JDBC本质: 是sun佛那个是定义的一套操作所有关系数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
    2.JDBC操作
    一、步骤
    1.导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
    (1)复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
    (2)右键–>Add As Library
    2.注册驱动
    3.获取数据库连接对象 Connection
    4.定义sql语句
    5.获取Statement对象
    6.执行sql语句,并返回结果
    7.处理结果
    8.关闭,释放资源

    3.代码实现
    //1. 导入驱动jar包
    //2. 注册驱动
    Class.forName("com.mysql.jdbc.Driver");
    //3. 获取数据库连接对象 Connection
    // Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/zy", "root", "1111");
    // 获取数据库连接对象. 当访问的是本机MySQL数据库,则可以 省略IP和端口
    Connection conn = DriverManager.getConnection("jdbc:mysql:///zy","root", "1111");
    //4. 定义sql语句
    String sql = "update account set balance = 2000";

        //5. 获取执行sql语句的对象 Statement
        Statement stmt = conn.createStatement();
    
        //6. 执行sql, 接收返回结果
        int count = stmt.executeUpdate(sql);
    
        //7. 处理结果
        System.out.println(count);
    
        //8. 释放资源
        stmt.close();
        conn.close();
    

    4.JDBC各类详解
    *DriverManager: 驱动管理对象
    1.注册驱动:告诉程序该使用哪一个数据库驱动jar包
    2.代码体现:Class.forName("com.mysql.jdbc.Driver");
    *获取数据连接
    static Connection getConnection(String url, String user, String password)
    参数:
    url:指定连接的路径
    语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
    例子:jdbc:mysql://localhost:3306/db3
    细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
    user:用户名
    password:密码
    *Connection:
    功能:
    1.获取sql执行对象Statement
    *Stastement createStatement()
    *PrepredStatement prepareStatement(String sql)
    2.管理实务
    setAutoCommit(boolean) 如果boolean为false,则为开启事务
    commit():提交事务
    rollback():回滚事务
    *Statement:执行sql对象
    功能:
    *执行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)语句
    *ResultSet: 结果集对象,封装查询结果
    boolean next()游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
    getXxx(参数)获取数据
    Xxx:代表数据类型 如: int getInt() , String getString()
    * 参数:
    1. int:代表列的编号,从1开始 如: getString(1)
    2. String:代表列名称。 如: getDouble(“balance”)
    *PreparedStatement: 执行sql对象(预编译)
    *SQL注入问题
    SQL注入问题:在拼接sql时,有一些sql的特殊关键字参与字符串的拼接。会造成安全性问题
    (1). 输入用户随便,输入密码:a’ or ‘a’ = 'a
    (2). sql:select * from user where username = ‘fhdsjkf’ and password = ‘a’ or ‘a’ = ‘a’
    *解决SQL注入问题
    使用PreparedStatement对象来解决
    预编译的SQL:参数使用?作为占位符

    *注意事项

    • 以后都会使用PreparedStatement来完成增删改查的操作
    • 可以防止SQL注入
    • 效率更高

    抽取JDBCUtils工具类
    抽取JDBC工具类: JDBCUtils
    目的: 每次都要写JDBC的步骤,为了方便所以抽取为一个工具类
    分析:
    *注册驱动抽取
    抽取一个方法获取连接对象 (使用静态方法,工具类使用方便)
    抽取一个方法释放资源
    /

    • 抽取JDBC工具类: JDBCUtils

    • 目的: 每次都要写JDBC的步骤,为了方便所以抽取为一个工具类

    • 分析:

      1. 注册驱动抽取
      1. 抽取一个方法获取连接对象 (使用静态方法,工具类使用方便)
      1. 抽取一个方法释放资源
        */
        public class JDBCUtils {
        private static String url;
        private static String user;
        private static String password;
        private static String driver;

      // 资源文件读取. 因为只想加载一次,所以写在静态代码块中, 随类的加载而加载到内存(只加载一次)
      static {
      // 读取资源文件, 获取值
      try {
      //1. 创建properties集合类
      Properties pro = new Properties();

           // 获取src路径下的文件方式 --> ClassLoader 类加载器
           ClassLoader classLoader = JDBCUtils.class.getClassLoader();
           URL resource = classLoader.getResource("jdbc.properties");
           String path = resource.getPath();
           // System.out.println(path);
      
           //2. 加载文件
           // pro.load(new FileReader("F:\JavaEE\code\idea_code\coderZYGui\day04_jdbc\src\jdbc.properties"));
           pro.load(new FileReader(path));
      
           //3. 获取数据, 赋值
           url = pro.getProperty("url");
           user = pro.getProperty("user");
           password = pro.getProperty("password");
           driver = pro.getProperty("driver");
      
           //4. 注册驱动
           Class.forName(driver);
      
       } catch (IOException e) {
           e.printStackTrace();
      
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
      

      }

      public static Connection getConnection() throws SQLException {

       // 写死,不好
       // return DriverManager.getConnection("jdbc:mysql://localhost:3306/zy", "root", "1111");
       return DriverManager.getConnection(url, user, password);
      

      }

      /**

      • 释放资源

      • @param stmt 释放执行sql语句对象

      • @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();
        }
        }
        }
        }
        ————————————————
        版权声明:本文为CSDN博主「White Camel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
        原文链接:https://blog.csdn.net/m0_37989980/article/details/103443631

  • 相关阅读:
    数据结构-树与二叉树-思维导图
    The last packet successfully received from the server was 2,272 milliseconds ago. The last packet sent successfully to the server was 2,258 milliseconds ago.
    idea连接mysql报错Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property
    redis学习笔记
    AJAX校验注册用户名是否存在
    AJAX学习笔记
    JSON学习笔记
    JQuery基础知识学习笔记
    Filter、Listener学习笔记
    三层架构学习笔记
  • 原文地址:https://www.cnblogs.com/linjing111/p/12709703.html
Copyright © 2011-2022 走看看