Oracle优化器介绍 转载地址:http://www.cnblogs.com/dongzhiquan/archive/2012/01/20/2328365.html本文讲述了Oracle优化器的概念、工作原理和使用方法,兼顾了Oracle8i、9i以及最新的10g三个版本。理解本文将有助于您更好的更有效的进行SQL优化工作。 RBO优化器 RBO是一
1.ROWNUM的使用——TOP-N分析,2.ROWNUM是对满足查询条件的数据集的编号3.ROWNUM详细介绍ROWNUM是一个序列,是oracle数据库从数据文件或缓冲区中读取数据的顺序。它取得第一条记录则rownum值为1,第二条为2,依次类推。如果你用>,>=,=,between...and这些条件,因为从缓冲区或数据文件中得到的第一条记录的rownum为1,则被删除,接着取下
在使用索引时 有一下几种情况会导致所以失效 1 在Where子句中使用函数。 如在日期字段Date 设置索引但查询时使用函数 where to_char(date,'yyyy')='2012' 进行了转换则导致索引失效 2 不匹配的数据类型 如 字符 和 数字之间 会进行默认转换 的使用小心非常容易导致索引失效 数据库有一个字段int num 在查询时 where num='123' 这个就会导致真正在数据库执行时自动添加了转换函数to_char(num) 这也就是隐式使用函数 3 在Where子句中使用IS NULL或者IS NOT NULL 会让在这个列上的索引失效 4 复合索引 如 字段A B C,建立的组合索引 create index (A,B,C) select where A=' '此时索引有效 但如果 使用 selet where B='' 索引无效 规则当只是组合索引的个别字段
概要什么是单一索引,什么又是复合索引呢? 何时新建复合索引,复合索引又需要注意些什么呢?本篇文章主要是对网上一些讨论的总结。一.概念单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上。用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。复合索引的创建方法与创建单一索引的方法完全一样。但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引。当表的行
2.XSD(XML Schemas Definition) XML Schema语言也就是XSD。XML Schema描述了XML文档的结构。 可以用一个指定的XML Schema来验证某个XML文档,以检查该XML文档是否符合其要求。文档设计者可以通过XML Schema指定一个XML文档所允许的结构和内容,并可据此检查一个XML文档是否是有效的。XML Schema本身是一个XML文档,它符合XML语法结构。可以用通用的XML解析器解析它。 一个XML Schema会定义:文档中出现的元素、文档中出现的属性、子元素、子元素的数量、子元素的顺序、元素是否为空、元素和属性的数据类型、元素或属性的默认 和固定值。 XSD是DTD替代者的原因,一是据将来的条件可扩展,二是比DTD丰富和有用,三是用XML书写,四是支持数据类型,五是支持命名空间。 XML Schema的优点: 1) XML Schema基于XML,没有专门的语法 2) XML Schema可以象其他XML文件一样解析和处理 3) XML Schema比DTD提供了更丰富的数据类型. 4) XML Schema提供可扩
地址:http://blog.csdn.net/zhengyeqing520/article/details/6091656在实例中引用模式文档XML Schema提供了两个在实例文档中使用的特殊属性,用于指出模式文档的位置。这两个属性是:xsi:schemaLocation和xsi:noNamespaceSchemaLocation,前者用于声明了目标名称空间的模式文档,后者用于没有目
spring在加载xsd文件时总是先试图在本地查找xsd文件(spring的jar包中已经包含了所有版本的xsd文件),如果没有找到,才会转向去URL指定的路径下载。这是非常合理的做法,并不像看上去的那样,每次都是从站点下载的。事实上,假如你的所有配置是正确定的,你的工程完全可以在断网的情况下启动而不会报上面的错误。Spring加载xsd文件的类是PluggableSchemaResolver,你可以查看一下它的源码来验证上述说法。另外,你可以在log4j.xml文件中加入: [html]view plaincopyprint? <loggername="org.springframework.beans.factory.xml"> <levelvalue="all"/> </logger> <logger name="org.springframework.beans.factory.xml"> &nbs
1 背景 Javabean的名字来自一个Java API,就是一组规范。规范的目的在于简化编写易于理解的Java类。 符合javabean设计模式的类,JavaBean提供Java的自省能力。 也可以使得Java开发工具具有更易操作性,显示也更符合逻辑。 JavaBean规范 (1) JavaBean类必须Public,公共的无参构造函数(目的不知道类名的情况下可以动态创建实例) 如 String className = ...; Class beanClass = Class.forName(className); Object beanInstance = beanClass.newInstance(); (2) JavaBean 公共字段 一般眼提供公共的g
一、 概念 序列化 反序列化 概念可分为 狭义 广义(个人观点) 狭义概念: 指JavaBean实现Serializable 或 Externalizable接口 进行byte流和JavaBean之间互转。 Java 串行化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流 里的数据读出来,重新构造一个相同的对象。 广义的概念: 将JavaBean对象转换为便于保存或传输的形式,如转换为XML 或 JSON等 实现这个技术有很多种常见有 1 Java 通过实现序列化接口 2 JavaBean转换为XML 3 JavaBean转换为JSON
Java String对象是一个比较特殊的对象 存放String对象有两个地方 1. 堆 2. String池 大概的存放过程: String st = "abc" String sts = new String("abc") 第一个: 首先第一步去String池中查找是否有"abc"这个对象,如果有则返回引用 没有则在String池中创建一个"abc"对象 第二个: 在堆内创建一个新对象 返回引用,如果String池内没有则也创建一个对象,如果有则不创建。 所以 String st = new Strig("abc") 如果String池中没有则会创建两个对象。 new Strig("abc").inner 返回的是对应在String池中的引用。 "abc" == new String("abc").inner true是正确的(字面常量也会在String池中创建对象 或之间引用池中的对象) &nb
Java 串行化技术可以使你将一个对象的状态写入一个Byte 流里,并且可以从其它地方把该Byte 流里的数据读出来,重新构造一个相同的对象。这种机制允许你将对象通过网络进行传播,并可以随时把对象持久化到数据库、文件等系统里。Java的串行化机制是RMI、EJB等技术的技术基础。用途:利用对象的串行化实现保存应用程序的当前工作状态,下次再启动的时候将自动地恢复到上次执行的状态。 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现Serializable接口,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。 2、串行化的特点: (1)如果某个类能够被串
java中的字符串 :String类是不可变的(final),对String类的任何改变,都是返回一个新的String类对象。 String 对象是 System.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。 把String类的引用传递给一个方法,该方法对String的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似。 String池 :String是不可改变的,为了提高效率Java引用了字符串池的概念,例如new String("abc");首先会在String池中创建一个对象“abc”,因为有NEW的存在所以会分配地址空间copy String池的内容。当出现的String对象在String池中不存在时即在String池中创建该对象。 注意:String池中可以出现一样的字符串 如: String st = new String("ab") String st2 = new String("ab&
在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。 泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。 2规则和限制 1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。 2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。 3、泛型的类型参数可以有多个。 4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。 5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String"); 泛型还有接口、方法等等,内容很多,需要花费一番功夫才能理解掌握并熟练应用。在此给
Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。
本为主要讲述HashMap HashSet 等此类数据结构的存储原理 以及解析一下几个常见问题 为什么要求实体Bean不仅要重写equals() 还要重写hashCode() 通过get()方法去获取 首先通过键值对象的hashCode()生成散列,确定键值所在数组的位置,然后遍历List通过equals()方法去匹配 这就是为什么要求实体Bean不仅要重写equals() 还要重写hashCode() 如下重写 return getId().hashCode(); 为什么 数组中再放一个List,而不是一个键值对应一个数组位置呢? 这是因为 我们所用的上述容器,都是可以扩容的,而数组的不能长度是一定的。这就会导致键值的个数大于数组的长度。为解决这个问题不同的键值可以产生相同的散列码。 为什么String类型不需要重写以上两个方法呢? 这是因为Java对String类在内存存储时进行了优化。 比如String st1 = new String("kk") String st2 = new
正则表达式中 什么是组概念 \\w(\\d{3})(.*) 通过括号 可以把正则表达式分成2部分及2组 这就是组的概念 通过方法group() 和 group(0)是一样的 表示整个正则表达式 group(1) 获取上一次匹配中(\\d{3})所匹配的字符串 group(2)获取上一次匹配中(.*)所匹配的字符串
主要讲解 正则表达式重常用的类和方法 Pattern 和 Matcher 以及下面的group find start end 等常用方法 这个正则表达式有三个组: 整个\w(\d\d)(\w+) 是第0组 group(0) (\d\d)是第1组 group(1) (\w+)是第2组 group(2)
1.JVM -- java virtual machineJVM就是我们常说的java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解释给本地系统执行。 2.JRE -- java runtime environmentJRE是指java运行环境。光有JVM还不能成class的执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。所以,在你写完java程序编译成.class之后,你可以把这个.class文件和jre一起打包发给朋友,这样你的朋友就可以运行你写程序了。(jre里有运行.class的java.exe) 3.JDK -- java development kitJDK是java开发工具包,基本
1.有些参数在某些阶段中是常量 比如:a、在开发阶段我们连接数据库时的连接url,username,password,driverClass等 b、分布式应用中client端访问server端所用的server地址,port,service等 c、配置文件的位置 2.而这些参数在不同阶段之间又往往需要改变 比如:在项目开发阶段和交付阶段数据库的连接信息往往是不同的,分布式应用也是同样的情况。 期望:能不能有一种解决方案可以方便我们在一个阶段内不需要频繁书写一个参数的值,而在不同阶段间又可以方便的切换参数配置信息 解决:spring3中提供了一种简便的方式就是context:property-placeholder/元素
System.load 和 System.loadLibrary详解
编写native修饰的本地方法和开发动态链接库步骤 附加 例子 和 用到的相关jar包
在Java源代码中经常会看到 native 修饰的方法(但这个方法在Java中并没有实现) 以及动态链接库这个概念。其实动态链接库就是native具体的实现方法,只不过这是一个后缀名为dll的文件,这个文件使用其它语言来写的。 这下大概就把这个概念的搞明白了,所谓的动态链接库就是有其它语言的实现的函数,并可以被Java中的native修饰的方法调用。
通过程序 演示一个Java类的加载和初始化过程
CXF 拦截器 以及配置使用
在引入cxf-2.2.4.jar和引入cxf-2.2.7.jar是需要引入不同的jar包在引入cxf-2.2.7.jar时还需要引入woodstox-core-asl-4.2.0.jarstax2-api.jarcx
Spring CXF 整合
严重: Error initializing endpoint java.lang.Exception: Socket bind failed: [730048]
spring中的org.springframework.web.util.IntrospectorCleanupListener的监听器。 它主要负责处理由 JavaBeans Introspector的使用而引起的缓冲泄露。
ContextLoaderListener监听器的作用是启动Web容器时,自动装配ApplicationContext的配置信息。 因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。 有两种配置方法: 一 默认的路径是"/WEB-INF/applicationContext.xml 路径和配置文件的名称都是固定的 二 将之放到classpath下,但是此时要在web.xml中加入<context-param>,用它来指明你的applicationContext.xml的位置 名称和路径自己可以自己指定
JIT是just in time,即时编译技术。使用该技术,能够加速java程序的执行速度。下面,就对该技术做个简单的讲解。 首先,我们大家都知道,通常javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢。为了提高执行速度,引入了JIT技术。 在运行时JIT会把翻译过的机器码保存起来,已备下次使用,因此从理论上来说,采用该JIT技术可以,可以接近以前纯编译技术。下面我看看,JIT的工作过程。
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号