A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© guhaowei 初级黑马   /  2018-5-9 16:17  /  927 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

[石家庄校区]BootStrap与MySql数据库

一、BootStrap学习

BootStrap的概述:web前段css框架
BootStrap设计出响应式页面,由它设计页面可以在手机,PAD,PC都可以直接访问.
BootStrap的使用:
用于生产环境的BootStrap
编译并压缩后的css、javescript和字体文件。不含文档和源码文件
BootStrap的引入文件
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">

<!-- Optional theme -->
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css">

<!-- Latest compiled and minified JavaScript -->
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>

并且的添加一个<mate>标签
<mate name="viewport" coutent="width=device-width,initial-scale=1"></mate>

BootStrap的全局CSS
BootStrap的框架提供了一系列的CSS的样式.这些样式可以直接使用.
布局容器:
.container类用于固定宽度并支持响应式布局的容器
<div class"container">

....

</div>
.container-fluid类用于100%宽度,占据全部视口(viewprot)的容器


栅格系统
Bootstrap 提供了一套响应式、移动设备优先的流式栅格系统,随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列。
它包含了易于使用的预定义类,还有强大的mixin 用于生成更具语义的布局。
使用.row样式定义栅格的行.
定义列:.col-lg-n .col-md-n  .col-sm-n   .col-xs-n

列偏移
使用.col-md-offset-*可以将列偏移到右侧。这些class通过使用*选择器将所有列增加了列的左侧margin。
例如,.col-md-offset-4将.col-md-4向右移动了4个列的宽度。

嵌套列
为了使用内置的栅格将内容嵌套,通过添加一个新的.row和一系列.col-md-*列到已经存在的.col-md-*列内即可实现。
嵌套row所包含的列加起来应该等于12。

列排序;
标题
HTML中的所有标题标签,从<h1> 到 <h6> 均可用。另外还提供了.h1到.h6的类,为了是给内联(inline)属性的文本赋予标题的样式。

对齐
通过文本对齐类,可以简单方法的将文字重新对齐
实例
Left aligned text        Center aligned text        Right aligned text

Justified text
No wrap text.


改变大小写
通过这几个类可以改变文本的大小写
实例
lowercased Text.
UPPERCASED TEXT.
Capitalized Text.

表单
基本实例
单独的表单控件会被自动赋予一些全局样式。所有设置了.form-control的<input>、<textarea>和<select>元素都将被
默认设置为width: 100%;。将label和前面提到的这些控件包裹在.form-group中可以获得最好的排列。


**********************************************************************************************************************

二、MySQL

什么是数据库:数据库就是一个文件系统,通过标准的SQL语句获取数据


MySQL的概述:MySQL是一个关系型数据库管理系统,
由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,
在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。


常见的关系型数据库
        MySQL
        Oracle
        SQLServer
        DB2
        SyBase


MySQL的数据存储方式的概述
服务器的概念
服务器要从硬件和软件两个方面来说:
        硬件:指的就是一台计算机。
        软件:需要在这台电脑上安装数据库服务器。
一台数据库服务器中会创建很多数据库(一个项目,会创建一个数据库)。在数据库中会创建很多张表(一个实体会创建一个表)。在表中会有很多记录(一个对象的实例会添加一条新的记录)。


SQL的概念
结构化查询语言
结构化查询语言(Structured Query Language)简称SQL是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,
用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名


SQL的分类


DDL:数据定义语言
create,drop,alter..
DCL:数据控制语言
grant,if…
DML:数据操纵语言
insert,update,delete…
DQL:数据查询语言
select


SQL对数据库进行操作


创建数据库
create database 数据库名称 [character set字符集 collate 字符集校对规则];
查看数据库
查看数据库服务器中所有的数据库:show databases;
查看某个数据库的定义信息: show create database 数据库名称;
修改数据库
alter database 数据库名称 character set 字符集 collate 校对规则;
删除数据库
drop database 数据库名称;
其他数据库操作
切换数据库:use 数据库名称;
查看当前正在使用的数据库:select databases<>;


