初学java总结

java简介
第一代语言:打孔机   0  1
第二代语言:汇编语言
第三代语言:C面向过程  C++面向过程/对象  java面向对象
第四代语言:SQL结构化查询语言
第五代语言:Lisp,prolog人工智能


java发展史
95年:sun推出
96年:发布JDK 1.0
98年:JDK1.2   java2
02年:JDK1.3 1.4成熟
04年:JDK1.5更名为java5.0
11年:发布JDK7.0


JAVASE核心基础


java两种核心机制:1.JVM虚拟机,与平台无关,健壮的语言 2.GC垃圾回收


源程序(.java),编译器(虚拟机),字节码(.class),类装载,字节码校验器,解释器,操作系统平台


虚拟机可以理解为机器指令的系统,不同的平台有不同的虚拟机


配置JDK
PATH:系统执行命令时搜索的路径
CLASS PATH:编译和运行时要找的CLASS类


编辑,编译(javac),运行(java)(类加载,字节码校验,执行)


IDE继承开发环境
Eclipse IBM
MyEclipse 
NETBEANS sun
JCREATOR
EPITPLUS


类名首字母大写
标示符:组成:字母,下划线,美元符或数字组成首字母:字母,下划线,美元符开头。java大小写敏感,长度


无限制见名知意,不能与关键字重名
关键字:特殊含义,都是小写
goto,const虽然从未使用,但也是关键字


流程控制:if,do,default,break,else,return,case,while,for,switch,continue,goto
数据类型:double,byte,int,short,char,long,float,boolean
异常:throw,throws,try,catch,finally
面向对象:


abstract,private,this,implements,protected,import,public,extends,interface,super,new,package,null


常量:数值,字符,字符串  用final定义常量public static final double PI
变量:按位置划分:局部,成员 注:局部变量使用前必须显示赋值,成员变量有默认的初始值
      按数据类型划分:基本数据类型:逻辑型:布尔 数值:整数,小数  字符:char  引用数据类型:数组,


类,接口


boolean逻辑运算:true或false 不能用0或1  char常量用单引号括起来


java字符采用unicode编码,每个字符占两个字节,因而可用十六进制编码形式
整数用源码表示,负数采用补码形式


浮点有两种表示形式:十进制3.14,科学计数:3.14e2  浮点不能用==比较
float精确到小数点后7位,精确到小数点后14位


byte,short,char之间不能互相转换,他们之间计算会被转换为int


char  0-65535位,boolean不能与其他类型转换


静态方法中只能引用静态变量


成员变量:类变量:static修饰   实例变量:无static修饰


不能在嵌套的两个块中声明重名变量




switch()中只能接受byte,short,char,int和枚举类型JDK7.0之前不能用字符串,default可以省略,不推荐,最


后匹配,防止下坠
if中没有break,break只能用于“for”“switch”


数组:同种数据类型的集合,一维,二维,多维


所有引用类型初始值为null,
初始化A:int arr=new int[2];B:int arr=new int[]{};C:int arr={};。赋值:只能一个一个的赋值。


栈中是连续的,堆中是不连续的,任何字符串都保存在堆中。


包装类型是对基本数据类型的类封装


java中方法必须放在类中,便于代码重用


return语句用于种植方法的运行并返回数据。
形参:方法调用时接受外界输入的接口
实参:传递给方法形参的真实数据,被复制到形参中(遵循值传递原则)


java中使用“对象名.方法名(实参列表)”的方式来调用方法,方法只有被调用了才会执行。
形参必须与实参保持一致。数量,数据类型,次序。
int放在栈中,new放在堆中


递归方法一定要有返回值要有参数,公式。
foreach是1.5之后的,本身不是关键字,for的变种。


java中定义字符串:String str;  
String:1.创建: String s = “abc”;String ss =new String(“abc”);String sss=new String(s);
2.查找:int indexOf(int ch),lastIndexOf();
3.长度:int length();
4.位置:charAt();
5.子串:substring()(创建新串),substring(a.b);
6.拼接:+
7.大小写转换:toLowerCase();转换小写toUpperCase();转换大写
8.比较:equal();内容比较 ,  == 地址比较
9.分割:split();


String不可别继承,求数组长度用属性,求字符串长度用方法。
StringBuffer字符串缓冲:1.可变类2.不可继承3.线程不安全
主要操作:append,insert和delete方法。
将StringBuffer转换成String用toString();方法分配一个新String对象,引用常量池中的常量。
StringBuilder:可变类,不能继承,线程不安全。


单例模式:只能产生一个对象的类
public class Singleton2 {
     
      private Singleton2() {}
      
      private static Singleton2 single=null;
 
     public   static Singleton2 getInstance() {
         if (single == null) {  
            single = new Singleton2();
        }  
         return single;
    }
public static void main(String[] args){
  Singleton2 o=Singleton2.getInstance();
System.out.println(o);

}


}


面向对象
思想:从现实出发,抽象,分类,继承,聚合,多态等。
对象是计算机语言对现实世界客观存在的具体事物的描述,类是对象的抽象。
类与类(对象与对象)之间的关系:1.两个类(对象)必然存在一些联系,叫关联关系(has)拥有。
关联特例1.聚合:部分可以属于多个整体,用空心菱形表示。2.组合:部分职能属于一个整体,用实心菱形表示



关系2.继承关系:is a 一般和特殊关系,子类is特殊的父类
关系3.实现关系:针对接口 对接口的实现。
关系4.依赖关系:如果类B的改变会导致类A的改变,则类A依赖类B
包装类:Integer,Byte,Short,Long,Character,Boolean,Float,Double
方法修饰:1.访问控制符(public,private,protected,默认)2.static:静态3:final
对象共同的属性可用static修饰。this指向当前属性或方法,super()父类对象
软件工程1.面向对象分析2.设计3.详细设计4源代码5,.测试6.发布
封装:安全,隐蔽属性和方法。
构造方法:初始化的功能,与类同名,没有返回类型,不写void用new调用
主类跟main无关,只与“文件名和类名相同”的类,就是主类。


{}初始化块;在类中,方法外。对属性赋值1.定义并初始化2.初始化语句块3.通过构造4通过seter(方法)。
类中可定义四种成员1.属性2.方法3.构造4初始化块
重载:在同一类中,名字相同的方法,参数个数,类型,顺序不同。
类加载:加载静态块中的。Static:可以修饰属性和方法(非构造)。


软件设计模式有23种
包:1.管理数目众多的类2.不同的包可以有名字相同的文件。
package表示建立一个包,该语句必须放到非注释的第一句。
包1.必须小写2.域名倒写3.写在第一行4.任何类必须在某个包中5.包的层次无限定6.不能以java开头
java.lang:核心包,java.util:工具包,java.io:输入输出包,java.net:包含执行与网络包java.awt:抽象工


