Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS

1、File类

1.1、File类概述和构造方法

File:是文件和目录路径名的抽象表示

  • 文件和路径是可以通过File封装为对象的
    Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第1张图片
    以下是三种实现的方法,一般来说,用第一种就可以
public class FileDemo01 {
    public static void main(String[] args) {
        //File(String pathname):通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
        File file1 = new File("E:\\2\\1.txt");
        System.out.println(file1);

        //File(String parent,String child):从父路径名字符串和子路径名字符串创建新的File实例。
        File file2 = new File("E:\\2","1.txt");
        System.out.println(file2);

        //File(File parent,string child):从父抽象路径名和子路径名字符串创建新的File实例。
        File file3 = new File("E:\\2");
        File file4 = new File(file3,"1.txt");
        System.out.println(file4);
    }
}
1.2、File类创建功能

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第2张图片
Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第3张图片

public class FileDemo02 {
    public static void main(String[] args) throws IOException {
        //需求1:createNewFile()   我要在E:\2\test目录下创建一个文件java.txt
        File file1 = new File("E:\\2\\test\\java.txt");
        System.out.println(file1.createNewFile());

        //需求2:mkdir()   我要在E:\2\test目录下创建一个目录JavasE
        File file2 = new File("E:\\2\\test\\javaSE");
        System.out.println(file2.mkdir());

        //需求3:mkdirs()   我要在E:\2\test目录下创建一个多级目录JavasE\fileTest
        File file3 = new File("E:\\2\\test\\javaSE\\fileTest");
        System.out.println(file3.mkdirs());

    }
}
1.3、File类的判断和获取、删除

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第4张图片
Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第5张图片

1.4、递归

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第6张图片
计算阶层

public class FileDemo03 {
    public static void main(String[] args) {
        System.out.println("5的阶层是" + fn(5));
    }

    public static int fn(int num) {
        if (num == 1) {
            return 1;
        } else {
            return num * fn(num - 1);
        }
    }
}

用递归遍历文件目录

public class FileDemo03 {
    public static void main(String[] args) {
        File file = new File("E:\\2\\test");
        fn(file);
    }

    public static void fn(File file) {
        File[] files = file.listFiles();
        if(files != null){
            for (File file1:files){
                if (file1.isDirectory()){
                    fn(file1);
                }else {
                    System.out.println(file1.getAbsolutePath());
                }
            }
        }
    }
}

2、JDBC控制事务

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第7张图片

  • 方法executeQuery: 这个方法被用来执行 SELECT 语句,但也只能执行查询语句
  • 方法executeUpdate: 用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE
  • 方法execute: 可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet

3、数据库连接池

3.1、概念:其实就是一个容器(集合),存放数据库连接的容器

当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。

  • 好处
    (1)、节约资源
    (2)、用户访问高效
    在这里插入图片描述
3.2、Druid数据库连接池
3.2.1、步骤
  • 1、导入jar包 druid-1.0.9.jar
  • 2、定义配置文件:
    * 是properties形式的
    * 可以叫任意名字,可以放在任意目录下
  • 3、获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
  • 4、获取连接:getConnection
public class DruidTest {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();
        InputStream is = DruidTest.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);
        Connection conn = ds.getConnection();
        System.out.println(conn);
    }
}

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第8张图片

3.2.2、Druid连接池的工具类

工具类代码

/**
 * Druid连接池的工具类
 */
public class JDBCUtils {

    /**
     * 1.定义成员变量 DataSource
     */
    private static DataSource ds ;

    static{
        try {
            //1.加载配置文件
            Properties pro = new Properties();
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //2.获取DataSource
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取连接
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    /**
     * 释放资源
     */
    public static void close(Statement stmt,Connection conn){
        close(null,stmt,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();
            }
        }
    }

    /**
     * 获取连接池方法
     */

    public static DataSource getDataSource(){
        return  ds;
    }

}

测试使用Druid工具类的效果,还是使用prepareStatement防止sql注入

public class DruidTest02 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt = null;

        //1、给user 添加一条记录
        try {
            conn = JDBCUtils.getConnection();
            String sql = "INSERT INTO user VALUES(null,?,?);";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,"test");
            pstmt.setString(2,"123456");
            int i = pstmt.executeUpdate();
            System.out.println(i);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(pstmt,conn);
        }

    }
}
3.3、Spring JDBC

Spring框架对JDBC的简单封装。提供了一个JDBCTemplate对象简化JDBC的开发
步骤:

  • 1、导入jar包
  • 2、创建jdbcTemplate对象,
    jdbcTemplate template = new JdbcTemplate(ds);
  • 3、调用jdbcTemplate的方法来完成CRUD的操作
    update():执行DML语句。增、删、改语句
    queryForMap():查询结果将结果集封装为map集合
    queryForList():查询结果将结果集封装为list集合
    query():查询结果,将结果封装为JavaBean对象
    queryForObject:查询结果,将结果封装为对象