SQL对数据库表进行操作
SQL创建表
        语法:
        create table 表名称(字段名称 字段类型(长度) 约束,字段名称 字段类型(长度) 约束…);


        一个实体对应一个表,一个实体属性对应表的一个字段。
***********************************************************************
Java中的类型                                                MySQL中的类型
byte/short/int/long                                         tinyint/smallint/int/bigint
float                                                                        float
double                                                                double
boolean                                                                bit
char/String                                                        char和varchar类型
                                                                        char和varchar的区别:
                                                                        * char代表是固定长度的字符或字符串。
                                                                                * 定义类型char(8),向这个字段存入字符串hello,那么数据库使用三个空格将其补全。
                                                                        * varchar代表的是可变长度的字符串。
                                                                                * 定义类型varchar(8), 向这个字段存入字符串hello,那么存入到数据库的就是hello。
Date                                                                date/time/datetime/timestamp
                                                                        datetime和timestamp区别
                                                                        * datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入到数据库中
                                                                        * timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的系统时间存入到数据库中。
File                                                                        BLOB/TEXT
************************************************************************
        约束
        约束作用:保证数据的完整性
        单表约束分类:
        主键约束:primary key 主键约束默认就是唯一 非空的
        唯一约束:unique
        非空约束:not null
        建表语句:
create database web_test1;
use web_test1;
create table user(
        id int primary key auto_increment,
        username varchar(20) unique,
        password varchar(20) not null,
        age int,
        birthday date
);


SQL查看表
        查看某个数据库下的所有的表
        语法:show tables;


        查看某个表的结构信息
        语法:desc 表名;


SQL删除表
        删除表
        语法:drop table 表名;


SQL修改表
        修改表:添加列
        alter table 表名 add 列名 类型(长度) 约束;


        修改表:修改列类型,长度和约束
        alter table 表名 modify 列名 类型(长度) 约束;
        alter table 表名 drop 列名;


        修改表:修改列名称
        alter table 表名 change 旧列名 新列名 类型(长度) 约束;


        修改表:修改表名
        rename table 表名 to 新的表名;


        修改表:修改表的字符集
        alter table 表名 character set 字符集;


SQL对数据库表的记录进行操作(重点)


SQL添加表的记录
        语法:
        向表中插入某些列:insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…)
        向表中插入所有列:insert into 表名 values (值1,值2,值3…);
        注意事项
        1.值的类型与数据库中表列的类型一致。
        2.值的顺序与数据库中表列的顺序一致。
        3.值的最大长度不能超过列设置最大长度。
        4.值的类型是字符串或者是日期类型,使用单引号引起来。


添加记录
        添加某几列
        insert into user (id,username,password) values (null,'aaa','123');
        添加所有列
        insert into user values (null,'bbb','123',23,'1993-09-01');
        添加中文记录
        insert into user values (null,'张三','123',23,'1993-09-01');
        {
        直接向数据库中插入中文记录会出现错误!!!
        解决方法:
        show variables like '%character%';  --查看数据库中与字符集相关参数:
        需要将MySQL数据库服务器中的客户端部分的字符集改为gbk。
        找到MySQL的安装路径:my.ini文件,修改文件中[client]下的字符集
        }
完成后重新启动MySQL的服务器
services.msc


SQL修改表的记录
        语法:
        update 表名 set 列名=值,列名=值 [where 条件];
        注意事项
        1.值的类型与列的类型一致。
        2.值的最大长度不能超过列设置的最大长度。
        3.字符串类型和日期类型添加单引号。


        修改某一列的所有值
        update user set password = 'abc';
        按条件修改数据
        update user set password = 'xyz' where username = 'bbb';
        按条件修改多个列
        update user set password='123',age=34 where username='aaa';       
       