具类
使用import static后,使用类的静态成员时可以不再用类名.静态成员,而直接使用静态成员名。
类权限:1.public:任何地方都能使用2.default(默认,不用写):只能在本包中使用
同一个包下的类,不管是什么访问控制符,都可以随意访问,不同包下的类,只有public修饰的才能被其他类访


问。


继承
子类是父类的延续,子类自动获得了父类的公开字段和方法,子类可以对父类的方法进行修改(重写 override)


,可以在子类中添加新方法,
super关键字可以访问父类的protected成员,消除递归调用。
使用final修饰一个变量时,是指引用不能变,引用变量所指的内容可以改变。


Javadoc命令中可以生成jdk文档。


final方法防治任何继承类重写,final类不能被继承
重写方法的参数必须是父类的子集。
创建子类的一个对象时,它在其中包含了基类的一个对象(super)这个对象就像我们根据基类本身创建了它的一


个对象。从外部看,基础类的对象已封装到衍生类对象里了


在子类的构造器中,java会自动插入基础类的构造器的调用。(super())。假设基类有多个构造器,可以用


super显示调用某个基类构造器,当基类没有默认构造器时,这种显示调用时必须的。
重载发生在编译阶段,重写发生在运行阶段。
继承初始化顺序:先加载父类,再加载子类,加载类时,先加载初始化块再执行构造,static数据只会初始化一


次。


向上转型:用父类的引用指向子类的对象
前期绑定:编译阶段就能执行的方法,又叫静态联编。
后期绑定:运行阶段才能执行的方法,又叫动态联编。
一份代码产生多种行为,叫做多态(通过父类对象调用子类方法),若没有显示声明基类,object就是直接基类



toString();把对象变成字符串输出,重写的是object的toString()方法,打印一个对象即打印对象的toString


()。
final,static,private,方法不具备多态性,重写的过程中不能缩小可视范围。
向上转型之后会丢掉子类的“新方法”(多态的“坏处”)。
重写方法时父类的访问权限不能是static和private,返回类型如果是基类类型必须相同,引用类型必须是相同或


者子类继承父类。
覆盖:父类覆盖子类的属性。
重写:子类覆盖父类的方法。


开闭原则:对扩展开放,但对修改关闭,实现此原则的关键在于抽象化。
抽象方法:只声明,没有方法体:abstract void x();
抽象类:有抽象方法的类,就是抽象类。
接口:一个“纯”抽象类,interface。实现接口用implements。
接口中不能出现“真实”方法,可以有成员变量,他们默认是public static final,反复默认是public 


abstract,实现类必须实现接口中定义的方法,
必须是public。接口有public和默认两种控制权限。
接口与抽象类都不能直接实例化,抽象类中可以有非抽象方法,含有抽象方法的类必须是抽象类。(如果普通类


实现接口,必须重写全部方法,如果是抽象类,
可以实现部分,重写其他抽象方法)。任何实现接口的类必须实现接口里的所有方法,否则此类也被抽象。一个


类只能继承一个类,却可以实现多个接口,
从而可以向上转型为多个接口类。接口可以继承接口。


内部类
只有内部类才有私有的,普通类总是具有包可见性或者共有可见性。
使用内部类有四个原因:1.内部类对象能够访问创建它的对象的实现——包括那些私有数据。2.内部类能够隐藏


起来,不为同一包的其他类所见。
3.匿名内部类可以方便地定义运行时回调4.使用内部类在编写事件驱动的程序时用起来很方便
内部类的特殊语法:1.内部类具有外部类的引用:OuterClass.this.i
2.内部类构造可以显示表示:OuterObject.new InnerClass(construction parameters)
3.内部类的作用范围之外通过OutClass.InnerClass引用内部类
局部内部类:不会使用访问指示符来声明。他们的范围总是限定在声明它们的程序块中。局部内部类有一个很大


的有点——它们能够对外部世界完全隐藏起来。
即使外部类中的其他代码页不能访问它们。除了定义方法中,没有别的方法还会知道局部内部类的存在。相对于


其他内部类而言局部内部类还有一个有点。
它们不仅能够访问外部类中的字段,甚至还能够访问局部变量,不过那些局部变量必须被声明为final的。
匿名内部类:如果你只需要为内部类建立一个对象,那么甚至不必为该类制定一个名字,即匿名内部类。由于构


造方法必须同类名相同,而匿名类没有名字,
所以匿名内部类不能有构造器。取而代之的是,构造参数被送到超类中的构造器中。


异常:异常是java处理错误的一种机制。
    分类:Throwable异常分为Error类和Exception类,Exception类分为RuntimeException类和checkedException


类型。
RuntimeException是运行时异常,CheckedException是一检查异常,代表一系列的异常,非运行时异常



Exception是异常的基类,可以恢复处理的。Error是不能处理的错误。
try{
//可能出现异常的语句1;2;3;
}catch(someException 1){
...
}catch(someException 2){
...
}
...
finally{
...
}
当异常发生时,程序会终止当前的流程,根据获取的类型区执行相应的catch代码,finally段的代码无论是否发


生异常都执行。
单个try块能有多个catch块必须是不活异常的从小到大,抛出后catch不活,用在方法体重,可传递异常信息,终


止程序运行。
throws:方法定义中,代表方法体中可能有异常,谁调用该方法就抛给谁。
几个常用异常:
ArithmeticException:数学异常
ClassNotFoundException:没找到类异常
NullPointerException:空指针异常
ArryIndexOutOfBoundsException:数组越界
优点:异常的抛出与捕获是分离的。
自定义异常类,可以更好的处理程序中出现的异常。


I/O流
File类的实例表示一个文件或者目录,在windows中目录无扩展名,文件名有扩展名。
java中,文件和目录是相同的。
windows中路径用;文件用\分割。
File.separator 路径分隔符
常用方法:f.getName():获取文件名,f.exists():文件是否存在,f.getparent():返回文件所在目录名,


f.getPath():返回相对路径,fisDirectory():测试是否为目录,f.mkdir():创建一个目录,f.lost():列出目录


下的所有文件,f.delete():删除根目录(空目录才能删),f.mkdirs():创建目录(级联),f.createNewFile


()创建文件(无目录不能创建)。
创建文件:
File f1=new File("C:"+File.separator+"x"+File.separatort+"a.txt");
File f2=f1.getParentFile();
if(!f2.exists())){
fp.mkdirs();
}
f1.createNewFile();
输入都有读的动作,输出都有写的动作,输入都有一个源,有读的行为,输出都有一个目标,有写的行为。
字节流:有stream的都代表字节流,所有字节流都继承InputStream,OutputStream。
输入:分为字节InputStream(字节)和Reader(字符)
输出:分为OutputStream(字节)和Writer(字符)
音频,视频,图片,可执行文件,用字节流,其他用字符流。
当流不再需要的时候,调用close方法,放在finally中。字符流只能操作文本。
转换流:字节流转换为字符流使用:InputStreamReader和OutputStreamWriter。
缓冲流:(字节)BufferedReader,BufferedWriter(字符)BufferedInputStream,BufferedOutputStream
用了缓冲就需要刷新flush
常用类:InputStream,


