• JavaWeb学习——初识JDBC


    一. JDBC简介

    JDBC全称Java Date Base Connectivity(Java数据库连接),是一种用于执行SQL语句的Java API,可以为多种数据库提供统一访问(“编写一次,处处运行”)。

    简单来说,JDBC是搭建服务器应用程序与数据库的桥梁。

    二. 数据库驱动

    安装好数据库之后,我们的应用程序也是不能直接访问数据库,而是必须要通过相应的数据库驱动程序,通过驱动程序与实际的数据库的通信。

    三. 常用接口

    1.Driver接口

        Driver接口由数据库厂商提供实现,Java开发人员只需要使用这个接口。

        在编程中要连接到数据库,就需要装载特定厂商的数据库驱动程序,不同的数据库有不同的装载方法。

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

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

    2.DriverManager接口

        DriverManager管理一组JDBC驱动程序的基本服务。

        它跟踪可用的驱动程序,并在数据库和相应的驱动之间建立连接。

    3.Connection接口

        Connection接口代表与特定的数据库的连接(会话),要对数据表中的数据进行操作,首先要获取数据库连接。Connection实现就像在应用程序中与数据库之间开通了一条     渠道。

        通过DriverManager类的getConnection()方法可获取Connection实例。

        连接MySQL数据库:Connection con = DriverManager.getConnection("jdbc:mysql://host:port/datebase", USERNAME, PASSWORD);

        连接Oracle数据库:Connetion con = DriverManager.getConnection("jdbc:oralce:thin:@host:port:datebase");

    4.Statement接口

        Statement是Java执行数据库操作的一个重要接口,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL静态语句并返回结果生成的对象。

        三种Statement类:

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

            - PreparedStatement:继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的SQL语句。PreparedStatement对象比Statement对象的效率           更高,并且可以防止SQL注入,所以我们一般都使用PreparedStatement。

            - CallableStatement:继承自PreparedStatement接口,由方法prepareCall创建,用于调用存储过程。

        常用方法:

            - excute(String sql):执行给定的 SQL 语句,该语句在返回一个布尔值时用于反映SQL语句是否执行成功。

            - excuteQuery(String sql):执行select语句,该语句返回单个 ResultSet 对象。

            - executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。

            - addBatch(String sql) :将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。

            - executeBatch():向数据库发送一批sql语句执行,如果全部命令执行成功,则返回更新计数组成的数组。

    5.ResultSet接口

        数据库结果集的数据表,通常通过执行查询数据库的语句生成。

        ResultSet提供检索不同类型字段的方法,常用的有:

            - getString(int index)、getString(String columnName):获得在数据库里是varchar、char等类型的数据对象。

            - getFloat(int index)、getFloat(String columnName):获得在数据库里是Float类型的数据对象。

            - getDate(int index)、getDate(String columnName):获得在数据库里是Date类型的数据。

            - getBoolean(int index)、getBoolean(String columnName):获得在数据库里是Boolean类型的数据。

            - getObject(int index)、getObject(String columnName):获取在数据库里任意类型的数据。

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

            - next():移动到下一行

            - Previous():移动到前一行

            - absolute(int row):移动到指定行

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

            - afterLast() :移动到resultSet的最后面。

    使用后依次关闭对象及连接:ResultSet → Statement → Connection

    四. 使用JDBC步骤

    加载JDBC驱动程序 → 建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源

    1. 注册驱动 (只做一次)

      方式一:Class.forName(“com.MySQL.jdbc.Driver”);
      推荐这种方式,不会对具体的驱动类产生依赖。
      方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);
      会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

    2. 建立连接

        Connection con = DriverManager.getConnection(url, username, password);

    3. 创建执行SQL语句的statement

    //Statement  
    String id = "5";
    String sql = "delete from table where id=" +  id;
    Statement st = conn.createStatement();  
    st.executeQuery(sql);  
    //存在sql注入的危险
    //如果用户传入的id为“5 or 1=1”,那么将删除表中的所有记录

    4. 处理执行结果(ResultSet)

    1 ResultSet rs = ps.executeQuery();  
    2 While(rs.next()){  
    3     rs.getString(“col_name”);  
    4     rs.getInt(1);  
    5     //…
    6 }  

    5. 释放资源

    //数据库连接(Connection)非常耗资源,尽量晚创建,尽量早的释放 //都要加try catch 以防前面关闭出错,后面的就不执行了 1 try {
        if (rs != null) {
            rs.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            if (st != null) {
                st.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    五. 安装教程(包括MyEclipse,MySQL,MySQL Connector)(亲测有效)

    myeclipse-2017 链接:https://pan.baidu.com/s/13kcZ7l3XIGD7oQGtPa38jw 密码:ltmw

    myeclipse破解文件 链接:https://pan.baidu.com/s/1u2CXKverCgFdWedyFk1yFg 密码:n05h

    myeclipse安装教程来自园友博客 链接:https://www.cnblogs.com/qianjun2017/p/8108253.html

    Windows版本MySQL下载地址:https://dev.mysql.com/downloads/file/?id=479669

    MySQL下载后安装配置 来自CSDN博客 链接:https://blog.csdn.net/xielong0509/article/details/80636843

    MySQL Connector 链接:https://pan.baidu.com/s/1poBOudWobnxIrpSFLKs9Og 密码:hkfj

    - 关于Java Web Project 导入数据库jar包

      复制mysql-connector-java文件目录下两个jar包 ,进入工程文件目录下WebRoot -> WEB_INF-> lib 右键粘贴 ,再分别对这两个jar包右键Build Path选择Add to build path.

    ---每天积累一点点,吃水不忘挖井人---

  • 相关阅读:
    C语言利用按位与、按位或转换大小写字母
    综合布线知识点总结
    C语言 计算阶乘
    C语言位运算符详解
    docker-compose的flask自动部署
    redis集群的布置
    fatal: unable to auto-detect email address (got 'CC@LAPTOP-UPQ1N1VQ.(none)')
    使用ImagesPipeline时候报错为:ModuleNotFoundError: No module named 'scrapy.contrib'
    多任务
    json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (ch
  • 原文地址:https://www.cnblogs.com/cardiolith/p/9419183.html
Copyright © 2020-2023  润新知