SQL删除表的记录
        注意事项
        1.删除表的记录,指的是删除表中的一行记录。
        2.删除如果没有条件,默认是删除表中的所有记录。


        删除某一条记录
        delete from user where id = 2;
        删除表中的所有记录
    delete from user;
        删除表中的记录有两种做法:
        delete from user;
        删除所有记录,属于DML语句,一条记录一条记录删除。事务可以作用在DML语句上的
        truncate table user;
        删除所有记录,属于DDL语句,将表删除,然后重新创建一个结构一样的表。事务不能控制DDL的
       
SQL查看表的记录(重点)
        基本查询
        语法:select [distinct] *|列名 from 表 [条件];


        查询所有学生考试成绩信息
        select * from exam;
        查询所有学生的姓名和英语成绩
        select name,english from exam;
        查询英语成绩信息(不显示重复的值)
    select distinct english from exam;
        查看学生姓名和学生的总成绩
        select name,english+chinese+math from exam;
        别名查询
        select name,english+chinese+math as sum from exam;
       
        条件查询
        使用where子句
        > , < , >= , <= , <> ,=
        like:模糊查询
        in:范围查询
        条件关联:and , or ,not
        select * from exam where name = '李四';
        查询名称叫李四学生并且英文大于90分
        select * from exam where name = '李四' and english > 90;
       
        查询姓李的学生的信息
        like可以进行模糊查询,在like子句中可以使用_或者%作为占位符。_只能代表一个字符,而%可以代表任意个字符。
        * like ‘李_’                :名字中必须是两个字,而且是姓李的。
        * like ‘李%’                :名字中姓李的学生,李子后可以是1个或任意个字符。
        * like ‘%四’                :名字中以四结尾的。
        * like ‘%王%’        :只要名称中包含这个字就可以。


        select * from exam where name like '李%';
       
        查询英语成绩是69,75,89学生的信息
        select * from exam where english in (69,75,89);
       
        排序查询
        使用order by 字段名称 asc/desc;
        查询学生信息,并且按照语文成绩进行排序:
        select * from exam order by chinese;
        查询学生信息,并且按照语文成绩倒序排序:
        select * from exam order by chinese desc;
        查询学生信息,先按照语文成绩进行倒序排序,如果成绩相同再按照英语成绩升序排序
        select * from exam order by chinese desc,english asc;
        查询姓李的学生的信息,按照英语成绩降序排序
        select * from exam where name like '李%' order by english desc;
       
        分组统计查询
        聚合函数使用
        sum();
        获取所有学生的英语成绩的总和:
        select sum(english) from exam;
       
        获取所有学生的英语成绩和数学成绩总和:
        select sum(english),sum(math) from exam;
       
        查询姓李的学生的英语成绩的总和
        select sum(english) from exam where name like '李%';
       
        查询所有学生各科的总成绩:
        select sum(english)+sum(chinese)+sum(math) from exam;
       
        select sum(english+chinese+math) from exam;
        与上面的语句有什么不同?
        上面的语句是按照列的方式统计,英语成绩总和+语文成绩总和+数学成绩总和。
        下面的语句先计算英语+数学+语文然后再求和。
        使用ifnull的函数
       
        count();
        获得学生的总数
        select count(*) from exam;
        获得姓李的学生的个数
        select count(*) from exam where name like '李%';
        max();
        获得数学成绩的最高分:
        select max(math) from exam;
        min();
        获得语文成绩的最小值
        select min(chinese) from exam;
        avg();
        获取语文成绩的平均值
        select avg(chinese) from exam;
       
        分组查询
        语法:使用group by 字段名称;
        按商品名称统计,每类商品所购买的个数:
        select product,count(*) from orderitem group by product;
        按商品名称统计,每类商品所花费的总金额:
        select product,sum(price) from orderitem group by product
        按商品名称统计,统计每类商品花费的总金额在5000元以上的商品
        where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字having
        select product,sum(price) from orderitem  group by product having sum(price) > 5000;
        按商品名称统计,统计每类商品花费的总金额在5000元以上的商品,并且按照总金额升序排序
        select product,sum(price) from orderitem  group by product having sum(price) > 5000 order by sum(price) asc;
       
        总结
        S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);