InputStreamTreaer,Reader,FileInputStream,System.in,FileReader,BufferedInputStream,BufferedReader,
OutputStream,OutputStreamWrite,Write,FileOutputStream,System.out,FileWriter,BufferedOutputStream,Bu


fferedWriter


网络编程:Socket编程
网络编程也叫TCP/IP编程。协议:TCP等。
OSI模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。
TCP/IP协议:物理层,数据链路层,网络层,传输层,应用层。
应用层协议:Telnet,FTP,HTTP,DNS,SMTP,POP3.
传输层协议:TCP,UDP.
网络层协议:IP,ICMP,IGMP
UDP是一种无连接的不可靠协议。
C/S通常由Socket实现
客户端和服务器都要有输入和输出流用于接收和发送数据。
ping命令检查网络是否连通。netstat -a命令,检查端口
getInputStream();getOutputStream();用于获得流。
accept()侦听,并接受次套接字的连接。


多线程
线程是指代码的执行。
线程的状态:新建,就绪,运行,阻塞,死亡。
线程存在于进程中,他们与统一进程内的其他线程共享内存,文件句柄以及进程状态。进程是独立的,两个进程


不能共享
调度策略:时间片,抢占式。启动一个线程用start方法。
同级线程谁先来谁先运行,高级线程调用时先运行。
线程死亡条件:程序结束,stop(),异常。
main()是主线程,子线程由主线程建立,限制性主线程,再执行子线程。
方法:Thread.CurrentThread()获得当前线程,getName()获得线程名字,getDriority()获得线程优先级,


修改,优先级SetPriority()。
MAX-PRIORITY线程最高MIN-PRIORITY线程最低级NORM-PRIORITY默认优先级。
wait():不是线程的属性,是Object的方法。
notify():也是Object的方法,通知一个线程,notifyAll()通知所有线程。
sleep():线程睡眠,此时线程不是去所属权。
实现Runnable的线程,只有一个线程体,再用Thread构造一个对象,使用匿名内部类。
java的高优先级线程是绝对优先的,也就是说,派对尽在同意优先级的代码中进行的,线程在“阻塞”状态时不


占用CPU处理时间的。


HTML
HTML:超文本标记语言,网页的“源码”。
浏览器:“解释和执行”HTML源码的工具。
HTML文档的结构
<html>
<head>
<title></title>
</head>
<body>
</body>
</html>




<heml></heml>标记HTML文档的开始和结束。
网页摘要信息利于浏览器解释和搜索。
HTML标签分类:块级:显示为块状,前后隔一行。行级:按行逐一显示。
块级细分:基本标签,布局标签。
基本标签:1.标题标签<h1></h1>...<h6></h6>2.段落标签<p></p>3.水平线标签<hr/>
布局块的标签:
1.有序列表标签
<ol>
<li></li>
...
</ol>
2.无序列表标签
<ul>
<li></li>
...
</ul>
3.定义描述标签
<dl>
<dt></dt>
<dd></dd>
...
</dl>
4.表格
<table>
<tr>
<td>...</td>
</tr>
...
</table>
5.表单
一般和table使用
<form>
...
</form>
6.分区标签
<div>
</div>
常用的块状结构:
1.div-ul(ol)-li常用语分类导航菜单
2.div-dl-dt-dd图文混编
3.table-tr-td图文布局或显示数据
4.form-table-tr-td:布局表单
行级标签
1.图像
<img src="图片地址" alt="提示文字" title="提示文字"/>
2.范围标签<span>显示某行内的独特样式
文本等行级内容
3.换行标签<br/>,一般不用


超链接<a href="链接地址" target="目标窗口位置">连接热点文本或凸显</a>
特殊符号:
空格:&nbsp;
大于:&gt;
小于:&lt;
引号:&quot;
版权号:&copy;




内容:1.结构2.表现3.行为
内部样式是写在<head>里面的,只对所在网页有效
 <style type="text/css">
 ...
 </style>
外部样式:如果网页需要用到同样的样式,可用外部样式,将样式写在一个以.css为后缀的css文件里,然后再每


个需要用的这些文件的网页里引用这个css文件。
样式的优先级:内嵌,内部,外部,浏览器缺省
css几本语法:三部分构成:selector,property,value。
<style type="text.css">
选择器(修饰对象){
对象属性1:属性值1;
对象属性2:属性值2;
}
</style>


选择器:类选择器,伪类选择器,id选择器,标签选择器,派生选择器
网页中所有元素都是盒子
元素内容
填充(内边距)
边框
边界(外边距)
为了控制整个页间距中,添加一个大容器:container
浮动:float  形成文字围绕
clear:清除浮动
绝对定位:position:absolute
超链接的四种状态,伪类选择器
1.a:link{}未访问状态
2.a:visited{}已访问状态
3.a:hover{}鼠标悬浮状态
4.a:active{}激活状态




javaScript
javaScript是网络的脚本语言!一种轻量级的编程语言。
由数行可执行计算机代码组成,直接嵌入HTML页面。
脚本:嵌入的标记
JS全部小写,可以放在正文的任何地方,建议放在head中
外部javascript文件可连接到heml中
<script type="text/javascript" src="文件名.js"></script>


alert();警告框
onload页面加载 
onclick单机出现
变量必须以字母或下滑线开头,小写。
所有数据类型为var,一般不用声明。
全局变量不用var声明,局部变量必须用var声明


javascript中用function定义方法
对表单访问document.forms;
1.document.form[];
2.document.表单名.元素名.value


声明数组:
var 数组名=new Array(数组大小);
声明并赋值
var 数组名=new Array("a","b","c");
sort();排序


浏览器对象:window,document,url...
脚本对象:String,Date,Math...
HTML对象:<p>,<img>,<a>...


getElementById()函数可以得到非表单元素在内存中的对象


正则表达式:用某种模式去匹配一类字符串的一个公式。
以\n开始 $\结束
定义e=\n...$\
使用e.test()
分类:范围:[],{},()
      匹配符:+,-
      转义符:\d,\w
\d只能匹配数字,\w只能匹配字母和数字
{}范围,[]列举,()分组
贪婪匹配:+,?,.
匹配中文:[\u4e00-\u9fa5]










关系型数据库oracle
数据库:层次型,网状型,关系型,对象型
对象关系型的数据库管理系统(ORDBMS)
跨操作系统,跨硬件平台的数据互操作能力


