解锁hr用户: 1.通过isqlplus客户端解锁 2.通过sqlplus命令行解锁 (1)sqlplus sys as sysdba (2)不用输入口令,直接回车 (3)alter user hr account unlock; (4)alter user hr identified by 密码; (5)exit
总结: 语法: select … from … where … group by … having … order by …; 顺序: 1.from — 确定数据来源表 2.where — 对来源表里进行数据筛选 3.group by — 对满足要求的数据进行分组 4.having — 对分组后的数据进行再次筛选 5.select — 按用户要求统计数据 6.order by — 按照一定顺序显示统计好的数据
select*,row num,rowid from employees;-- error-- 解决:select employees.*,rownum from employees;--用表名修饰select e.*,rownum from employees e;--用表的别名修饰
-- 请打印表里的前5行数据select*from employees where rownum <=5;-- 请打印表里的第6到第10行数据select*from(select e.*,rownum r from employees e where rownum between1and10)where r between6and10;
注意: rownum使用时必须从1开始用,>=1=1<<=between1and n;select*from employees where rownum between6and10;-- error
5.子查询
1)子查询结果是单行单列
-- 查询工资最高的员工信息select*from employees where salary =(selectmax(salary)from employees);
2)子查询结果是多行一列(多个值)
-- 查询last_name是Taylor的员工所在部门下的所有员工信息select*from employees where department_id in(select department_id from employees where last_name ='Taylor');
3)子查询结果是多行多列
-- 查询工资排名最高的前五名员工信息select*from(select*from employees e orderby salary desc)where rownum <=5;
4)关联子查询
通过表的别名进行区分查询
-- 请查询各部门工资最高的员工信息select e1.*from employees e1 where e1.salary =(selectmax(salary)from employees e2 where e2.department_id = e1.department_id);
6.表连接
当结果数据来自于多张表时,需要通过一定的条件,讲多张表的记录合并成一行记录显示给用户
-- 打印员工的编号,姓名,工资,部门编号,以及所在部门名称select e.employee_id,e.first_name||'_'||e.last_name name,e.salary,d.department_name from employees e,departments d where e.department_id = d.department_id;
-- 打印60部门员工信息,以及所在部门信息select e.*,d.*from employees e join departments d on e.department_id = d.department_id where e.department_id =60;
注意: 内连接只会显示符合连接条件的记录,对于连接条件为null的记录直接舍弃,不在结果中显示
-- 打印所有员工信息,以及他们所在部门的信息-- 左外连接实现select e.*,d.*from employees e leftjoin departments d on e.department_id = d.department_id;-- 右外连接实现select e.*,d.*from departments d rightjoin employees e on e.department_id = d.department_id;-- 全外连接实现select e.*,d.*from employees e fulljoin departments d on e.department_id = d.department_id;
3)自连接
通过为一张表定义两个别名的方式,模拟表连接
-- 请打印员工的姓名以及他的领导姓名select e.first_name||'_'||last_name name,m.first_name||'_'||last_name name from employees e leftjoin employees m on e.manager_id = m.employee_id;
4)多表连接
-- 打印员工详细信息,所在部门信息,以及所在的城市select e.*,d.*,l.*from employees e leftjoin departments d on e.department_id=d.department_id leftjoin locations l on d.location_id = l.location_id;
语法:create sequence 序列名; start with num —起始值 increment by num — 步长 maxvalue num — 最大值 cycle | nocycle — 是否支持循环 cache num | nocache — 是否有缓存 drop sequence 序列名 — 删除序列
创建: create view 视图名 as 查询语句; 删除: drop view 视图名; 作用: 1.简化查询,提高查询语句的复用性 2.帮助做表的权限管理 a. create view emp as select employee_id,last_name,… from employees; b. create view boss as select * from employees; c. 禁掉employees表的访问权限,对外提供emp和boss;
3)索引index
概念:是一个两列多行的表(对建立索引的字段值排序 — 值所在的物理位置rowid)
创建: create index 索引名 on 表名(字段名); 作用: 当建立索引的字段出现在查询条件里时,db server会自动应用索引提高查询效率 注意: 索引不是越多越好,浪费空间,降低增删改效率 oracle server 会默认为表里的"主键"和"唯一键"自动添加索引
a. begin: 从写第一条sql命令的那一刻 b. end ①如果输入一组DML(insert update delete)命令,需要手动显示输入commit或者rollback结束事务 ②如果输入一组DDL或者DCL命令,则命令成功后自动commit ③如果输入一组DML命令后退出client,正常退出做commit,非正常做rollback
a. executeUpdate(sql): 用来执行inser update delete命令,返回int值(命令影响了几条数据) b. executeQuery(sql): 用来执行select命令,返回值为ResultSet(结果集) c. execute(sql): 可以用来执行所有的sql命令,返回boolean值(标记是否有结果集返回)
5)处理结果集
方法: next() / getXxx()系列
6)释放资源
注意: 资源释放按照生成顺序反向释放 rs — stm — conn
5.带参sql命令的执行
1)使用Statement执行带参sql
缺陷 ①命令字符串的拼接比较繁琐 ②sql注入
2)使用PreparedStatement执行带参的sql
① PreparedStatement是Statement的子接口,可以解决sql注入(字符串拼接)的问题 ②使用 a.创建PreparedStatement对象(需要直接指定执行的sql) PreparedStatement ps = new prepareStatement(sql); ps允许指定半成品sql,允许在sql命令中使用?作为占位符来代替暂时不方便给定的值 b.为?设置值: ps提供一系列的setXxx();
注意: 数据或者表格里需要展示的内容必须放在里。td里可以放任意html标签(图片,超链接,文字) 属性介绍 table --align: 设置表格与窗口边框的水平对齐方式,可选值 left center right table -- cellspacing:各个td之间的间隔 align— 水平方向对齐, left center right 特殊属性: 单元格的合并 colspan: 横向跨多少个字段 rowspan:纵向占多少行
a) position: static(默认的),absolute,relative,fixed absolute – 绝对定位后,会随着文档的滚动而移动 fixed:将div绝对定位到窗口的某一个位置,不会随着文档滚动而移动 b) float属性 1)一旦div设置了float属性,则它将脱离最底层(文档层),在浮动层分配空间 2)一旦设置了float属性,则div不再是块级元素 3)可选择: left right
3)通过点击表单的提交按钮 完成请求的发送 第一步: 在html文件中提供一个表单 第二步: 将表单提交的程序地址封装在action属性中 a. 获取表单提交(get或者post)的数据 String value = request.getParameter(“请求参数名 ---- 表单元素的name属性的值”); b. 如果请求里含有中文 , 则通过以下方式设置编码 request.setCharacterEncoding(“UTF-8”);
4. Servlet程序的生命周期
Servlet程序的生命周期由tomcat容器控制
client发出请求 到 server做出响应 的过程
生命周期过程
5.采用myeclipse工具自动部署web应用
1.将需要使用的tomcat服务器软件配置在myeclipse工具中 ① window菜单 show view others 搜索servers 选中 ② 窗口右键 configure server connector 左边选中tomcat6.x 右边选择enable选中tomcat安装路径ok ③ 可以在myeclipse的servers窗口里启动和关闭tomcat服务器软件
2.开发具备自动部署能力的web应用 ① 新建一个web项目 ② 部署项目 — 自动部署 选中部署工具(工具栏) 选中需要部署的项目 选择部署的服务器 ok
6.多个servlet配合完成client端的一个请求
1)forward (请求转发)
①代码 ②数据传递 ③forward工作方式的特点 a. 请求转发连接的多个程序之间处于一个request的生命周期 b. 请求转发发生在服务器程序内部 , client不知晓 ,地址栏不变, 与网页内容不匹配 c. 请求永久转向 d. 只在本应用内部程序之间跳转
2)Servlet里的监听器 ① 生命周期监听器 — 监听三大作用域的创建和销毁事件 ServletContextListener HttpSessionListener ServletRequestListener ② 作用域里的命名属性监听器 ServletContextAttributeListener ServletRequestAttributeListener HttpSessionAttributeListener
3)编程 ① 写程序 ② 写配置文件
六、JSP
1.概念
Jsp(java service page),是一种生成动态网页的技术
2.文件特点
① jsp文件必须以.jsp为结尾 ② jsp文件可以放置在web应用目录下的任意位置(除了WEB-INF — 目前) Jsp和servlet的表现形式上的区别 ① jsp --> 在大量的html标签中嵌入少量的java代码,html标签比重大 – XXView ② servlet --> 在大量的java代码中嵌入少量的html标签,java代码比重大 – XXAction
3.Jsp的原生标签:脚本 指令 动作
① 脚本元素:用来向jsp页面里嵌入“纯java代码”的标签 如何保证jsp页面里的数据的线程安全? 尽量避免在声明脚本里定义变量(线程不安全)!
4.指令元素:页面 包含 标签库
① 页面指令 <%@page %>:利用标签的属性描述jsp页面信息 【重点】 语法:<%@page 属性=”值” 属性=“值” … %> ② 标签库指令:<%@taglib uri=”” prefix=""%>【重点】 ③ 包含指令(不重要):<%@include file="jsp文件路径" %> 作用:将指定的jsp的“源代码”包含到当前jsp页面里,也成为“静态包含” 使用:主要用来在jsp领域做“代码复用” 注意:不建议使用,复用场景单一,如果定义成普通的java类,复用机会更多
5.动作元素:包含动作 转发动作
① 包含动作 — 【重点】 功能:将其他网页资源的输出结果包含到当前jsp页面的输出结果里(合并输出), 也称为“动态包含”。 使用:主要用来做复杂页面的显示 Filter —》 默认只过滤client —》 REQUEST FORWARD INCLUDE
5)在jsp页面里请求重定向 6)将给定的value值输出到浏览器上 7)相当于, 可以将任意一张网页包含到当前页面里 8) ① 可以将给定的网名变成uri,自动补齐应用名 ② 自动检测浏览器是否支持cookie,如果不支持则自动将sessionid拼接到地址栏带入下一个程序 通过子标签完成请求参数的拼接
9.MVC编程思想
① 概念:在开发设计一个软件的时候,人为的将软件代码划分成3个组成部分M(module)模型,V(view)视图 , C(controller)控制。
② 使用: M(module) — service + dao V(view) ---- jsp + html C(controller) — servlet(xxxAction) class XXXAction{ //1. 收集请求里传递的数据 — 接收请求 // 2. 调用service层的方法完成功能 // 3. 根据结果控制跳转 }
③ 好处 1)各司其职,便于程序员协同开发,提高开发效率 2)弱耦合,便于软件的升级维护( 分层 ,interface ,反射 ,配置文件 )
① 多参查询 1)参数类型复杂或者参数不止一个时,可以省略parameterType 注意:mybatis不支持dao接口里的方法重载 2)方法的形参名不能长时间保留,在编译的过程中丢失,不能在映射文件中使用 3)简单解决方法 4)正规解决方法 通过注解,为参数定义一个可以被jvm访问的名字 ② 特殊符号的处理
① 在java的实体类之间描述关系 ② 定义dao接口 – 两个dao ③ 实现接口 — mapper.xml 1)没有关系属性的类对应的dao ---- 按照单表操作实现即可 2)有关系属性的类对应的dao a. 增删改 ---- 按照单表操作 b. 查询功能特殊 ---- 表连接查询 public Team queryTeamById(Integer id);
<resultMapid="res1"type="entity.Team"><idcolumn="tid"property="id">id><resultcolumn="tname"property="name">result><resultcolumn="count"property="count">result><collectionproperty="list"ofType="entity.Student"><idcolumn="sid"property="id">id><resultcolumn="sname"property="name">result><resultcolumn="age"property="age">result>collection>resultMap><selectid="queryTeamById"parameterType="Integer"resultMap="res1">
select t.id tid,t.name tname,t.count,s.id sid,s.name sname,s.age
from team t left join student s on t.id = s.tid
where t.id = #{id}
select>
1.没有关系属性的dao按单表操作实现 ---- ComputerDao b. 2.有关系属性的dao查询方法需要特殊处理,增删改按单表操作实现
public Student queryStudentById(Integer id);
<resultMapid="res1"type="entity.Student"><idcolumn="sid"property="id">id><resultcolumn="name"property="name">result><resultcolumn="age"property="age">result><associationproperty="computer"javaType="entity.Computer"><idcolumn="tid"property="id">id><resultcolumn="type"property="type">result><resultcolumn="serial"property="serial">result>association>resultMap><selectid="queryStudentById"parametherType="Integer"resultMap="res1">
select s.id sid,s.name,s.age,c.id cid,c.type,c.serial
from student s left join computer c
on s.cid = c.id where s.id = #{id}
select>
③ 定义dao接口 1)如果直接描述多对多关系,会导致“数据库里表的个数” 和 “实体类的数量” 不对等,如果 开发时只需要程序员提供“查询”功能,此时定义两个dao即可(针对实体类的数量) a. 没有关系属性的dao — 按照原来的单表操作实现即可 ( 查询功能 ) b. 有关系属性的dao ---- 查询需要特殊处理(没有增删改功能) — 三张表连接查询
<resultMapid="res1"type="entity.Student"><idcolumn="sid"property="id">id><resultcolumn="sname"property="name">result><collectionproperty="cs"ofType="entity.Course"><idcolumn="cid"property="id">id><resultcolumn="cname"property="name">result>collection>resultMap><selectid="queryStudentById"parameterType="Integer"resultMap="res1">
select s.id sid,s.name sname,c.id cid,c.name cname
from student s left join middletable m
on s.id = m.sid
left join course c on c.id = m.cid
where s.id = #{id}
select>
1)js是一种弱数据类型语言 ① java – 强数据类型语言(变量的类型 必须与 值的类型 一致 ) int a = 3; String str=“呵呵”; boolean ba = true; ② js – 弱数据类型语言(只有“数据”有类型,变量没有类型) var a = 3; a = “hehe”; 2)js里的变量 ① 变量可以重复声明定义,值以最后一个赋值为准 var a=3; var a=“hehe”; var a; alert(a); —> hehe ② 没有“块”作用域的概念
if(true){var a =3;}
document.write( a );
③ 局部变量:定义在函数里面的,并且用var关键字声明的变量,仅限于在函数里面使用 ④ 全局变量:除了局部变量,其他全部都是全局变量( 没有var关键字声明的变量) 3)数据类型 ① 基本数据类型 a. 数字类型(不分整数和小数) ---- 3 和 3.0 b. 字符串类型(不分字符和字符串)— 定义时单引号和双引号都ok ‘hehe’ “呵呵” c. boolean类型 — true|false 0-false | 1-true null-false | !null - true if(true) if(3) if(“hehe”) ② 特殊的数据类型 — null undefinded(未定义的) NaN(not a number)
if(true){var a =3;}
document.write( a );
③复合数据类型 — 数组,对象,Date,Math,Function类型 4)运算符 ① 只要能计算出结果,js都会努力去做(计算时自动类型切换得到结果) ② 判断相等性(js里没有equals方法)
// a. == :只比较内容是否相同,不比较类型var a =3;var b="3";alert( a==b );---true// b. === : 比较内容,也比较类型var a=3;var b="3";alert(a===b);---false
③ typeof — 获取一个值的具体类型
alert(typeof"abc");// string
5)流程控制 — 与java完全一致
4.函数
1)定义函数 ① 使用关键字function定义
// function 函数名(形参名,.....){ 代码实现 }functionadd(a,b){return a+b;}
1)String类型 ① 创建: var str = “xxxxx” var str = new String(“呵呵呵”); ② 提供了一些功能函数 获取String长度的功能是 length属性,不是length函数 2)数学类型Math 相当于java里的工具类,里面的函数相当于java里的静态方法,使用Math直接调用 var num = Math.random(); 3)日期类型 创建 — var date = new Date(); // 获取当前系统(浏览器)时间 var date = new Date(“1992-06-12”); //创建一个指定时间的日期对象 函数 — 提供功能函数来获取日期的各个组成部分。
8.代码的执行方式
1) js代码由事件触发运行,当网页里的html标签产生特定的,能够被浏览器捕获的事件时,触发js代码运行 2)监听事件模型: 事件源(html标签) 事件对象(浏览器捕获的事件) 监听器(指定代码) 3) js代码开发步骤: ① 确定事件源(功能与哪一个标签有关),需要添加监听器的标签 ② 根据事件,选择合适的监听器,以属性的形式添加到html标签上 4)为标签添加监听器 ① <标签名 监听器=“js代码”> ----- 适用于少量js代码的指定 ② <标签名 监听器=“调用js里定义好的函数”> — 适用于大量js代码的添加
相对于js代码比较 1)js代码比较复杂 js ---- var tag = document.getElementById(“id值”); jquery ---- var tag = $("#id值"); 2)js存在浏览器差异(数子标签),jquery可以屏蔽浏览器差异 3)提供了强大的界面支持(动画效果更佳丰富) 4)jquery支持对一组标签直接操作(不需要遍历) 5)jquery支持链式调用
设置样式 ① jquery对象.addClass(css里一类样式的class名); ② jquery对象.prop(“class”,“class名”); 移除样式 jquery对象.removeClass();
5)三个关于内容操作的函数
① html() — 设置或者获取标签体内容的函数(标签体内容包括子标签和文本内容)等价于js里的innerHTML 获取 — var value = jquery对象.html(); 设置 — jquery对象.html( 标签体内容 ); ② text() – 设置或者获取标签体里的文本内容 ③ val() — 设置或者获取表单元素的value属性值 获取 — var value = jquery对象.val(); 设置 — jquery对象.val( value值 );
eclipse中使用maven插件的时候,运行run as maven build的时候报错
-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
可以设一个环境变量M2_HOME指
1.建好一个专门放置MySQL的目录
/mysql/db数据库目录
/mysql/data数据库数据文件目录
2.配置用户,添加专门的MySQL管理用户
>groupadd mysql ----添加用户组
>useradd -g mysql mysql ----在mysql用户组中添加一个mysql用户
3.配置,生成并安装MySQL
>cmake -D
好久没有去安装过MYSQL,今天自己在安装完MYSQL过后用navicat for mysql去厕测试链接的时候出现了10061的问题,因为的的MYSQL是最新版本为5.6.24,所以下载的文件夹里没有my.ini文件,所以在网上找了很多方法还是没有找到怎么解决问题,最后看到了一篇百度经验里有这个的介绍,按照其步骤也完成了安装,在这里给大家分享下这个链接的地址
import java.io.UnsupportedEncodingException;
/**
* 转换字符串的编码
*/
public class ChangeCharset {
/** 7位ASCII字符,也叫作ISO646-US、Unicode字符集的基本拉丁块 */
public static final Strin
其实这个没啥技术含量,大湿们不要操笑哦,只是做一个简单的记录,简单用了一下递归算法。
import java.io.File;
/**
* @author Perlin
* @date 2014-6-30
*/
public class PrintDirectory {
public static void printDirectory(File f
linux安装mysql出现libs报冲突解决
安装mysql出现
file /usr/share/mysql/ukrainian/errmsg.sys from install of MySQL-server-5.5.33-1.linux2.6.i386 conflicts with file from package mysql-libs-5.1.61-4.el6.i686
Dear,
I'm pleased to announce that ktap release v0.1, this is the first official
release of ktap project, it is expected that this release is not fully
functional or very stable and we welcome bu