二十二、二十三天笔记总结
1 JDBC进行批处理
1.1 为什么要用批处理?
之前:一次操作只能发送一条sql语句到数据库服务器,效率并不高!
如果要插入2000条记录,那么必须发送2000条sql语句。
如果IO流的话,一次写出一个字节,显然效率效率并不高,所以可以使用缓存字节数组提高每 次写出的效率。
现在:插入2000条记录,但现在使用sql缓存区,一次发送多条sql到数据库服务器执行。这种做法就叫做批处理。
1.2JDBC批处理的API
Statement批处理:
voidaddBatch(String sql) 添加sql到缓存区(暂时不发送)
int[]executeBatch() 执行批处理命令。 发送所有缓存区的sql
voidclearBatch() 清空sql缓存区
PreparedStatement批处理:
voidaddBatch() 添加参数到缓存区
int[]executeBatch() 执行批处理命令。 发送所有缓存区的sql
voidclearBatch() 清空sql缓存区
案例:分别测试statement和preparedstatement使用和不使用批处理向学生表插入2000条数据 的效率
2 JDBC获取自增长值
/** * 获取自增长值 * @author APPle * */publicclass Demo1 { @Test publicvoid test(){ //插入部门表数据 String deptSql = "INSERT INTO dept(deptName) VALUES(?)"; //插入员工表数据 String empSql = "INSERT INTO employee(empName,deptId) VALUES(?,?)"; Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try{ //获取连接 conn = JdbcUtil.getConnection(); /** * 1)插入部门 */ //预编译部门sql //stmt = conn.prepareStatement(deptSql); // /** * 1.1 使用两个参数的prepareStatement()方法,指定可以返回自动增长的键值 * Statement.RETURN_GENERATED_KEYS: 可以返回自动增长值 * Statement.NO_GENERATED_KEYS: 不能返回自动增长值 */ stmt = conn.prepareStatement(deptSql, Statement.RETURN_GENERATED_KEYS); //设置参数 stmt.setString(1, "秘书部"); //执行部门sql stmt.executeUpdate(); /** * 1.2 获取自增长的值 */ rs = stmt.getGeneratedKeys(); Integer deptId = null; if(rs.next()){ deptId = rs.getInt(1);//得到第一行第一列的值 } /** * 2)插入员工,员工在刚添加的部门中 */ stmt = conn.prepareStatement(empSql); //设置参数 stmt.setString(1, "李四"); stmt.setInt(2, deptId); //如何获取刚刚添加的部门ID?? //执行员工sql stmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, rs); } }}
3 JDBC处理大数据文件
3.1 什么是大容量
字符:
存储字符内容: mysql:char(0-255) varchar(0-65535) 长度有限的。 65535
大容量的字符字段:
mysql: text(64K) longtext(4G字符内容)
oracle: clob longclob
字节:
mysql: blob(65kb) mediumblob(16mb) longblog(4GB)
oracle: blob
3.1jdbc操作字符文件
/** * 对大文本数据处理 * @author APPle * */publicclass Demo1 { /** * 文件保存到数据中 */ @Test publicvoid testWrite(){ Connection conn = null; PreparedStatement stmt = null; try{ //获取连接 conn = JdbcUtil.getConnection(); //创建PreparedStatement String sql = "INSERT INTO test1(content) VALUES(?)"; stmt =conn.prepareStatement(sql); //设置参数 /** * 参数一:参数位置 * 参数二:输入字符流 */ /** * 读取本地文件,返回输入字符流 */ FileReader reader = new FileReader(new File("e:/Demo1.java")); stmt.setClob(1, reader); //执行sql int count = stmt.executeUpdate(); System.out.println("影响了"+count+"行"); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, null); } } /** * 从数据中读取文本内容 */ @Test publicvoid testRead(){ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try{ //获取连接 conn = JdbcUtil.getConnection(); String sql = "SELECT * FROM test1 where id=?"; stmt = conn.prepareStatement(sql); //设置参数 stmt.setInt(1, 2); //执行sql,返回结果集 rs = stmt.executeQuery(); if(rs.next()){ //方式一:当做字符串取出数据 /* String content = rs.getString("content"); System.out.println(content); */ //方式二:返回输入流形式 Clob clob = rs.getClob("content"); Reader reader = clob.getCharacterStream(); //写出到文件中 FileWriter writer = new FileWriter(new File("e:/Demo2.java")); char[] buf = newchar[1024]; int len = 0; while( (len=reader.read(buf))!=-1){ writer.write(buf, 0, len); } //关闭流 writer.close(); reader.close(); } }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, rs); } }}
3.2jdbc操作字节文件
/** * 对字节文件处理 * @author APPle * */publicclass Demo2 { /** * 文件保存到数据库中 */ @Test publicvoid testWrite(){ Connection conn = null; PreparedStatement stmt = null; try{ //获取连接 conn = JdbcUtil.getConnection(); String sql = "insert into test2(content) values(?)"; stmt = conn.prepareStatement(sql); //设置参数 /** * 参数一:参数位置 * 参数二:输入字节流 */ /** * 读取本地文件 */ InputStream in = new FileInputStream(new File("e:/abc.wmv")); //stmt.setBlob(1, in); stmt.setBinaryStream(1, in); //执行 stmt.executeUpdate(); }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, null); } } /** * 注意: mysql数据库默认情况下,只能存储不超过1m的文件,由于max_allowed_packet变量的限制 * 可以修改: %mysql%/my.ini文件, 修改或添加max_allowed_packet变量,然后重启mysql即可!! */ /** * 从数据中读取字节内容 */ @Test publicvoid testRead(){ Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try{ //获取连接 conn = JdbcUtil.getConnection(); String sql = "SELECT * FROM test2 where id=?"; //获取PreparedStatement stmt = conn.prepareStatement(sql); //设置参数 stmt.setInt(1, 1); //执行sql rs = stmt.executeQuery(); if(rs.next()){ //返回输入流 //InputStream in = rs.getBinaryStream("content"); InputStream in = rs.getBlob("content").getBinaryStream(); //写出文件中 FileOutputStream out = new FileOutputStream(new File("e://3.jpg")); byte[] buf = newbyte[1024]; int len = 0; while((len=in.read(buf))!=-1){ out.write(buf, 0, len); } //关闭流 out.close(); in.close(); } }catch(Exception e){ e.printStackTrace(); }finally{ JdbcUtil.close(conn, stmt, rs); } }}
4 数据库事务
4.1什么是事务?
所谓的事务,如果把多条sql语句看做一个事务,那么这个事务要么一起成功,要么一起失败!!
4.2mysql事务操作命令
setautocommit =0 / 1; 设置是否自动提交事务
1: 表示自动提交事务,每执行一条sql语句,自动提交事务。
0: 表示关闭自动提交事务。
commit; 提交事务,一旦提交事务不能回滚
rollback; 回滚事务。回滚到事务的起始点。
4.3jdbc事务操作
Connection.setAutoCommit(false) 开启事务
Connection.commit(); 成功执行,最后提交事务
Connection.rollback(); 一旦遇到错误,回滚事务
/** * 模拟银行转账 * @author APPle * */publicclass Demo1 { /** * 从eric的账户转2000元到rose的账户上 */ @Test publicvoid testTransfer(){ //从eric账户上扣除2000元 String delSql = "UPDATE account SET BALANCE=BALANCE-2000 WHERE NAME='eric'"; //向rose账户打入2000元 String addSql = "UPDATE account SET BALANCE=BALANCE+2000 WHERE NAME='rose'"; Connection conn = null; PreparedStatement stmt = null; try{ //获取连接 conn = JdbcUtil.getConnection(); //开启事务 conn.setAutoCommit(false); // 等价于set autocommit=0; //预编译delSQL stmt = conn.prepareStatement(delSql); //执行delSQL stmt.executeUpdate(); //发生异常 int i = 100/0; //预编译addSql stmt = conn.prepareStatement(addSql); //执行addSql stmt.executeUpdate(); //提交事务 conn.commit();// 等价于commit; }catch(Exception e){ e.printStackTrace(); //回滚事务 try { conn.rollback(); // 等价于rollback; } catch (SQLException e1) { e1.printStackTrace(); } }finally{ JdbcUtil.close(conn, stmt, null); } }}
HTML:
三:
3.1 基本标签的讲解
<html> --html开始标签
<head> -- 文件头(用户在浏览器的主体是看不到的)
</head>
<body> --文件体(用户在浏览器的主体看得到)
</body>
</html>--html结束标签
3.2 head文件头
作用:告诉浏览器如何解释该html页面
<html>
<head>
<!-- html注释 -->
<!-- 作用:告诉浏览器如何解释该html页面 -->
<!-- 标题 :在窗口的标题栏看到-->
<title>这是标题</title>
<!-- 告诉浏览器使用什么码表解释html文件 -->
<!--
html标签分类:
有标签体标签:有开始,有结束标签、 <title></title>
没有标签体标签 : 也叫空标签 <meat />
-->
<metahttp-equiv="content-type" content="text/html;charset=utf-8"/>
<!-- 关键词:keywords
搜索引擎: 百度 输入 java培训
网页的排名 推广SEO
SEO优化
关键词是网页排名的一个因素。
100% 权重 50% 33.3.% (3-5个合适)
-->
<meta name="keywords"content="java培训,net培训,php培训" />
<!-- 描述:
标题
描述
标题
描述
标题
描述
-->
<meta name="description"content="这是一家专门做IT职业培训的公司"/>
</head>
<body>
</body>
</html>
3.3 文本标签(body里面的标签)
标题(h1~h6) align:设置位置
水平线(hr) color:线的颜色
换行(br)
标签规定粗体文本(b)
将文本以斜体显示(i)
将文本以下划线显示(u)
段落(p)(书写两段小说进行演示)
段落缩进(blockquote)(主要用于解释或者强调)
上下标(sup和sub)(一般用于公式)y=x2 H2O CaCo3
原样输出(pre)(希望网页上的东西和代码里面写的样式完全一样的时候(写一首诗,写一段代码))
好雨知时节,当春乃发生。
随风潜入夜,润物细无声。
野径云俱黑,江船火独明。
晓看红湿处,花重锦官城。
marquee:
behavior属性值(alternata:来回滚动scroll:重复滚动 slide:不重复滚动
bgcolor:字幕背景颜色
direction:设置字幕的滚动方向down right left up
bgsound:
src:需要播放的音乐路径
loop=-1(无限循环)
autostart="true"自动播放
列表标签:
有序列表ol li(type属性更改序号类型,案例:投票喜欢的女明星)
无序列表ul li(用于条目的罗列,type属性更改序号类型,案例:学生管理系统)
项目列表标签(dl dt dd)(一般用于有层次结构的列表,一个公司员工的列表)
下拉选项:<select/><option/>
行内标签(span) (html中用的非常少,css中用的非常多)
块标签<div> (html中用的非常少,css中用的非常多)
2.4 超链接标签
<!DOCTYPEhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>超链接标签</title>
</head>
<body>
<!-- a超链接标签:
常用的属性:
href 表示链接到的地址(文件)
target 打开资源方式 _self: 当前窗口打开, _blank: 新窗口打开
协议执行资源的基本流程(超链接的原理):
使用协议到本地计算机的注册表中查询是否有对应协议的软件(程序),有就执行,没有就不执行。
http协议的详细执行流程(画图详解)
发布个人网站的流程:
1.域名
2.服务器
3.服务器ip和域名进行绑定
4.将网站发布到服务器
常见的协议:
file:// 本地文件协议(本地或局域网) 在href中不写就是使用这个默认协议
http:// http协议(执行流程) 通常连接到域名或IP地址(http协议执行流程)
thunder:// 迅雷下载软件的协议
mailto:发送邮件协议
超链接作用;
1)链接到资源
2)作为锚点使用
打锚点: <a name="锚点名称"></a>
去到锚点:<a href="#锚点名称">内容</a>
-->
<aname="top"></a>
<ahref="03.html文本标签.html#list"target="_blank">超链接</a><br/>(在其他页面的位置打上锚点)
<ahref="../1.jpg">链接到图片</a><br/>
<ahref="http://www.baidu.com">链接到百度</a><br/>
<ahref="http://www.moive.com/fuzhouzhe.avi">高清《复仇者联盟2》(普通通道)</a><br/>
<ahref="thunder://www.moive.com/fuzhouzhe.avi">高清《复仇者联盟2》(迅雷通道)</a><br/>
<br/><ahref="#ch01">去到第一章</a>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<aname="ch01"></a>
第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容第一章内容<br/>
<a href="#top">返回顶部</a>
</body>
</html>
2.5 图像标签
img 图像标签
常用属性:
src : 表示图片源位置
width: 图片宽度
height: 图片高度
alt: 替代文本。当图片的src属性失效时,alt属性的内容就会生效
title: 提示文本。当鼠标放到图片上面出现。
地图(热点区域):map
热点: area,设置图片上可以被点击的区域(用工具做之后进行简单分析)
2.6 转义字符
在html语法中,存在一些特殊的字符,这些字符是不能直接原样输出。如果想让这些特殊字符原样输出的话,
那么就需要进行转义。
常见的转义字符:
特殊字符 转义字符(以&开头,以;结尾)
需求:在浏览器中显示:<h1>标题</h1>
< < letter than
> > greater than
& &
需求:在浏览器中输入 华育 国际
空格
王老吉加上商标和版权:
版权 ©
商标 ®
-------------------------------------------------------------------------------------------------------------------------
2.6 表格标签
标签:
table 表格
tr 行
td 单元格
th 表头
caption 标题
常用的属性:
border 表格的边框
width 宽度
heigth 高度
align 对齐方式。left: 左对齐 center:居中 right:右对齐
rowspan 行合并。把多行的单元格合并
colspan 列合并。把多列的单元格合并
2.9 表单提交()
表单标签(重点)
作用:用于采集用户输入的数据,提交给后台程序处理
场景1:
注册用户:
-> 注册页面(输入用户名、密码、邮箱...)(通过表单标签携带用户数据)-> 系统后台程序 -> 把用户数据保存到数据库
场景2
登录:
-> 登录页面(输入用户名和密码)(通过表单标签携带用户数据) -> 系统后台,搜索数据库,判断是否存在次用户和密码
表单标签:
<form> 就是一个表单
<inputtype="text"> 单行输入域
<inputtype="password"/> 密码输入域
<inputtype="radio"/> 单选按钮
<inputtype="checkbox"/> 多选按钮
<select/> 下拉选项
<inputtype="hidden"/> 隐藏域。特点:不会显示到html页面上,但可以携带数据。
<inputtype="file"/> 文件选择器
<textarea></textarea> 多行输入域
<inputtype="submit"/> 提交按钮
<inputtype="button"/> 普通按钮
<inputtype="reset"/> 重置按钮
3.1 框架标签
frameset 框架集
属性:
cols:按照列的方向来划分框架
rows: 按照行的方向来划分框架
以上两个属性的值填每个框架的比例或者长度
*号表示其他框架分配完之后剩下的比例
frame 表示一个框架,框架中包含一个html页面
有2个或2个以上的frame就会包含在frameset当中。
注意:
框架标签不能放在body标签中,否则无法显示!!!
转载于:https://blog.51cto.com/12771294/1937002