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

时间: 2023-12-16 admin IT培训

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

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

1、File类

1.1、File类概述和构造方法

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

  • 文件和路径是可以通过File封装为对象的

    以下是三种实现的方法,一般来说,用第一种就可以
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类创建功能


public class FileDemo02 {public static void main(String[] args) throws IOException {//需求1:createNewFile()   我要在E:\2\test目录下创建一个文件java.txtFile file1 = new File("E:\\2\\test\\java.txt");System.out.println(file1.createNewFile());//需求2:mkdir()   我要在E:\2\test目录下创建一个目录JavasEFile file2 = new File("E:\\2\\test\\javaSE");System.out.println(file2.mkdir());//需求3:mkdirs()   我要在E:\2\test目录下创建一个多级目录JavasE\fileTestFile file3 = new File("E:\\2\\test\\javaSE\\fileTest");System.out.println(file3.mkdirs());}
}

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


1.4、递归


计算阶层

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控制事务

  • 方法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);}
}

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.获取DataSourceds = 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 {@Testpublic 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);}}
}

3.3.3 、练习二 DQL

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

 	/*** 查询数据库中的记录条数*/@Testpublic 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 总结

4、HTML

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

4.2、B/S架构详解

4.3、HTML入门

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="/" target="_blank">点我</a><!--在本页内打开--><a href="/" target="_self">点我</a><a href="./111.html" target="_self">列表标签</a><a href="/"><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>

  • ** < 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 : 指定行数