连接查询
        交叉连接:cross join
        交叉连接:查询到的是两个表的笛卡尔积。
        语法:
        select * from 表1 cross join 表2;
        select * from 表1,表2;
        内连接:inner join(inner是可以省略的)
        显示内连接:在SQL中显示的调用inner join关键字
        语法:select * from 表1 inner join 表2 on 关联条件;
        隐式内连接:在SQL中没有调用inner join关键字
        语法:select * from 表1,表2 where 关联条件;
        外连接:outer join(outer可以省略的)
        左外连接:
        语法:select * from 表1 left outer join 表2 on 关联条件;
        右外连接
        语法:select * from 表1 right outer join 表2 on 关联条件;


子查询
        子查询:一个查询语句条件需要依赖另一个查询语句的结果。


foreign 外国的,外交的,不相关的
reference 参考 参照 涉及 介绍信 证明书 引用
alter table tablename add foreign key(外键) reference tablename (参照)


alter table tablename add foreign key() reference  rtablename();

************************************************************************
JDBC
JDBC(Java Date Base Connectivity.java数据库连接)是一种用于执行SQL语句的javaAPI.可以为多种数据库提供统一的访问,它由一种用Java语言编写的类和接口的组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用的程序,同时,JDBC也是个商标名。


什么是数据库驱动


        驱动:两个设备(应用)之间通信的桥梁。




JDBC的环境准备


        1、创建数据库和表


        2、创建项目,引入jar包
        建一个lib文件将mysql-connector-java-5.0.8-bin.jar粘贴如此
       
       
JDBC的代码实现
       
        JDBC的开发步骤
                第一步:加载驱动
                第二步:获得连接
                第三步:基本操作
                第四步:释放资源

DBC的API详解之DriverManager


        DriverManager:驱动管理类
        管理一组 JDBC 驱动程序的基本服务
       
        作用一:注册驱动
        static void registerDriver(Driver driver)
    向 DriverManager 注册给定驱动程序
        这个方法可以完成驱动的注册,但是实际开发中一般不会使用这个方法完成驱动的注册!!!
        原因:
         如果需要注册驱动,就会使用DriverManager.registerDriver(new Driver());,但是查看源代码发现,在代码中有一段静态代码块,静态代码块已经调用了注册驱动的方法。
                 
                如果再手动调用该方法注册驱动,就会导致驱动被注册两次。实际开发中一般会采用:
                                class.forName("com.mysql.jabc.Driver");
                               
                               
        作用二:获得连接


        static Connection getConnection(String url, String user,String password)  
    试图建立到给定数据库 URL 的连接。
        这个方法就是用来获得与数据库连接的方法:这个方法中有三个参数:
        url:与数据库连接的路径
        user:与数据库连接的用户名
        password:与数据库连接的密码


        主要关注的是url的写法:
        jdbc:mysql://localhost:3306/web_test3
        jdbc:连接数据库的协议
        mysql:是jdbc的子协议
       localhost:连接的MySQL数据库服务器的主机地址。(连接是本机就可以写成localhost),如果连接不是本机的,就需要写上连接主机的IP地址。   
        3306:MySQL数据库服务器的端口号
        web_test3:数据库名称
        jdbc:mysql:///web_test3


JDBC的API详解之Connection


Connection:与数据库连接对象


作用一:创建执行SQL语句的对象


执行SQL语句对象:
        Statement                        :执行SQL
        CallableStatement                :执行数据库中存储过程
        PreparedStatement                :执行SQL.对SQL进行预处理。解决SQL注入漏洞