3.3.1 、JDBCTemplate入门

执行的代码

public class JDBCTemplateDemo01 {
    public static void main(String[] args) {
        //1、导入jar包
        //2、创建JDBCTemplate对象
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        //3、调用方法
        String sql = "update user set password = ? where id = ?";
        int update = template.update(sql, "12321",6);
        System.out.println(update);
    }
}

输出结果为1
3.3.2 、练习一 DQL

查询数据库表中的user 表,将其封装为Emp对象的List集合

//查询数据表user中的所有信息
public class JDBCDemo02 {
    
    @Test
    public void test01() {
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "select * from user";
        List<User> query = template.query(sql, new BeanPropertyRowMapper<User>(User.class));
        for (User user : query) {
            System.out.println(user);
        }
    }
}

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第9张图片

3.3.3 、练习二 DQL

查询数据库里面的记录数量

 	/**
     * 查询数据库中的记录条数
     */
    @Test
    public void test02() {
        JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "select count(id) from user";
        Long total = template.queryForObject(sql, Long.class);
        System.out.println(total);
    }
3.3.4 总结

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第10张图片

4、HTML

4.1、软件架构 B/S、C/S

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第11张图片

4.2、B/S架构详解

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第12张图片

4.3、HTML入门

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第13张图片

4.4、基本标签
4.4.1、文件标签
  • html:html文档的根标签
  • head:头标签,用于指定html文档的一些属性。引入外部的资源
  • title:标题标签
  • body:体标签
  • <!DOCTYPE html>:html5中定义该文档是html文档
4.4.2、文本标签
  • < br > :换行
  • < h1 > ~ < h6 > :标题大小
  • < p > : 段落标签
  • < hr > : 一条水平线,其中的属性(color:颜色,width:宽度,size:高度,align:对齐方式)
  • < > : 一条水平线
  • < hr > : 一条水平线
  • < b >:加粗
  • < i >:斜体
  • < center >:文本居中
  • 属性定义
    * color : rgb(值1,值2,值3): 0~255 推荐使用 #值1#值2#值3 如#FF00FF
    * width: (1)、数值 width = ‘20’,默认是px(像素) (2)、数值%,相对于父元素的比例
    *
4.4.3、图片标签

< img > : 展示图片

  • 属性:src :指定图片的位置
  • 路径的写法:
    (1)、一般用相对路径,以 .开头的理解
  • 相对路径
    (1)、./ :代表当前目录 ./image/1.png 如果在同一级目录下的话,./可以省略
    (2)、…/ :代表上一级的目录

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <!--展示一张图片-->
    <img src="image/avi.png" align="right" alt="古镇 " width="623" height="622"/>

<!--
    相对路径:
        * 以.开头的路径
        * ./:代表当前目录     ./image/1.png   如果在同一级目录下的话,./可以省略
          ../:代表上一级的目录
    -->
    <img src="../image/avi.png" align="left"  alt="用上一级目录显示的图片"/>

</body>
</html>
4.4.4、列表标签
  • 有序列表
    (1)、ol : (order list) type可以显示展示的样式 type = “A” ,从A开始排序 start :从第几个开始排序
    (2)、li : 每一个列
  • 无序列表
    (1)、ul : type 也可以显示表示的样式 ,样式建议用css样式控制
    (2)、li : 每一个列
4.4.5、连接标签

< a > :超链接 href
< target >: _blank 在新的选项卡展示页面;_self在本页内打开;规定在何处打开目标 URL。仅在 href 属性存在时使用。

    <!--新打开一个选项卡-->
    <a href="https://www.baidu.com/" target="_blank">点我</a>
    <!--在本页内打开-->
    <a href="https://www.baidu.com/" target="_self">点我</a>
    
    <a href="./111.html" target="_self">列表标签</a>

	<a href="https://www.baidu.com/">
        <img src="../image/avi.png" alt="图片test" align="left">
    </a>
4.4.6、块标签(div标签和span标签)结合CSS

结合css进行操作的

  • div : 每一个div占满一整行。块级标签
  • span : 文本信息在一行展示,行内标签 内联标签
	<span>12313</span>
    <span>12311231</span>
    <hr>
    <div>1312312</div>
    <div>131412</div>
4.4.7、语义化标签 结合CSS

html 5中为了提高程序的可读性,提供了一些标签。

  • < header >
  • < footer >