oracle体系结构
oracle服务器:oracle数据库,oracle实例
实例:内存结构:共享池,数据缓冲区,日志缓冲区。后台进程:PMON,SMON,DBWR,LGWR,CKPT,其他。
oracle数据库由系统文件组成
包括逻辑结构和物理结构
数据库:参数文件,口令文件,归档文件,数据文件,控制文件,日志文件。
PLA:为用户进程服务


物理组件:数据文件,控制文件,日志文件
逻辑组件:数据库,表空间,段,区,数据块
模式:oracle数据库用户创建和存储数据库对象的总称。


段:段是构成表空间的逻辑存储结构,段由区组成
段有四种类型:数据段,索引段,会推断和临时段。
区:区为段分配空间,它由连续的数据块组成。装满后,会分配一个新区。
数据块:是oracle服务器所能分配读取或写入的最小存储单元。
模式对象包括,表,试图,索引,同义词,序列,过程,程序包和函数。


oracle实例的几种进程
实例进程:用户进程,服务进程,后台进程。
表空间是数据库中最大的逻辑单位,一个oracle数据库至少包含一个表空间,即system的系统表空间。
一个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间关联。


创建表空间语法:
CREATE TABLESPACE TABLESPACENAME
DATAFILE 'FILENAME'
SIZE INTEGER[KM]
AUTOEXTEND ON
授权用户:
GRANT ALL ON TEST TO MARTIN;
GRANT RESOURCE TO MARTIN;
回收用户权限:
REVOKE CONNECT,RESOURCE FROM MARTIN;


通过INSTANCE来访问DATABASE
SQLPLUS /NOLOG控制台打开命令
步骤:1.表空间2.建用户3.将用户绑定表空间4.建表5.操作数据
SPOOL C:\STUDENT.TXT
SPOOL OFF
把sql语句保存在C盘STUDENT.TXT中
SELECT USERNAME FROM ALL_USERS;
DISC断开当前连接
COMMIT提交
ROLLBACK回滚(提交后不能回滚)


SQL:DDL,DML,TCL,DCL
oracle数据类型:字符,数值,日期时间,LOB大对象
字符类型:CLOB,BLOB,BFILE
ORACLE中伪列就像一个列表,但是它并没有储存在表中
常用的伪列有ROWID和ROWNUM,ROWID是物理地址,ROWNUM是逻辑序号,伪列可以从表中查询,不能插入更新和删



TRUNCATE可删除数据但不记日志,数据还在但不能访问,做标记,阶段
DDL语句自动提交
标准:关键字大写,标示符小写
修改表结构:ALTER TABLE 表名:MODIFY:修改已有表的列的数据类型。ADD:增加列。DROP:删除列。


DESC 表名: 查询表结构
DESC USER_RECYCLEBIN:查询回收站
FLASHBACK TABLE 表名 TO BEFORE DROP 闪回(对表的回收站)
PURGE RECYCLEBIN;清空回收站
DROP TABLE 表名;删除表并清空回收站
HELP INDEX 帮助查询


1.建表空间2.建用户3.分配权限4.创建对象5.建立完整性约束6.插入数据7.检索数据
CLEAR BUFF清除缓存
CLEAR SCR清屏
六大约束:1.非空 NOT NULL 2.主键PRIMARY KEY 3.外键FOREIGN KEY 4.检查CHECK 5.唯一UNIQUE 6.默认


DEFAULT


增加约束:ADD CONSTRAINT 主键名:PRIMARY KEY;增加键
主键不为空和唯一约束条件


oracle标示符长度不超过30
两列以上的主键称为表级主键
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME FROM USER_CONSTRAINTS;
查询当前用户有哪些约束在数据字典中查询
建表级主键:CREATE TABLE TAB(
A NUMBER,
B NUMBER,
CONSTRAINT PK_TAB_A_B PRIMARY KEY(A,B));
删除约束:ALTER TABLE 表名
DROP CONSTRAINT 约束名;


日期数据类型默认“DD-MON-RR”
插入日期类型的值:语法 INSERT INTO TABLE_NAME(列1...)
BALUES(值1...);
伪表DUAL:不用定义,系统自用就有,主要用来做数学和日期函数的运算。
友好名(别名):SELECT 2-1 HAHA FROM DUAL;


今天的日期:SELECT SYSDATE FROM DUAL;
函数:TO_DATE('2005-10-24','YYYY-MM-DD')可以设定日期格式
ALTER SESSION SET ULS_DATE_FORMAT='YYYY-MM-DD';更改格式日期
非空和默认约束,如果再建表时未添加,只能以修改表modify来添加
创建用户
CREATE USER 用户名
IDENTIFIED BY NO9527
绑定表空间 DEFAULT TABLESPACE 表空间名
配额 QUOTA UNLIMITED ON 表空间名


去除重复行:SELECT DISTINCT 列名FROM 表名
ORACLE控制命令:设置页长度SET PAGESIZE 大小;
设置行长度SET LINESIZE 大小;
打开时间  SET TIME ON;
语句执行时间SET TIMING ON;
快速删表TRUNCATE TABLE 表名;


SAVEPOINT:保存点,可以回滚保存点处。


事务是最小的工作单元,作为一个整体进行工作,这些工作要么全做要么全不做。
作为一个逻辑单元,必须具备四个属性:原子性,一致性,独立性和持久性。
原子性:指事务必须是一个自动的单元工作,要么全做要么全不做。
一致性:是指事务完成时,必须使所有数据都具有一致的状态。
独立性:指并行事务修改必须与其他并行事务的修改相互独立。
持久性:指一个事务完成之后,它的影响永久性的产生在系统中。
用COMMIT提交后,保存点失效
INSERT INTO 表名(列1...)SELECT 列1.... FROM 表;批量插入


INSERT 操作需要注意的几个问题:
1.字符串类型的字段值必须用单引号括起来
2.如果字段值是包含单引号需要进行字符串转换,把它地换成两个单引号。
3.字符串类型的字段值超过定义长度会出错,最好先检验
4.日期值可以用当前系统时间sysdate,精确到秒。
5.INSERT时如果用到从1开始增加的序列号,应先建立一个序列号


delete语法  delete from表名;
delete注意
1.删除记录并不能释放oracle里被占用的表空间,它只把那些被删除的数据块标记成unused
2.如果确定要删除一个大表里的全部记录,可以用truncate语句,它以释放占用的表空间,语句为truncate 


table表名;此操作不可回退。


SQL操作符:算数操作符,比较操作符,逻辑操作符,集合操作符,链接操作符
比较:=,<>,<,>,<=,>=,between ... and ,in,like not in,in not like, is null,is not null
通配符:%匹配零个或多个和_匹配一个
LIKE只对字符有效,算数只对数值有效
LIKE模糊查询
IN()括号汇总可以是值也可以是select语句


