欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

JDBC技术

时间:2023-06-30

用mysql:mysql-connector-java

在pom.xml中引入SQL和JSTL
       
       
            mysql
            mysql-connector-java
            8.0.27
       

       
       
            javax.servlet.jsp.jstl
            jstl-api
            1.2
       

       
            org.glassfish.web
            jstl-impl
            1.2
       


1.JDBC
     1.1什么是JDBC:Java Database Connectivity,Java数据库连接,其实就是通过Java语言连接数据库。
                   原来在操作数据库是控制台写sql语句来操作数据库,是通过JDBC就数据库发送sql语句操作数据库
         JDBC原理:
        比如:买完电脑,装上显卡,还需要安装显卡的驱动,那么显卡驱动程序包是显卡的厂商的提供。
        JDBC操作数据库:MySQL、Oracle、DB2等数据库,前提就是导入数据库驱动的程序包
        那么这些数据库驱动程序包是由数据库厂商提供的,经过协商,由sun公司的技术人员提供一套规范,
        由不同的数据库厂商按照这套规范去提供数据库驱动包。这套规范(JDBC规范)就是一组接口,
        程序员通过操作JDBC这一组接口就可以操作不同的数据库了。

    1.2JDBC常用的API
        1.Driver:在java.sql包下面(由sun公司提供),里面常用的方法可以常用的方法可以获取数据库驱动程序的版本号
        2.DriverManager类:在Java.sql包下面,获取数据库连接对象,注册驱动
            第一个方法:注册数据库驱动,registerDriver(Driver driver)
            第二个方法:获取数据库连接,Connection con = getConnection(url,username, password);
                url:与数据库连接的地址
                username:安装数据库时的用户名
                password:数据库的密码
        3.Connection接口:在java.sql包下面,获取发送sql语句的对象
            第一个方法:Statement st =createStatement();
            第二个方法:PreparedStatemnt pst=preparedStatement(sql语句);
            
        4.Statement接口:在java.sql包下面,向数据库发送sql语句,操作数据库
                   第一个方法:对数据库进行添加、删除、修改,或者在数据库再创建表等操作,一句话就是对数据库进行
                DML(insert into :添加,update:修改,delete:删除)、DDL(create:创建表,drop:删除表)操作
                int row=executeUpdata(String sql)
                   第二个方法:对数据库进行查询操作。
                ResultSet re=executeQuery(String sql) //返回的是一个结果集
        5.PreparedStatement接口:在java.sql包下面,是Statement的子接口。
                   第一个方法:对数据库进行添加、删除、修改,或者在数据库再创建表等操作,一句话就是对数据库进行
                DML(insert into :添加,update:修改,delete:删除)、DDL(create:创建表,drop:删除表)操作
                int row=executeUpdata()
                   第二个方法:对数据库进行查询操作。
                ResultSet re=executeQuery() //返回的是一个结果集            
        6.ResultSet接口:在java.sql包下面的,用来封装查询的结果。
                 常用的方法:获取查询的结果
                 比如获取字段类型为varchar的值:getstring(字段的名称或者字段的编号)
            获取字段类型为int的值:getInt(字段名称或者字段的编号);
        结论:获取字段对应的值:getXXX(字段名称或者字段的编号);//XXX表示类型

    1.3实现第一个JDBC案例
        通过Java代码操作数据库的具体步骤:前提导入数据库的jar包
                 1.注册并加载驱动:
            DriverManager.register(Driver driver);    //这种不是很规范
            或者Class.forName("com.mysql.jdbc.Driver");    //这种较为规范
                 2.获取Connection连接对象
            Connection con=DriverManager.getConnection(url,username,password);
                 3.获取操作数据库的对象Statement(或者PreparedStatement)
            Statement stmt =con.createStatement();
                 4.向数据库发送sql语句,执行操作。
            比如执行查询操作:String sql=“select *  from users”;调用executeQuery(sql);
                 5.执行查询操作,返回ResultSet结果集对象,结果集里面封装的是查询的结果。
            遍历ResultSet,获取我们查询的数据。
                 6.关闭连接,释放资源(倒关原则:先出现的,后关闭)
            对象.close();
        准备工作:
                 1.创建数据库:jdbc,在这个数据库里创建表,插入几条数据(查看sql表是否创建成功:show databases;)
            create database jdbc;
            use jdbc;
            create table users(id int primary key auto_increment,
                name varchar(32),
                password varchar( 32),
                email varchar(160), 
                birthday Date);
            insert into users(name,password,email,birthday) values('zhangsan','123','zhangsan@qq.com','1999-4-26');
            insert into users(name,password,email,birthday) values('lisi','234','lisi@qq.com','1998-5-29');
            insert into users(name,password,email,birthday) values('wangwu','345','wangwu@qq.com','2000-5-29');
        
        注意:1.在开发中通常使用Class.forName("com.mysql.jdbc.Driver");注册驱动,不用DriverManager.register(Driver driver);
            因为该方法注册了两次
                  2.关闭资源时,关闭资源的代码一定要放在finally快里面,因为前面的代码无论是否发生异常,这个快里的关闭资源
            代码总会被执行。因为数据库连接资源很宝贵,数据库连接资源时是有限,所以一定要关。

    1.4PreparedStatement对象
        PreparedStatement和Statement区别:
        1.功能:它们都可以向数据库发送sql语句,对数据库进行crud操作
        2.Statement操作数据库时,如果执行相同的sql语句多次,每次都会对sql语句进行编译,效率太低
              PreparedStatement操作数据库时,会提前预编,所以执行相同的sql语句多次,效率会提高很多。
        3.java.sql.Date和java.util.Date的关系:util的是父类
            两个Date之间的相互转换:
                java.util.Date utilDate = new java.sql.Date();
                java.sql.Date sqlDate = new java.sq1.Date(new java.util.Date().getTime());
            注意:数据库插入日期值一定要用java.sql.Date

    1.5ResulSet对象
        返回的是一个结果集,用来封装查询出来的数据(查询出来的数据其实就是一个表),调用next方法跳转到下一行,逐个获取这一行的所有数据
        如果像支持结果集的滚动效果,在创建Statement对象时,就得支持滚动效果
        ResultSet之滚动结果集(了解)
        ResultSet结果集是否支持滚动,要从Connection类的createStatement()方法说起。也就是说创建的Statement决定了使用statement决定了
        Statement createStatement(int resultSetType,int resultSetConcurrency)
        resultSetType的可选值:
            *ResultSet.TYPE_FORWARD_ONLY:不滚动结果集;
            *ResultSet.TYPE_SCROLL_INSENSITIVE:滚动结果集,但结果集数据不会再跟随数据库而变化;
            *CONCUR_READ_onLY 只读方式打开结果集。
 
        ResultSet表示结果集,它是一个二维的表格! Resultset内部维护一个行光标((游标),
        Resultset提供了一系列的方法来移动游标:
            *void beforeFirst():把光标放到第一行的前面,这也是光标默认的位置;
            *void afterLast():把光标放到最后一行的后面;
            *boolean first():把光标放到第一行的位置上,返回值表示调控光标是否成功;
            *boolean last():把光标放到最后一行的位置上;
            *boolean isBeforeFirst():当前光标位置是否在第一行前面;
            *boolean isAfterLast():当前光标位置是否在最后一行的后面;
            *boolean isFirst():当前光标位置是否在第一行上;
            *boolean isLast():当前光标位置是否在最后一行上;
            *boolean previous():把光标向上挪一行;
            *boolean next():把光标向下挪一行;
            *boolean jrelative(int row):相对位移,当row为正数时,表示向下移动row行,为负数时表示向上移动row行;
            *boolean absolute(int row):绝对位移,把光标移动到指定的行上;
            *int getRow():返回当前光标所有行。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。