4.4.8、表格标签
  • table :定义表格
    width:宽度
    border:边框
    cellpadding:定义内容和单元格的距离
    cellspacing:定义单元格之间的距离。如果指定为0,则单元格的线会合为一条
    bgcolor:背景色
    align:对齐方式
  • tr :英文全称是"table row"的缩写答,中文含义"表行"
  • td :英文全称是"table data cell",中文含义知:"定义单元格 ".
  • th :英文全称是"table header cell"的缩写,中文含义"表头单元格"
    rowspan :占2行
    colspan:占2列
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1" width="50%" align="center" cellpadding="0" cellspacing="0" bgcolor="#faebd7">
        <tr >
            <!--占2行-->
            <th rowspan="2">编号</th>
            <th>姓名</th>
            <th>成绩</th>
        </tr>

        <tr align="center">
            <td>1</td>
            <td>hws</td>
            <td>100</td>
        </tr>

        <tr align="center">
            <td>2</td>
            <!--占2列-->
            <td colspan="2">hhh</td>
            <td>90</td>
        </tr>
    </table>
</body>
</html>

Java回顾(十二) File类、Druid连接池、JDBCTemplate(Spring JDBC)、HTML和CSS_第14张图片

  • ** < caption > ** : 表格标题
  • ** < thead > ** : 表示表格的头部分
  • ** < tbody > ** : 表示表格的提部分
  • ** < tfoot > ** : 表示表格的脚部分
4.4.9、表单标签

使用的标签:form
form:用于定义表单的。可以定义一个范围,范围代表采集用户数据的范围
* 属性:
* action:指定提交数据的url
* method:提交数据的方式 比较常用 get 或者 post
* 表单中的数据想要被提交,必须指定其name属性

  • 请求的方式 get : (1)请求参数会在地址栏中显示,会封装在请求行中(http协议) (2)请求长度有限制 (3)get请求不安全
  • 请求的方式 post :(1)请求参数不会在地址栏中显示,会封装在请求体中(http协议) (2)请求长度没有限制 (3)post请求较为安全

实现的代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="#" method="get">
        用户名:<input name="username"> <br>
        密码:<input name="password"><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>
4.4.10、input
  • input : 可以通过type属性值,改变元素展示的样式
    type属性:
    text : 文本输入框,默认值
    1、 placeholder可描述输入input 字段预期值的简短的提示信息
    password : 密码输入框
    radio :单选框
    1、要想让多个单选框实现单选的效果,则多个单选框的name属性值必须一样。
    2、一般会给每一个单选框提供value属性,指定其被选中后提交的值
    3、checked属性,可以指定默认值
    checkbox : 多选框
    1、一般会给每一个单选框提供value属性,指定其被选中后提交的值
    2、checked属性,可以指定默认值
    file : 文件选择框
    hiddle : 文件
    按钮 :
    1、普通的按钮 button,与js一起使用
    2、submit 按钮
    3、图片的按钮,用src < input type=“image” src="…/image/avi.png">
    日期
    1、date 传值的是 birthday=2020-05-06
    2、datetime-local 传值的是 birthday=2020-05-01T12%3A03

     **label : 指定输入项的描述信息**
     	注意:
     		label的for属性一般和input的id值相对应,如果对应了,则点击label区域,会让input输入框获取焦点。
    

实现的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="#" method="get">
        <label for="username">用户名:</label>
        <input type="text" name="username" id="username" placeholder="请输入用户名"><br>

        <label for="password">密码:</label>
        <input type="password" name="password" id="password" placeholder="请输入用户名"><br>

        <label>性别:</label>
        <input type="radio" name="gender" value="male" checked="checked"><input type="radio" name="gender" value="female"><br>

        <label>爱好:</label>
        <input type="checkbox" name="hobbies" value="shopping">购物
        <input type="checkbox" name="hobbies" value="java">java
        <input type="checkbox" name="hobbies" value="game">游戏<br>

        <input type="file" name="file"><br>

        <input type="hidden" name="id" value="11"><br>

        <label>生日</label>
        <input type="datetime-local" name="birthday">

        <label>邮箱</label>
        <input type="email" name="email">

        <input type="submit" value="提交">
    </form>
</body>
</html>
4.4.11、select 创建下拉列表

option是指定的列表项,selected是默认选中的

	<label>省份</label>
        <label>
            <select name="province" >
                <option value=" ">--请选择省份--</option>
                <option value="1" selected>浙江省</option>
                <option value="2">上海市</option>
                <option value="3">河南省</option>
            </select>
        </label><br>
4.4.12、textarea 文本域

cols : 指定列数,每一行有多少个字符
rows : 指定行数

你可能感兴趣的:(java,java,html,css)