集合操作:UNION并集,UNION ALL并集,INTERSECT交集,MINUS补集
集合操作符将两个查询的结果组合成一个结果
UPDATE语法:UPDATE 表名 SET表名=新值 WHERE


NVL函数:NVL(n,0)如果n为null则为0,若不为null则为本身
函数:单行函数,分组函数


一个月前的日期:ADD_MONTHS(SYSDATE,-1)D FROM DUAL;
今天是星期几:TO_CHAR(SYSDATE,'DAY')D FROM DUAL;
今天是一年第几天:TO_CHAR(SYSDATE,'DDD')D FROM DUAL;
今天是周几TO_CHAR(SYSDATE,'DD')D FROM DUAL;
今天是第几季度TO_CHAR(SYSDATE,'D')D FROM DUAL;
今天是一年的第几周TO_CHAR(SYSDATE,'Q')D FROM DUAL;
本年第几周TO_CHAR(SYSDATE,'WW')D FROM DUAL;


排序ORDER BY ()


oracle中select的六个子句
1.select列
2.from表
3.where条件
4.group by 分组
5.having 条件
6。order by列
执行顺序234516
分页查询:
SELECT * FROM (SELECT ROWNUM NO,E.* FROM(SELECT * FROM EMP ORDER BY SAL DESC) E WHERE ROWNUM<=5)


WHERE NO>=3;




WHERE 是分组前的过滤 HAVING是分组后的过滤
表的别名对多表查询很重要
SQL注入是一种黑客利用不完善的SQL语句进行攻击的手段。


SQL函数:单行函数,分组函数,分析函数
单行函数可出现在select子句和where子句中


LOWER变小写
UPPER变大写
INITCAP首字母大写
INSTR在串中查询
LPAD/RPAD左/右填充
TRIM去空格
REPLACE 替换
CONCAT链接
SUBSTR去子串




数字函数:
ABS绝对值
CEIL先下取整
FLOOR向上取整
POWER次方
MOD取余
ROUND四舍五入
TRUNC截断


CASE 列名 WHEN 值1 THEN 值2 ELSE 值3 END


DECODE函数
DECODE(表达式.0,X....)


分组函数:AVG,MIN,MAX,SUM,COUNT
GROUP BY 列名分组,可用于分组查询
HAVING用于分组后的条件
在SELECT子句中除了分组函数外,其他的列必须出现在GROUT BY中,否则错
GROUP BY 子句中出现的列,不一定出现在SELECT 子句中




关联子查询
SELECT T.* FROM (SELECT E.* ,(SELECT AVG(SAL)FROM EMP WHERE DEPTNO=E.DEPTNO)GZ FROM EMP E)T THERE 


T.SAL<T.GZ


子查询分类:单行单值,单行多值,多行单值,多行多值


快速建表
CREAT TABLE 表名 AS SELECT * FROM 表名1
优化:尽量不用IN 用EXIST替代
尽量不用<>或!=用A>0或A<0
尽量不用通配符
尽量不用先计算后在比较


数据库不支持数组,用INSTR和SUBSTR补充
求平均值不包含NULL,任何列跟NULL加都等于0;


关联查询
INNER JOIN 内连接
LEFTER OUTER JIIN 外连接
RIGHT OUTER JOIN做链接
FULL JIIN 全连接


ORACLE 支持的链接类型
EQUI JOIN:等值
NON-EQUI JOIN:非等值链接
INNER JOIN:内连接
LEFT JOIN:左外连接
RIGHT JOIN:右外连接
FULL JOIN:全连接
SELF JOIN:自连接


第二范式:所有列都依赖主键
第三范式:满足第二范式,非主键不能互相依赖


笛卡尔积的形成:
一个链接条件被遗漏时
一个链接条件不正确
在第一个表的所有行被链接到第二个表的所有行时
笛卡尔积结构:行相乘,列相加
笛卡尔积会造成大量数据勇于


链接:笛卡尔积是链接的基础,不是链接,链接就可以去除冗余
内连接分为三中:等值连接,不等值链接,自然连接


笛卡尔积又称交叉连接
形式:select from 表1,表2


内连接的写法:select * from * 表1,表2 where 表1ID=表2ID AND 条件


尽量使用左链接,避免使用内连接,全连接可以使用集合
左链接的左表必须出现在结果中


oracle两种优化器:RBO基于规则,CBO基于开销


还原:INSERT INTO EMP2 SELECT * FROM EMP2 AS OF TIMESTAMP(SYSDATE)
或用系统改变号SELECT * FROM EMP2 AS OF SCN 852814


ORACLE 命令:SHUTDOWN IMMEDIATE  关闭数据库,卸载数据库,关闭例程




STARTUP 例程启动,数据库装载,数据库打开
STARTUP NOMOUNT 启动例程,不装载
ALTER DATABASE MOUNT修改装载文件
ALTER DATABASE OPEN;修改数据库


ALTER DATABASE DATAFILE '文件' OFFLINE DROP;
数据文件丢失,用数据把文件对应的表空间删除


共享池是对SQL,PL/SQL程序进行语法分析,编译,执行的内存区域,共享池的大小直接影响数据库的性能。


当用户与oracle实例服务器的链接非正常中断时,由PMOD进程负责释放用户锁定的资源


解析后的SQL语句在SGA的共享池区域中进行缓存。


DBWN和归档重做日志文件保证及时数据库的修改没有记录到数据文件,提交的数据也能保存下来,用户执行


UPDATE事件不会引起LGWP进程启动。


oracle对象深入
1.表


2.序列
SEQUENCE 
定义序列:CREATE SEQUENCE 序列名()
START WITH 10 起始值
MINVALUE 10 最小值
MAXVALUE 30 最大值
INCREMENT BY 5 每次增加
注意:序列没有修改,只能删除后重新建立;
序列建立在数据字典中
先执行NEXTVAL才能执行CURRVAL,CYCLE循环
序列可以给主键列一个值(永不重复)


3.视图
安全,简化查询
CREATE VIEW 表名 AS SELECT * FROM 表名...


4.同义词
作用:很方便的操作不同用户下的对象
能使用两个应用程序时用不同的名字的同一个表对象
使用不同的用户只想同一张表
建同义词:CREATE SYNONYM  名 FOR SCOTT.EMP
创建同义词步骤:
1.首先在超级管理用下创建一个用户:HA/NO9527
2.由超级管理用给HA授予权限
GRANT CONNECT,RESOURCE TO HA;
3.在超级管理员下,创建一个公有同义词:ABC
CREATE PUBLIC SYNONYM ABC FOR SCOTT.EMP;
4.在超级管理下,将SCOTT方案的EMP表的所有权限授予HA
GRANT ALL ON SCOTT.EMP TH HA;
5.重新用HA账户登录系统,执行以下语句,检测是否同义词有效
SELECT * FROM ABC;


