本周学习了JDBC,以及与JDBC相关的知识,Druid连接池,Apache的DBUtils工具,并熟识了HTML的一些基本标签。
JDBC
- JDBC核心开发步骤
- 注册驱动
Class.forName("com.mysql.jdbc.Driver");
- 连接数据库
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8","root","****");
- 获取发送SQL的对象
Statement statement = connection.createStatement();
- 执行SQL语句
int result = statement.executeUpdate("SQL语句");
- 处理结果
if(result > 0){
System.out.println("执行成功");
}
- 释放资源
statement.close();
connection.close();
- ResultSet结果集:在执行查询SQL后,存放查询到的结果集数据
- 接受结果集:
ResultSet rs = statement.executeQuery(sql)
- 遍历数据的方法
int getInt(int columnIndex) throws SQLException;//获得当前行的第N列的int值
int getInt(String columnLabel) throws SQLException;//获得当前行columnLabel列的int值
- SQL注入问题:当用户输入的数据中有SQL关键字或语法时,并且参与了SQL语句的编译,导致SQL语句编译后条件结果为true,一直得到正确的结果。
- PreparedStatement:PreparedStatement接口继承了Statement接口。执行SQL语句的方法没有区别!
- 作用:
- 1.预编译SQL语句,效率高!
- 2.安全,避免SQL注入
- 3.可以动态的填充数据,执行多个同构的SQL语句
- 参数标记:
PreparedStatement pstmt = connection.prepareStatement(sql);
- 动态参数绑定:pstmt.setXxx(下标,值);参数下标是从1开始,为指定占位符下标绑定值
- 封装工具类
- 提供public static Connection getConnection()方法
- 提供public static void closeAll(Connection conn,Statement statement,ResultSet resultSet)
- 跨平台方案
- 定义 private static final Properties properties = new Properties();//配置文件集合
- 在src目录下新建db.properties文件
- ORM实体类
- 通过entity的规则对表中的数据进行对象的封装
- 表名=类名;列名=属性名;提供各个属性的get、set方法
- 提供无参构造方法、(视情况添加有参构造)
- DAO
- 将所有对同一张表的操作都封装在一个XXXDaoImpl对象中。
- 根据增删改查的不同功能,实现具体的方法(insert,update,delete,select,selectAll)
- 对于任何一张表中的数据进行操作时,无非就是增、删、改、查。应将对于一张表的所有操作统一封装在一个数据访问对象中。重用
- 日期类型
- java.util.Date:Java语言常规应用层面的日期类型。可以通过字符串创建对应的时间对象
- java.sql.Date:不可以通过字符串创建对应的时间对象。只能通过毫秒值创建对象(1970年1月1日至今的毫秒值)
- SimpleDateFormat 日期格式化
- 连接池
- 自定义连接池:Java中提供了一个接口DataSource,通过实现该接口,可以创建连接池
- Druid(德鲁伊)
- 创建database.properties 配置文件
- 引入druid-1.1.5.jar
- Service
- 概念:用户要完成的一个业务功能,是由一个或多个的DAO调用组成。
- 软件、程序提供的一个功能都叫业务
- DAO数据访问操作复用
- ThreadLocal
- 线程工具类:在整个线程中,一直到释放资源,用的是同一个Connection连接对象。
- 在整个线程(单条执行路径中)所持有的Map中,存储一个键(threadlocal)值(connection)对
- 线程(Thread)对象中持有一个ThreadLocalMap类型的对象(ThreadLocals),threadLocals中保存了以ThreadLocal对象为Key,set进去的值为Value
- 每个线程均可绑定多个ThreadLocal,一个线程中可存储多个ThreadLocal
- 将业务层的多步事务控制操作,封装在DBUtils工具类里。实现复用
- 封装DML方法
public int commonsUpdate(String sql, Object... args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
try {
connection = DBUtils.getConnection();
preparedStatement = connection.prepareStatement(sql);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
return preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(null, preparedStatement, null);
}
return 0;
}
- 封装DQL方法
public List<T> commonsSelect(String sql, RowMapper<T> rowMapper, Object... args) {
List<T> elements = new ArrayList<T>();
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = DBUtils.getConnection();
preparedStatement = connection.prepareStatement(sql);
if(args !=null){
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
}
resultSet = preparedStatement.executeQuery();
while (resultSet.next()) {
//根据查询到的结果完成ORM,如何进行对象的创建及赋值?
T t = rowMapper.getRow(resultSet);//回调---->调用者提供的一个封装方法ORM
elements.add(t);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(null, preparedStatement, resultSet);
}
return elements;
}
- Apache
- Commons DbUtils 是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能勾简化JDBC应用程序的开发!同时,不会影响程序的性能
- DbUtils是Java编程中数据库操作实用小工具,小巧、简单、实用
- 对于数据表的查询操作,可以把结果转换为List、Array、Set等集合。便于操作
- 对于数据表的DML操作,也变得很简单(只需要写SQL语句);
- DbUtils主要包含:ResultSetHandler接口:转换类型接口、QueryRunner:执行sql语句的类
HTML
- HTML是一门用户创建网页文档的标记语言,网页本身是一种文本文件,在文本文件中添加标记符。
- HTML基本结构
<!-- 文档声明:告诉浏览器使用HTML5版本解析 -->
<!DOCTYPE html>
<html>
<!--网页的头部 -->
<head>
<!--页面的字符集编码 -->
<meta charset="utf-8" />
<!-- 页面的标题 -->
<title>我的页面</title>
</head>
<!-- 网页的主题,显示的部分-->
<body>
展示的内容
</body>
</html>
- HTML基本标签
- 结构标签
<html></html>:根标签
<head></head>:头标签
<title></title>页面的标题
<body></body>:主体标签:显示网页内容
- 排版标签
1、注释标签:<!-- 注释 -->
2、换行标签:<br/>
3、段落标签:<p>文本文字</p>
特点:段落与段落之间有行高(行间距)自带换行
属性:文本对齐方式 align (left、center 、right)
4、水平线标签:<hr/>
属性:
width:水平线的长度(两种:像素表示。第二种:百分比显示)
size:水平线的粗细(避免过粗、太丑、一般给个位数 比如 6px)
color:水平线的颜色
align:水平线的对齐方式(left、center、right)
- 标题标签
<h1>-<h6>数字越小,标题文字越大!默认加粗、默认字号、默认占据一行
- 容器标签
<div></div> : 块级标签,独占一行,自带换行
<span></span> : 行级标签,所有内容都在同一行
作用:<div>主要是结合css做页面分块 布局
<span>:进行友好提示信息的显示
- 列表标签:无序列表(ul)有序列表(ol)定义列表(dl、dt、dd)
- 图片标签
<img /> 独立标签
属性:
src 图片地址
width 图片的宽度
height 图片的高度
border 边框
alt 图片的文字说明 当图片未能正确加载时,才显示
title 鼠标悬停时,显示的文字
- 链接标签:超链接可以是文本,也可以是图片,可以点击链接标签,进入新的文档,或者是当前文档中的某个部分
<a>文本或图片</a>
属性:
href="跳转的地址"跳转外网需要添加协议
target:_self(当前文档)
_blank(新页面,会一直打开新的)
_search 之前打开的页面存在,则不打开新的页面,直接复用
name 充当锚点(顶部、底部)
需要为标签提供name属性,进行赋值
需要点击跳转的标签href属性给 #name
- 表格标签:table、tr、td
- 表格的合并:colspan(列合并)、rowspan(行合并)
- 文本格式化标签
<!--粗体文本-->
<b>今天天气好</b><br />
<!--大号字-->
<big>今天天气好</big><br />
<!--着重文字-->
<em>今天天气好</em><br />
<!--斜体字 物理上把字体倾斜-->
<i>今天天气好</i><br />
<!--小号字-->
<small>今天天气好</small><br />
<!--定义加重语气-->
<strong>今天天气好</strong><br />
<!--下标字-->
CO<sub>2</sub><br />
<!--上标字-->
孙悟空三打白骨精<sup>①</sup><br />
<!--插入字-->
<ins>今天天气好</ins><br />
<!--删除字-->
<del>今天天气好</del>