作用二:管理事务


        void setAutoCommit(boolean autoCommit)
    将此连接的自动提交模式设置为给定状态。


         void commit()
     使所有上一次提交/回滚后进行的更改成为持久更改,并释放此Connection 对象当前持有的所有数据库锁。         


         void rollback()
     取消在当前事务中进行的所有更改,并释放此 Connection 对象当前持有的所有数据库锁。


JDBC的API详解之Statement
        Statement:执行SQL
       
        作用一:执行SQL
        执行SQL的方法
                boolean execute(String sql);
                执行查询,修改,添加,删除的SQL语句。
                ResultSet executeQuery(String sql);
                执行查询(执行select语句)。
                int executeUpate(String sql);
                执行修改,添加,删除的SQL语句。


        作用二:执行批处理
        void addBatch(String sql)
     将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。


        void clearBatch()
    清空此 Statement 对象的当前 SQL 命令列表。


         int[] executeBatch()
     将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
         


JDBC的API详解之ResultSet


ResultSet:结果集---通过select语句的查询结果。


结果集的遍历  利用next的方法
        boolean next()
        将光标从当前位置向前移一行
       


结果集的获取


int getInt(int columnIndex)
          以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。
                  
int getInt(String columnLabel)
          以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值。


long getLong(int columnIndex)
          以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。


long getLong(String columnLabel)
          以 Java 编程语言中 long 的形式获取此 ResultSet 对象的当前行中指定列的值。


String getString(int columnIndex)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。
                  
String getString(String columnLabel)
          以 Java 编程语言中 String 的形式获取此 ResultSet 对象的当前行中指定列的值。


结果集获取可以使用结果集中的:
getXXX();方法通常都会有一个重载的方法。
        getXXX(int columnIndex);
        getXXX(String columnName);

*************************************************************
JDBC的资源释放
JDBC程序执行结束后,将与数据库进行交互的对象释放掉,
通常是ResultSet,Statement,Connection。


注意Connection对象的释放
这几个对象中尤其是Connection对象是非常稀有的。
这个对象一定要做到尽量晚创建,尽早释放掉。          
       
        将资源释放的代码写入到finally的代码块中。
        资源释放的代码应该写的标准:


        if(rs !=null){
                        try {
                                rs.close();
                        } catch (SQLException e) {
                                e.printStackTrace();
                        }
                       
                        rs = null;
                }
               
                if(statement !=null){
                        try {
                                statement.close();
                        } catch (SQLException e) {
                                e.printStackTrace();
                        }
                       
                        statement = null;
                }
               
               
                if(conn !=null){
                        try {
                                conn.close();
                        } catch (SQLException e) {
                                e.printStackTrace();
                        }
                         conn = null;
                }