创建私有同义词步骤:
1.由sys用户授予QIUXIANG创建私有同义词的权限
GRANT CREATE SYNONYM TO QIUXIANG;
2.QIUXIANG登录创建私有同义词
CREATE SYNONYM XYZ FRO CZ;
3.执行查询,检测同义词创建是否成功
SELECT * FROM XYZ;
4.由QIUXIANG授权给HA访问CZ表的权限
GRANT ALL ON CZ TO HA;
5.HA 登录后检测私有同义词能不能访问
SELECT * FROM QIUXIANG.CZ;可以访问
SELECT * FROM XYZ;不能访问


5.索引
用于提升查询效率的数据库对象
通过快速定位数据的方法,减少磁盘I/O操作
索引信息与表独立存放;
oracle数据库自动使用和维护索引
分类:唯一索引,非唯一索引
自动创建:在定义主键或唯一健时系统会自动创建唯一索引。
手动创建:用户可以再其它列上创建非唯一的索引,以加速查询。
缺点:1.占物理空间2.降低维护速度
小于5M的表,最好不要使用索引来查询,表月少,月适合用全表扫描。
索引利于SELECT,但对经常INSERT,DELETE尤其UPDATE的表,会降低效率
创建索引:
CREATE INDEX ABC ON 表名(列1...);


数据库设计:1.需求分析2.概念模型设计3.逻辑模型4.物理模型5.试试阶段6.运行阶段


PL/SQL
PL/SQL工作原理:由PL/SQL引擎把PL/SQL和SQL语句变成SQL语句,然后送到ORACLE服务器执行SQL执行。
块是PL/SQL程序的基本单位,PL/SQL不区分大小写
结构
DECLARE用于声明变量,游标,赋值等
BEGIN
EXCEPTION
END;


定义变量:DECLARE VAR_NAME[CONSTANT] TYPE [NOT NULL] [:=VALUE];
变量名首位必须是字母。
条件语句:IF-THEN-ELSIF  ELSE  END IF;
循环结构:LOOP循环类似于DO-WHILE


语法
LOOP
 EXIT;
END LOOP;


WHILE-LOOP类似于WHILE
FOR-LOOP类似于FOR
PL/SQL中不赋值的变量都为NULL


列类型: 变量 表.列%TYPE 表里某列类型一样
行类型: 变量 表.表%TYPE


PL/SQL中支持SELECT INTO,只能接受一行语句


异常:1.预定义异常2.自定义异常
抛出异常用RAISE关键字
在执行部分用WHEN THEN 捕获异常


游标:用来处理使用SELECT语句从数据中检索到多行记录的工具。


游标分类:显示游标:定义,打开,使用,关闭,隐示游标:直接使用,自动打开,定义,使用
隐示主要:SELECT,UPDATE,DELETE,INSERT
游标属性:%FOUND,%ISOPEND,%NOTFOUND,%ROWCOUNT


游标声明:CURSOR 名 IS SELECT语句(不含into语句)


打开游标语法:OPEN CURSOR_NAME
提取游标:FETCH 名
关闭游标:CLOSE 名 INTO 接受变量


REF引用游标:动态游标
定义:TYPE JCLG IS REF CURSOR;
      V_CURSOR JCLG;
运行过程中只想不同结果
例:
DECLARE
  TYPE  JCLG IS REF CURSOR;
  V_CURSOR JCLG;
  V_EMP EMP%ROWTYPE;
BEGIN
  OPEN V_CURSOR FOR SELECT * FROM EMP;
LOOP
  FETCH V_CURSOR INTO V_EMP;
  EXIT WHEN V_CURSOR%NOTFOUND;
  DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);
END LOOP;
  CLOSE V_CURSOR;
END;
FOR游标:用FOR循环来处理游标,不用定义,打开,关闭。


SELECT INTO 中分组函数不触发NO_DATA_FOUND异常


动态SQL,在PL/SQL中对于DDL语句,只能用动态SQL,编译期间SQL语句是不确定的。
语法:EXECUTE IMMEDIATE 名;
动态SQL建表:
DECLARE
  V_SQL VARCHAR2(1000):='CREATE TABLE TEMP_USER';
BEGIN
  V_SQL:=V_SQL||'(NO NUMBER,NAME VARCHAR2(20),AGE NUMBER);
  EXECUTE IMMEDIATE V_DQL;
  V_SQL:='INSERT INTO TEMP_USER VALUES(111,''AAA'',22)';
  EXECUTE IMMEDIATE V_SQL;
EXCEPTION
  WHEN OTHERS THEN
  DBMS_OUTPUT.PUT_LINE('ERROR');
END;


存储过程(有名称的块),存在数据库中的对象
CREATE OR REPLACE PROCEDURE P_EMP AS ...
过程参数(参数类型,方向(in,out,in out ))




函数
CREATE OR REPLACE FUNCTION F_EMP RETURN NUMBER AS ...
用匿名块调用过程和函数


过程和函数只有调用才会使用,块不用调用


查看源代码:SELECT NAME,TEXT FROM USER_SOURCE


触发器


触发器是oracle的一种对象
触发器无参数,不能出现TCL语句,turncate语句不会触发,自动触发
触发器分类:DML触发器,系统触发器,替代触发器。
触发器有以下作用:安全性,审计。


DML触发器:基于表的,分为行级,语句级,before级,after级。
系统触发器:对于用户和实例。
替代触发器:用在视图上。
对delete只有old没有new
对update有old和new
对insert只有new没有old
FOR EACH ROW 决定是行级还是语句级


CREATE OR REPLACE TRIGGER TR_DEMO_ADD
BEFORE INSERT ON DEMO
FOR EACH ROW
DECLARE
BEGIN
SELECT SEQ_DEMO.NEXTVAL INTO :NEW.ID FROM DUAL;
END;  

INSERT INTO DEMO(NAME)VALUES('PPP') 
替代触发器:instead of 触发器


条件谓词


如果触发触发器的时间超过一种类型的DML语句,
例如在表EMP上INSERT,DELETE和UPDATE,




那么触发器体能够使用条件位于INSERTING,DELETING和UPDATING
去运行特定的代码块,这依赖于触发器的语句类型。
错误代码范围【-20000,-20999】


替代触发器例:


CREATE OR REPLACE TRIGGER TR_EMP_DEPT
INSTEAD OF INSERT ON TEST11
FOR EACH ROW
DECLARE
BEGIN
 insert into emp3
     (empno, ename, job, mgr, hiredate, sal, comm, deptno)
   values
     (:NEW.empno, :NEW.ename, :NEW.job, :NEW.mgr, :NEW.hiredate, :NEW.sal, :NEW.comm, :NEW.deptno);
     insert into dept2
     (deptno, dname, loc)
   values
     (:NEW.deptno, :NEW.dname, :NEW.loc);
   
