ResultSetMetaData
- 作用:获取数据结果集的相关数据
- 使用方法:rs.getMetaData().
- 通过获取结果集元数据,可以获得列名称,列数量,列数据类型等
- 使用例子
try {
conn = DBUtil.getConnection();
String sql ="select * from emp";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql);
//结果集元数据
ResultSetMetaData meta = rs.getMetaData();
int n = meta.getColumnCount();
String str = meta.getColumnName(1);
String str2 = meta.getColumnName(2);
String str3 = meta.getColumnName(3);
System.out.println(n+","+str+","+str2+","+str3);
for(int i=1;i<=n;i++) {
System.out.println(meta.getColumnName(i));
}
}catch(Exception e) {
e.printStackTrace();
}finally {
DBUtil.Close(conn);
}
事务(Transaction)
- 事务的特性(ACID)
- 原子性:事务必须是独立的工作单位,对于其数据的修改,要么都执行,要么都不执行
- 一致性:事务在完成时,必须保持一致
- 隔离性:事务所做的修改必须与任何其他事务隔离
- 持久性:对系统的影响是永久的 - 事务是数据库的概念,JDBC支持事务,本质还是在数据库中实现的
- 数据库提供了事务控制功能,支持ACID特性,JDBC提供了API方便调用数据库的事务功能
- DDL语句不支持事务
- 相关API
Connection.getAutoCommit() :获得当前事务的提交方式
Connection.setAutoCommit():设置事务的提交属性(true或者false),默认为true自动提交
Connection.commit():提交事务
Connection.rollback():回滚事务 - 使用例子:
String sql1 = "update account set balance=balance+? where id = ?";
String sql2 = "select balance from account where id = ?";
Connection conn = null;
try {
conn = DBUtil.getConnection();
conn.setAutoCommit(false);
PreparedStatement ps = conn.prepareStatement(sql1);
//减钱
ps.setDouble(1, -money);
ps.setInt(2, from);
int n = ps.executeUpdate();
if(n!=1) {
throw new Exception("扣错了");
}
//增加
ps.setDouble(1,money);
ps.setInt(2, to);
n= ps.executeUpdate();
if(n!=1) {
throw new Exception("加错了");
}
ps.close();
//检查
ps = conn.prepareStatement(sql2);
ps.setInt(1,from);
ResultSet rs = ps.executeQuery();
while(rs.next()) {
int x =rs.getInt(1);
if(x<0) {
throw new Exception("透支");
}
}
conn.commit();
}catch(Exception e) {
e.printStackTrace();
DBUtil.rollback(conn);
}finally {
DBUtil.Close(conn);
}
批量参数处理
- 批处理:发送到数据库作为一个单元执行的一组更新语句
- 优点:批处理降低了应用程序和数据库间的网络调用,相对于单个SQL语句,批处理更为有效
- 批处理数量不宜太多,防止批量过大产生OutOfMemory
- 批量更新API
addBatch(String sql) Statement类的批量添加
addBatch(String sql) prepareStatement 类的批量添加,将多条数据添加得到PS的SQL列表
executeBatch() 将语句发送到数据库,返回值大于零代表执行成功
clearBatch() 清空添加的语句 - 使用例子
String sql = "insert into user (id,name,pwd) values(?,?,?)";
Connection conn =null;
try {
conn=DBUtil.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
for(int i=0;i<100;i++) {
//替换参数
ps.setInt(1, i);
ps.setString(2, "name"+i);
ps.setString(3, "123");
//将参数添加到缓冲区
ps.addBatch();
//分批执行
if((i+1)%8==0) {
ps.executeBatch();
}
}
//执行
int[] n = ps.executeBatch();
System.out.println(Arrays.toString(n));
}catch(Exception e) {
e.printStackTrace();
}finally {
DBUtil.Close(conn);
}
JDBC自动获取递增属性的方法
- ResultSet rs = ps.getGeneratedKeys();
HTML基础
-
1.HTML
- 用来勾勒出网页的结构和内容
-
2.css
- 用来美化网页
-
3.JavaScript()
- 让网页呈现动态的数据和效果
-
4.jQuery
- 框架,提高JavaScript的开发效率
-
Web所具备的三个要素:
- 浏览器
- 服务器
- Http协议
XML与HTML比较
- xml
- 可扩展标签语言
- 标签,属性标签的嵌套关系都可扩展
- 用来存储或传输数据
可扩展:自定义
- Html
- 超文本标签语言
- 语法固定
- w3c组织定义
- 用来显示数据
- 有一些特定的版本严格遵守xml规范
可以将Html理解为标签固定的Xml
HTML属性
-
head部分
<meta> 可以声明编码 <meta charset ="utf-8"> <title> 声明网页的标题 <title>名字</title>
-
body 部分
-
标题元素
基本语法<h#>....</h#> - #=1 2 3 4 5 6 - 即有六个标题
-
段落元素
<p></p> - 与前后文换行分开 - 添加额外垂直距离
-
列表元素
<ol></ol> 有序列表 <ul></ul> 无序列表 中间使用<li></li>添加元素 使用嵌套列表时,应在<li></li>中添加另一个列表
-
分区元素
<div></div> 便于设置不同分区
-
元素的显示方式
- 块级元素 - 默认情况下,块级元素会独占一行,即元素前后会换行 - 如 <p><div><hn> - 行内元素 - 不会换行,可以和其他行内元素位于一行 - 如<span><a> - <span> 默认没有效果 - <i> 用来定义斜体 - 等等元素
-
空格折叠:默认情况下,HTML中的多个空格会被压缩成一个空格
- <br> 换行 - 空格   - < &it
-
-
图片
- <img></img> - 绝对路径:从盘符开始写出图片的完整路径 - 缺点: - 写的很长,麻烦 - 若项目上线时,路径需要改变,则所有路径出错 - 相对路径 - 只需要写出图片和网页的相对位置即可 - 优点 - 简单,量少 - 上线时,无论将项目存放到哪,图片的相对位置没有变化 - ..代表上一级目录
-
超链接
<a href="网址" target="_blank/_self"> </a> 默认_self在本页打开 _black 打开一个新网页
-
超链接的特殊用法
将超链接链到本网页的某个位置 1.这个位置叫做锚点 2.必须提前声明锚点 3.顶部默认就是锚点,没有名字
<p><a name="ll">张三</a>是个好人,不但可爱,而且帅</p> //锚点的定义 <a href="#ll">张三</a> //锚点的使用
-
表格
定义表格<table></table> 声明表格范围 创建行 <tr></tr> 创建列 <td></td> td的重要属性colspan,rowspan 代表单元格所占的列和行
-
行分组
表头<thead></thead> 表体<tbody></tbody> 表尾 <tfoot></tfoot>
<table border="1" cellspacing="0" width="25%"> <thead> <tr> <td>编号</td> <td>名称</td> <td>金额</td> </tr> </thead> <tbody style="color:blue;"> <tr> <td>001</td> <td>键盘</td> <td>20</td> </tr> <tr> <td>002</td> <td>鼠标</td> <td>10</td> </tr> </tbody> <tfoot> <tr> <td colspan="2">总计</td> <td>30</td> </tr> </tfoot> </table>
表单(form)
- 表单元素:用来声明数据提交的范围,只有在此范围的元素才可以提交给服务器
- 属性 action:声明数据提交的目标 - 表单控件:用来让用户输入数据
-
第一类input元素,他们之间用type属性区分
-
文本框
<input type="text"/> - value:设置默认值 - maxlength:设置最大长度 - readonly:设置只读
-
密码框
<input type="password"/> - 属性同上
-
单选框
<input type="radio" name="名称">内容 - 名称相同的才会互斥单选 - checked设置默认选中
-
多选框
<input type="checkbox"/>内容 - checked设置默认选中
-
文件框
<input type="file">
-
隐藏框
<input type="hidden"/>
-
按钮
value 代表名字 submit :提交按钮 <input type="submit" value = "注册"> reset:将表单变为开始状态 <input type="reset" value="重置"> button:没有任何功能,需使用js定义功能 <input type="button" value="点点">
-
-
第二 其他元素(三个)
-
label:用来管理表单中的文本
可以将文本与控件绑在一起,从而增加了控件的受力面积 id :指元素的唯一标志,相当于元素的身份证 任何元素都可以有id,程序员有义务保证元素的id不重复
<input type="checkbox" id="xy"/> <label for="xy">我已阅读并自愿遵守此协议!</label>
-
-
select:下拉框
城市:<select> <option>请选择</option> <option>山东</option> <option>北京</option> <option>天津</option> <option>上海</option> <option selected>山西</option> </select> selected设置默认选中
-
textarea文本域
<textarea cols="30" rows="5" readonly>默认值</textarea> cols:设置文本框列 rows:设置行 readonly:只读
-
<!-- 表单元素
用来声明数据提交的范围,
只有在此范围的元素才可以提交给服务器
action:声明数据提交的目标
-->
<form action="https://www.baidu.com/">
<!--表单控件 用来让用户输入数据 两类 -->
<!-- 第一input元素,他们之间用type属性区分 -->
<!--文本框
value:设置默认值
maxlength:设置最大长度
readonly:设置只读
-->
<p>
账号:<input type="text" value="张三" maxlength="10" readonly/>
</p>
<!-- 密码框 属性同上-->
<p>
密码:<input type="password"/>
</p>
<!-- 单选框 name:组名,相同互斥
checked设置默认选中
-->
<p>
性别:
<input type="radio" name="sex" checked>男
<input type="radio" name="sex" >女
</p>
<!-- 多选框
check 设置默认选中
-->
<p>
兴趣爱好:
<input type="checkbox" checked/>编程
<input type="checkbox" checked/>学习
<input type="checkbox" />敲代码
<input type="checkbox" />学计算机
</p>
<!-- 文件框 -->
<p>
头像:<input type="file" />
</p>
<!-- 隐藏框 -->
<p>
<input type="hidden" value="张三"/>
</p>
<!-- 按钮
value 代表名字
submit :提交按钮
reset:将表单变为初始状态
button:没有任何功能,需使用js定义功能
-->
<p>
<!-- 提交按钮 -->
<input type="submit" value = "注册">
<!-- 重置按钮 变回开始状态-->
<input type="reset" value="重置">
<!-- 普通按钮 -->
<input type="button" value="点点">
</p>
<!-- 第二 其他元素(三个) -->
<!-- label:用来管理表单中的文本
可以将文本与控件绑在一起,从而增加了控件的受力面积
id :指元素的唯一标志,相当于元素的身份证
任何元素都可以有id,程序员有义务保证元素的id不重复
-->
<p>
<input type="checkbox" id="xy"/>
<label for="xy">我已阅读并自愿遵守此协议!</label>
</p>
<!-- select
selected 设置默认选中
-->
<p>
城市:<select>
<option>请选择</option>
<option>山东</option>
<option>北京</option>
<option>天津</option>
<option>上海</option>
<option selected>山西</option>
</select>
</p>
<!-- textarea文本域
cols:设置文本框列
rows:设置行
-->
<p>
简介:<textarea cols="30" rows="5" readonly>
这是文本域的默认值
</textarea>
</p>
</form>