********************************************************       
@Test
        /**
         * 保存操作的代码实现
         */
        public void demo1(){
                Connection conn = null;
                Statement stmt = null;
                try{
                        // 注册驱动:
                        Class.forName("com.mysql.jdbc.Driver");
                        // 获得连接:
                        conn = DriverManager.getConnection("jdbc:mysql:///web_test3", "root", "abc");
                        // 执行操作:
                        // 创建执行SQL语句对象:
                        stmt = conn.createStatement();
                        // 编写SQL语句:
                        String sql = "insert into user values (null,'eee','123','阿黄',21)";
                        // 执行SQL语句:
                        int num = stmt.executeUpdate(sql);
                        if(num > 0){
                                System.out.println("保存用户成功!!!");
                        }
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        // 资源释放:
                        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的工具类的抽取       
因为传统JDBC的开发,注册驱动,获得连接,释放资源这些代码都是重复编写
的。所以可以将重复的代码提取到一个类中来完成。


/**
* JDBC的工具类
* @author jt
*
*/
public class JDBCUtils {
        private static final String driverClassName;
        private static final String url;
        private static final String username;
        private static final String password;
       
        static{
                driverClassName="com.mysql.jdbc.Driver";
                url="jdbc:mysql:///web_test3";
                username="root";
                password="abc";
        }


        /**
         * 注册驱动的方法
         */
        public static void loadDriver(){
                try {
                        Class.forName(driverClassName);
                } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                }
        }
       
        /**
         * 获得连接的方法
         */
        public static Connection getConnection(){
                Connection conn = null;
                try{
                        // 将驱动一并注册:
                        loadDriver();
                        // 获得连接
                        conn = DriverManager.getConnection(url,username, password);
                }catch(Exception e){
                        e.printStackTrace();
                }
                return conn;
        }
       
        /**
         * 释放资源的方法
         */
        public static void release(Statement stmt,Connection conn){
                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;
                }
        }
       
        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;
                }
        }
}
1.1.2        测试工具类
        @Test
        /**
         * 查询操作:使用工具类
         */
        public void demo1(){
                Connection conn = null;
                Statement stmt = null;
                ResultSet rs = null;
                try{
                        // 获得连接:
                        conn = JDBCUtils.getConnection();
                        // 创建执行SQL语句的对象:
                        stmt = conn.createStatement();
                        // 编写SQL:
                        String sql = "select * from user";
                        // 执行查询:
                        rs = stmt.executeQuery(sql);
                        // 遍历结果集:
                        while(rs.next()){
                                System.out.println(rs.getInt("id")+" "+rs.getString("username")+" "+rs.getString("password"));
                        }
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        // 释放资源:
                        JDBCUtils.release(rs, stmt, conn);
                }
        }

JDBC的配置信息提取到配置文件


配置文件
        属性文件
        格式:扩展名是.properties
        内容:key=value
        XML文件


提取信息到配置文件
        定义一个配置文件
       
在工具类中解析属性文件
        获取到具体内容为常量赋值
static{
        //获取属性文件中的内容
        Properties properties=new Properties();
        try {
                properties.load(new FileInputStream("src/db.properties"));
       
        }catch(FileNotFoundException e){
                e.printStackTrace();
       
        }catch(IOException e){
                e.printStackTrace();
        }
        diverClassName=Properties.getProperty("driverClassName");
        url=properties.getProperty("url");
        username=properties.getProperty("username");
        password=properties.getProperty("password");


}



*********************************************************************
JDBC的CRUD操作之PreparedStatement的保存操作
        @Test
        /**
         * 保存操作
         */
        public void demo1(){
                Connection conn = null;
                PreparedStatement pstmt = null;
                try{
                        // 获得连接:
                        conn = JDBCUtils.getConnection();
                        // 编写SQL语句:
                        String sql = "insert into user values (null,?,?,?,?)";
                        // 预编译SQL:
                        pstmt = conn.prepareStatement(sql);
                        // 设置参数:
                        pstmt.setString(1, "eee");
                        pstmt.setString(2, "abc");
                        pstmt.setString(3, "旺财");
                        pstmt.setInt(4, 32);
                        // 执行SQL
                        int num = pstmt.executeUpdate();
                        if(num > 0){
                                System.out.println("保存成功!");
                        }
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        JDBCUtils.release(pstmt, conn);
                }
        }
*********************************************************************
JDBC的CRUD操作之PreparedStatement的修改操作


        @Test
        /**
         * 修改操作
         */
        public void demo2(){
                Connection conn = null;
                PreparedStatement pstmt = null;
                try{
                        // 获得连接:
                        conn = JDBCUtils.getConnection();
                        // 编写SQL语句:
                        String sql = "update user set username = ?,password =?,nickname=?,age = ? where id = ?";
                        // 预编译SQL:
                        pstmt = conn.prepareStatement(sql);
                        // 设置参数:
                        pstmt.setString(1, "abc");
                        pstmt.setString(2, "1234");
                        pstmt.setString(3, "旺旺");
                        pstmt.setInt(4, 23);
                        pstmt.setInt(5, 6);
                        // 执行SQL:
                        int num = pstmt.executeUpdate();
                        if(num > 0){
                                System.out.println("修改成功!");
                        }
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        JDBCUtils.release(pstmt, conn);
                }
        }