END;


ALTER TRIGGER 触发器名 DISABLE
禁用触发器


ALTER TRIGGER 触发器名 ENABLE
启用触发器


数据库导入导出


根据不同的故障有不同的备份方式。


故障类型:语句故障,用户进程故障,实例故障,介质故障。
备份:物理备份,逻辑备份。


导入导出文件的后缀名为.DMP




JDBC:JAVA数据库连接技术,是一种用于执行SQL语句的API,可以为多种关系数据库提供统一访问,它由一组用


JAVA语言编写的类和接口组成。


JDBC中包括两个包:java.sql和javax.sql


java.sql.Connection:与特定数据库的连接


java.sql.Driver:每个驱动程序必须实现的接口


java.sql.DriverManager:管理一组JDBC驱动程序的基本服务


java.sql.Statement:用于执行静态SQL语句并返回结果对象


java.sql.PreparedStatement:用于访问数据库中的存储过程


java.sql.ResultSet:查询返回的数据库结果集


加载驱动:方式一:Class.forName("oracle.jdbc.driver.OracleDriver")
方式二:Driver dir = new oracle.jdbc.driver.OracleDriver;
DriverManager.registerDriver(dir);


oracle协议:"jdbc:oracle:thin:@IP:1521:服务名"


建立连接:
Connection conn = DriverManager.getConnection


("jdbc:oracle:thin:@ip:1521:jclg","scott","tiger");


建立语句对象:
Statement stat = conn.createStatement();


执行SQL语句:int result = stat.executeUpdate("CREATE TABLE JDBC (ID NUMBER)");
成功返回0,失败抛异常


JDBC中默认是自动提交的。


查询语句用ResultSet得到结果集
ResultSet rst = stat.executeQuery("SELECT * FROM");
rst为光标,开始在第一行之前,用rst.getInt()取第一行
rst.next()光标向下一行


预处理方式:
1.通过连接获得PreparedStatement对象,用?
2.设置参数
3.执行SQL语句


采用PreparedStatement 作用:提升执行效率,防范SQL注入,提升效率


例:
PreparedStatement pstat = conn.prepareStatement("INSERT INTO JDBC(ID,NAME)VALUES(?,?)");
pstat.setInt(1,9527);
pstate.setString(2,qiuxiang):
int result = pstate.executeUpdate();


存储过程的调用
Callable.statement cstat = conn.preparecall({call 名(...)});
cstat.setInt(1,7369);//输入参数直接调用SET
cstat.registerOutParameter(2,TYPE.INTEGER);//输出参数必须这样注册
cstat.execute();
int result=cstat.getInt(2);


数据库JDBC步骤
1.注册JDBC驱动程序
2.建立到DB连接
3.建立SQL语句
4.执行SQL语句
5.处理结果
6.与数据库断开连接


JDBC的异常处理,释放资源,事务处理
释放资源顺序,先创建后释放。
例:
import java.sql.*;
public class test {
public static void main(String[] args) {
Connection conn = null ;
Statement stat = null ;
try{
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection


("jdbc:oracle:then:@192.168.2.25:1521","scott","tiger");
conn.setAutoCommit(false);
stat = conn.createStatement();
stat.executeUpdate("UPDATE EMP SET SAL=1200 WHERE EMPNO=7369");
stat.executeUpdate("INSERT INTO DEPT(DEPTNO,DNAME,LOC)VALUES


(10,'DDD','WH')");
conn.commit();
}catch(Exception e){
throw new RuntimeException(e);
}finally{
try{
conn.rollback();
stat.close();
conn.close();
}catch(Exception e){
throw new RuntimeException(e);
}
}
}
}




JDBC中是默认自动提交
查询语句用ResultSet得到结果集:RsultSet rst=stat.excuteQuery("select * from emp");
预处理语句:PreparedStatement pstat=conn.prepareStatement(JDBC(ID.NAME)values(?,?)");预处理语句
pstate,setInt(1,9595);
pstate.setString(2,qinxiang);
int result=pstat.exanteUpdate();


异常处理
try{
con.setAutoCommit(false);
statement stm = con.createStatement();
stm.executeupdate("insert into person(id,name,age)values(520,'x-mar,18)")
stm.exemteupdate("insert into person(id,name,age)rames(521,j'super',191');
con.commit();
}catch(SQL Exception e){
try{
con.rolback();
}catch(Exception e){}失败则自动回滚
}


释放JDBC资源顺序,先创建,后释放
resultSet.close();
seatement:colse();
cometio.close();


jsp服务器:weblog,webspace,tomcat,jboss,reason
B/S结构:程序全部部署在服务器上,用户通过浏览器访问应用程序
B/S结构中浏览器与服务器采用请求/响应模式进行交互
目前主要是3P技术:ASP.NET,JSP,PHP
使用URL实现页面访问“同意资源定位符”
URL组成:1.协议2.主机3.资源地址
Servlet概念:Servlet是一个运行在服务器上的java程序,它是在服务器上运行的处理客户端请求并作出响应的


程序。
Servlet容器为java web应用体通天运行时环境,它负责管理Servlet和JSP的生命周期,以及管理他们的共享数据



Servlet容器也成java web应用容器,或Servlet/jsp容器


通常将web应用程序放在目录webapps下,在webapps目录下的每一个子目录都是一个独立的web应用程序,子目录


的名字就是web应用程序的名字,也就是web应用程序的“根”。用户通过应用程序的“根”来访问web应用程序的


资源。
Servlet是java的类,一种技术。


六部运行一个servlet 1.安装web服务器tomcat 2.在tomcat下创建web application,建立相应目录结构3.编写


servlet源代码4.编译servlet源代码5.在web.xml中穿件一个deployment desriptor。6.运行tomcat,测试


servlet


web服务器只处理静态网页,应用服务器可以处理动态网页。
编辑web.xml:<servlet>
<servlet-name>Testing</servlet-name>
    </servlet>
    <servlet-mapping>
<servlet-name>Testing</servlet-name>
<url-pattern>/testingservlet</url-pattern>
    </servlet-mapping>


servlet的生命周期:1.类加载2.实例化3.初始化4.请求处理5.服务终止
servlet引擎采用多线程


servlet接口:在servlet初始化过程中获取配置信息
   一个servlet值有一个servletconfig对象。


get和post的区别:get不安全,长度有限,请求头,post安全,长度不限,请求体


servlet容器相应客户请求的过程: 1.servlet容器检查是否已装载并创建该servlet实例对象。如果是,则直接


执行第四部,否则第二部
2.装载并创建servlet的一个实例对象:调用该servlet的构造器
3.调用servlet实例对象的init()方法
4.创建一个用于封装请求的servletquest对象和一个代表相应消息


servletresponse对象,然后调用servlet的service()方法并将请求和响应对象作为参数传进去
5.web应用程序被停止或重新启动之前,servlet引擎将写在servlet,并将写


在之前调用servlet的destroy()方法


requestDispatcler类:作用实现请求转发可以使一个servlet实例另一个servlet
使用步骤:1.获取requestdispataor类,requestdispatchan dispatcher=request.getrequestdispatcher(url);
 2.实现转发dispatcher.forward(request,response);


保存数据方案:1.保存在上下文中servletcontext 2.request请求HttpSrvletRequest setAttribute 3.session


会话:Httpsession getAttribute


三种传值:1.request.setAttribute("key","10");
          2.getservletcontext.setAttribute("key","10");
          3.request.getssion().setAttribute("key","10");


转发是服务器行为,重定向是客户端行为。
转发过程:
客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动


作----》将目标资源发送给客户;
在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器


内的request。
在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为


是浏览器只做了一次访问请求。   


重定向过程:
客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户


浏览器发现是302响应,
则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。
在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。
在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两


次的访问请求的。                                                                                    


                                                                                                    


                                                                                                    


                                                                      
cookie是将状态信息记录到容器端浏览器中。如果cookie没设置生命周期,那么这种cookie称为状态cookie。


session用来在服务端保护客户端的状态:1.通过request获得与当前客户端关联的session对象
    2.使用Httpsession中的getAttribute()获得Session对象
    3.使用Httpsession中的getAttribute()将状态保存在session中
                                     4.使用HttpsessionrequestAttribute将session中的删除 


如果用session保存,在cookie中保存sessionID,内容保存在session中,再次请求从cookie中带出sessionID


1.Filter过滤器1.实现Filter接口 2.doFilter方法重写参数(request,response,dochan)
Filter工作在servlet之前
2.注册Filter


3.作用:拦截,请求,拦截,响应
                                                                                                    


                                                                              Listener接口   接口是


一个强制性,是一种标准


监听器可用来初始化Listener,Filter,Servlet


可以用来初始化
              
JSP指:在HTML中嵌入JAVA脚本代码
在应用服务器中的JSP引擎来编译和执行嵌入的java脚本代码,然后将生成的整个页面信息返回给客户端


web容器处理成JSP文件请求需要经过三个阶段:1.翻译阶段,将JSP文件翻译成java,只发生在第一次请求
 2.编译阶段,将java编译成.class文件,只执行一次 
 3.执行阶段


翻译:把HTML放在out.print.writer输出,把<%%>去掉
如果对JSP文件进行了修改,web容器会重新自动翻译和编译


JSP构成元素:1.Declaration声明
    2.Scriptlet脚本   
3.Expression表达式
    4.Conment注释
    5.Directives动作
    6.Action动作指令
    7.内置对象


Directive相当于在编译期间的命令


将制定的JSP程序或者HTML文件包含进来


内置对象out是printwrite的实例
表达式在循环结果集用的多


内置对象request是Httpservletrequest的实例


JSP就打内置对象 1.application
2.session
3.request
4.response
5.out
6.config
7.page
8.pagecontext
9.exception


动态包含:用动作,可传参
静态包含:用指令,不可传参


静态包含是把代码copy过来,同意翻译(注意变量重复定义)
发生在翻译阶段,用预编译指令


动态包含法正在运行阶段,用动作指令


在动态运行时,JSP将会首先转换成servlet,并以servlet的形态编译运行,因此它的效率和功能与servlet相比


没有差别,一样具有很高的效率 




pagecontext,request,application,session都有setAttribute()和getAttribute()方法
page:页面范围,只能在本页面
request:请求范围,可以跳转
session:作为一段用户持续和服务器所连续的时间,但与服务器断线后,属性就无效了。
Application:范围在服务器开始到服务器关闭


用URL重定向,解决禁用cookie问题:put.println(response.enconeURL("9.jsp");
不管cookie支不支持,重写URL第一次都可以带sessionID


集合:conection:set:不重复,无序 list:可重复,有序  Map:图  Iterable


vector:古老的类,不建议用


集合只能装对象,大小可变




DAO对JDBC的封装,一种Java的数据访问对象,对数据库的访问,javaBean是java规范的一个类
Dao是JavaBean的一个类


JsessionID请求JSP页时产生一个Jsessionid,状态cookie根据服务器端产生


comparable接口:此接口强行实现它的每个类的对象进行整体排序。




1.model:jsp+jsp/servlet
2.model:jsp+javaBean
3.mvc:jsp+servlet+dao
4.ea   ssh


javabean 要实现序列化接口
javabean:主动:和dao写在一起  被动:和dao分开


javabean模型是数据库中表的结构对应字段对应属性,表中的记录对应模型中的实例DAO是操作模型的类
1.增加一个包implementation
2.正价一个接口IUsersDAO,将update改成save,dao继承接口
3.补充完list方法,完成main方法中的单元测试
4.增加模型中的tostring方法
5.启动tomcat,请求页面
6.如果出错先插注册路径在user中加一个list也
7.在控制层加liat
8.做删除注册,增加方法




JSTL/EL为了消除脚本


EL表达式${变量}变量源于四中范围


EL作用域:pagescope
 requestscope
 sessionscope
 applicationcope




JSTL:sun公司定义的替换的标签<:html>
前缀


用jsp动作标签,用El标签,用标签库三种方法替换脚本


JSP页中加入核心标签


<%@taglib prefix="c" url"=   " "%>


EL只有pagecontext一个内置对象




连接池两大厂商:DBCP    C3PO
数据源是含有数据绑定链接的


通过JNDI:java:COMP/evom/jdbc/...
一种协议


元数据:描述底层数据结构的数据


Hibernate是一个开元框架(对象关系映射框架)
对JDBC进行了轻量级封装


持久化:将程序中数据在顺势状态和持久状态间转换的过程


持久化层:实现持久化的层


ORM:对象关系映射Object Relationship Mapping
面向对象处理技术
对象映射到数据库中


ORM方案:在持久化对象上执行增删改查操作
对持久化对象或属性查询的一种语言
用于实体关系映射的工具
能够与实务对象相互执行检查,延迟,加载的其他功能




使用hibernate操作数据库的七个步骤
1.读取并解析配置文件
configuration  conf = new configuration().configure();
2.读取并解析映射信息
sessionFactory sf=conf.buildsessionfactory()
3.打开session
session session=sf.opensession()
4.开始一个事物
transaction tx = session.begin transaction();
5.操作数据库
session.save(u);
6.提交
tx.commit();
7.关闭
session.close();
sf.close();




实体对象的三种状态
瞬时状态:刚用new语句创建,还没有被持久化,且不处于session的缓存中


持久状态:已被持久化,且被加到session的缓存中


游离状态:已被持久化,但不在session的缓存中


一级缓存:对数据库的改变
二级缓存:预处理语句(数据库中)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值