*********************************************************************
JDBC的CRUD操作之PreparedStatement的查询操作
        @Test
        /**
         * 查询操作
         */
        public void demo4(){
                Connection conn = null;
                PreparedStatement pstmt = null;
                ResultSet rs = null;
                try{
                        // 获得连接:
                        conn = JDBCUtils.getConnection();
                        // 编写SQL:
                        String sql = "select * from user";
                        // 预编译SQL:
                        pstmt = conn.prepareStatement(sql);
                        // 设置参数:
                        // 执行SQL:
                        rs = pstmt.executeQuery();
                        // 遍历结果集:
                        while(rs.next()){
                                System.out.println(rs.getInt("id")+" "+rs.getString("username")+" "+rs.getString("password")+" "+rs.getString("nickname"));
                        }
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        JDBCUtils.release(rs, pstmt, conn);
                }
        }


********************************************************************
JDBC的批处理操作
什么是批处理
之前进行JDBC的操作的时候,都是一条SQL语句执行。现在如果使用批处理,
可以将一批SQL一起执行。


批处理基本使用


        @Test
        /**
         * 批处理基本操作
         */
        public void demo1(){
                Connection conn = null;
                Statement stmt = null;
                try{
                        // 获得连接:
                        conn = JDBCUtils.getConnection();
                        // 创建执行批处理对象:
                        stmt = conn.createStatement();
                        // 编写一批SQL语句:
                        String sql1 = "create database test1";
                        String sql2 = "use test1";
                        String sql3 = "create table user(id int primary key auto_increment,name varchar(20))";
                        String sql4 = "insert into user values (null,'aaa')";
                        String sql5 = "insert into user values (null,'bbb')";
                        String sql6 = "insert into user values (null,'ccc')";
                        String sql7 = "update user set name = 'mmm' where id = 2";
                        String sql8 = "delete from user where id = 1";
                        // 添加到批处理
                        stmt.addBatch(sql1);
                        stmt.addBatch(sql2);
                        stmt.addBatch(sql3);
                        stmt.addBatch(sql4);
                        stmt.addBatch(sql5);
                        stmt.addBatch(sql6);
                        stmt.addBatch(sql7);
                        stmt.addBatch(sql8);
                        // 执行批处理:
                        stmt.executeBatch();
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        JDBCUtils.release(stmt, conn);
                }
        }


批量插入(使用PreparedStatement)


        @Test
        /**
         * 批量插入记录:
         * * 默认情况下MySQL批处理没有开启的,需要在url后面拼接一个参数即可。
         */
        public void demo2(){
                // 记录开始时间:
                long begin = System.currentTimeMillis();
                Connection conn = null;
                PreparedStatement pstmt = null;
                try{
                        // 获得连接:
                        conn = JDBCUtils.getConnection();
                        // 编写SQL语句:
                        String sql = "insert into user values (null,?)";
                        // 预编译SQL:
                        pstmt = conn.prepareStatement(sql);
                        for(int i=1;i<=10000;i++){
                                pstmt.setString(1, "name"+i);
                                // 添加到批处理
                                pstmt.addBatch();
                                // 注意问题:
                                // 执行批处理
                                if(i % 1000 == 0){
                                        // 执行批处理:
                                        pstmt.executeBatch();
                                        // 清空批处理:
                                        pstmt.clearBatch();
                                }
                        }
                }catch(Exception e){
                        e.printStackTrace();
                }finally{
                        JDBCUtils.release(pstmt, conn);
                }
                long end = System.currentTimeMillis();
                System.out.println((end-begin));
        }

               
               

       






0 个回复

您需要登录后才可以回帖 登录 | 加入黑马