2011年4月17日
摘要: 下面将举一个通过数据库函数来调用存储过程:创建数据库函数存储过程CREATE OR REPLACE FUNCTION stu_proc ( v_id IN NUMBER) RETURN VARCHAR2 IS v_name VARCHAR2(20);BEGIN SELECT o.sname INTO v_name FROM student o WHERE o.id=v_id; RETURN v_name;EXCEPTION WHEN OTHERS THEN RETURN '数据未找到';END; JAVA通过调用数据库函数调用存储过程package com.ljq.test;i 阅读全文
posted @ 2011-04-17 21:53 Ruthless 阅读(4499) 评论(1) 推荐(1) 编辑
摘要: 1、创建添加存储过程CREATE OR REPLACE PROCEDURE stu_proc(v_id IN NUMBER, v_name IN VARCHAR2, v_age IN NUMBER) ASBEGIN INSERT INTO student(id, sname, age) values (v_id, v_name, v_age); commit;END; JAVA调用添加存储过程package com.ljq.test;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.SQLE 阅读全文
posted @ 2011-04-17 20:06 Ruthless 阅读(3555) 评论(0) 推荐(1) 编辑
摘要: 下面将举出JAVA对ORACLE数据库存储过程的调用 ConnUtils连接工具类:用来获取连接、释放资源package com.ljq.test;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;/** * 连接工具类 * * ConnUtils类声明为final类说明此类不可以被继承 * * @author jiqinlin * */public final clas 阅读全文
posted @ 2011-04-17 17:47 Ruthless 阅读(26812) 评论(0) 推荐(2) 编辑
摘要: 1、无参数存储过程的调用--创建无参存储过程CREATE OR REPLACE FUNCTION stu_proc RETURN VARCHAR2 IS --声明语句段 v_name varchar2(20);BEGIN --执行语句段 SELECT o.sname INTO v_name FROM student o where o.id=1; RETURN v_name;END;--调用无参存储过程DECLARE BEGIN DBMS_OUTPUT.put_line('在PL/SQL中打印的结果:'||stu_proc);END; 2、入参存储过程的调用--创建入参存储过程 阅读全文
posted @ 2011-04-17 13:56 Ruthless 阅读(20340) 评论(0) 推荐(1) 编辑
  2011年4月16日
摘要: SQL中调用存储过程语句:callprocedure_name();注:调用时”()”是不可少的,无论是有参数还是无参数. 定义对数据库存储过程的调用时1、无参数存储过程:{callprocedure_name}2、仅有输入参数的存储过程:{callprocedure_name(?,?...)}。这里?表示输入参数,创建存储过程时用in表示输入参数3、仅有输出参数的存储过程:{callprocedure_name(?,?...)}。这里的?表示输出参数,创建存储过程时用out表示输出参数4、既有输入参数又有输出参数的存储过程{callprocedure_name(?,?...)}。这里的?有表 阅读全文
posted @ 2011-04-16 21:04 Ruthless 阅读(12886) 评论(0) 推荐(1) 编辑
摘要: 1、存储过程的语法结构:CREATE OR REPLACE PROCEDURE 过程名 AS 声明语句段;BEGIN 执行语句段;EXCEPTION 异常处理语句段;END; 2、SELECT INTO STATEMENT将SELECT查询的结果存入到变量中,可以同时将多个列存储多个变量中,必须有一条记录,否则抛出异常(如果没有记录抛出NO_DATA_FOUND)例如:BEGIN SELECT col1,col2 INTO 变量1,变量2 FROM typestruct where xxx;EXCEPTION WHEN NO_DATA_FOUND THEN xxxx;END; 3、IF 判断I 阅读全文
posted @ 2011-04-16 19:18 Ruthless 阅读(1292) 评论(0) 推荐(0) 编辑
  2011年4月15日
摘要: Maqetta简介 4月12日,IBM公司在 IBM Impact 2011 上面发布了 Maqetta,一个创建桌面和移动用户界面的HTML5设计编辑工具,并同时宣布将项目捐助给开源机构Dojo基金会。Maqetta提供WYSIWYG可视化HTML5用户界面设计功能,仅需简单的拖曳操作,支持桌面和移动用户界面。 Maqetta应用本身用HTML5/Ajax编写,因此运行在浏览器中无需请求额外的插件或下载。用户可以下载源码,并安装在自己的服务器上,并可自定义源码来满足自己的需求,再回馈到开源项目。 Maqetta功能●WYSIWYG可视化页面编辑 ●拖曳式移动UI设计 ●设计或源码浏览同步编辑 阅读全文
posted @ 2011-04-15 15:09 Ruthless 阅读(8581) 评论(1) 推荐(1) 编辑
摘要: 题目如下:在生产者/消费者模型中,生产者Producer负责生产数据,而消费者Consumer负责使用数据。多个生产者线程会在同一时间运行,生产数据,并放到内存中一个共享的区域。期间,多个消费者线程读取内存共享区,消费里面的数据。 分析在下面Java应用程序中,生产者线程向一个线程安全的堆栈缓冲区中写(PUSH)数据,消费者从该堆栈缓冲区中读(POP)数据,这样,这个程序中同时运行的两个线程共享同一个堆栈缓冲区资源。 类Producer是生产者模型,其中的run方法中定义了生产者线程所做的操作,循环调用push()方法,将生产的100个字母送入堆栈中,每次执行完push操作后,调用sleep方 阅读全文
posted @ 2011-04-15 10:27 Ruthless 阅读(21153) 评论(2) 推荐(2) 编辑
  2011年4月14日
摘要: 1、写两个线程,一个线程打印1-52,另一个线程打印字母A-Z。打印顺序为12A34B56C……5152Z。学习线程之间的通信协调关系。代码线程类Thread01package com.ljq.test;public class Thread01 implements Runnable { private Object obj; public Thread01(Object obj) { this.obj = obj; } public void run() { synchronized (obj) { for (int i = 1; i <= 26; i++) { System.out 阅读全文
posted @ 2011-04-14 17:03 Ruthless 阅读(2597) 评论(0) 推荐(1) 编辑
  2011年4月13日
摘要: 适当的使用索引可以提高数据检索速度,可以给经常需要进行查询的字段创建索引 oracle索引分为3种: normal: 可重复数据,普通索引unique: 数据不能重复,唯一索引bitmap: 位图索引创建索引的标准语法: CREATE INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 例如:CREATE INDEX idx_of_imsi ON uim_auth_file(imsi) TABLESPACE users; 创建唯一索引: CREATE unique INDEX 索引名 ON 表名 (列名) TABLESPACE 表空间名; 例如:CREATE UNIQU 阅读全文
posted @ 2011-04-13 16:53 Ruthless 阅读(1892) 评论(1) 推荐(1) 编辑
摘要: ORACLE有个高速缓冲的概念,这个高速缓冲就是存放执行过的SQL语句,那oracle在执行sql语句的时候要做很多工作,例如解析sql语句,估算索引利用率,绑定变量,读取数据块等等这些操作。假设高速缓冲里已经存储了执行过的sql语句,那就直接匹配执行了,少了步骤,自然就快了,但是经过测试会发现高速缓冲只对简单的表起作用,多表的情况完全没有效果,例如在查询单表的时候那叫一个快,但是假设连接多个表,就龟速了。最重要一点,ORACLE的高速缓冲是全字符匹配的,什么意思呢,看下面三个select--No.1select * from tableA;--No.2select * From tableA 阅读全文
posted @ 2011-04-13 14:20 Ruthless 阅读(26667) 评论(6) 推荐(8) 编辑
摘要: --oracle查找重复记录select * from tableA a where a.rowid>=(select min(rowid) from tableB b where a.column=b.column) --oracle删除重复记录delete from tableA a where a.rowid>=(select min(rowid) from tableB b where a.column=b.column) 阅读全文
posted @ 2011-04-13 11:24 Ruthless 阅读(999) 评论(1) 推荐(1) 编辑
摘要: 一、多表联合查询 通过连接可以建立多表查询,多表查询的数据可以来自多个表,但是表之间必须有适当的连接条件。为了从多张表中查询,必须识别连接多张表的公共列。一般是在WHERE子句中用比较运算符指明连接的条件。 两个表连接有四种连接方式: * 相等连接 * 不等连接(看作单表查询) * 外连接* 自连接(自关联) 1.相等连接 通过两个表具有相同意义的列,可以建立相等连接条件。使用相等连接进行两个表的查询时,只有连接列上在两个表中都出现且值相等的行才会出现在查询结果中 显示雇员名称和所在部门的编号和名称。 执行以下查询: SELECT a.ename, b.id, b.dname FROM emp 阅读全文
posted @ 2011-04-13 10:45 Ruthless 阅读(17615) 评论(0) 推荐(1) 编辑
  2011年4月11日
摘要: 前天俺们谈到了加锁(线程同步),但是在使用加锁的同时又会带来一个问题,就是死锁。什么叫死锁?所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。发生死锁的原因一般是两个对象的锁相互等待造成的。那么为什么会产生死锁呢?1.因为系统资源不足。2.进程运行推进的顺序不合适。 3.资源分配不当。 学过操作系统的朋友都知道:产生死锁的条件有四个:1.互斥条件:所谓互斥就是进程在某一时间内独占资源。2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。3.不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。4. 阅读全文
posted @ 2011-04-11 23:21 Ruthless 阅读(37144) 评论(7) 推荐(2) 编辑
摘要: 本文转自http://jiangzhengjun.iteye.com/blog/652269中断线程线程的thread.interrupt()方法是中断线程,将会设置该线程为中断状态,即设置为true。线程中断后的结果是死亡、还是等待新的任务或是继续运行至下一步,取决于这个程序本身。线程会不时地检测这个中断标识位,以判断线程是否应该被中断(中断标识值是否为true)。它并不像stop方法那样会中断一个正在运行的线程。判断线程是否被中断判断某个线程是否已被中断,请使用Thread.currentThread().isInterrupted()方法(因为它将线程中断标识位设置为true后,不会立刻 阅读全文
posted @ 2011-04-11 17:04 Ruthless 阅读(14684) 评论(3) 推荐(3) 编辑
  2011年4月10日
摘要: 写一个程序,模拟4个售票窗口共同卖100张火车票的程序。 1:使用继承Thread类方式实现()。2:使用实现Runnable接口方式实现()。 第一种方式(没有共享数据,售票窗口各自买100张票,那4个售票窗口就有400张票) package com.ljq.test;/** * 使用Thread 阅读全文
posted @ 2011-04-10 20:41 Ruthless 阅读(14064) 评论(4) 推荐(2) 编辑
摘要: Thread类中run()和start()方法的区别如下:run()方法:在本线程内调用该Runnable对象的run()方法,可以重复多次调用;start()方法:启动一个线程,调用该Runnable对象的run()方法,不能多次启动一个线程; package com.ljq.test;public class ThreadTest { /** * 观察直接调用run()和用start()启动一个线程的差别 * * @param args * @throws Exception */ public static void main(String[] args){ Thread thread= 阅读全文
posted @ 2011-04-10 13:20 Ruthless 阅读(62218) 评论(3) 推荐(3) 编辑
  2011年4月8日
摘要: 以下内容转自http://blog.sina.com.cn/guoyalun如何创建和理解线程 曾经在学习操作系统的时候,进程是一个重点内容,线程也学习过,但是没有什么深刻的印象。在Java多线程的学习中对线程有了一个全面而深刻的理解。一个进程可以包含一个或多个线程,一个线程就是一个程序内部的一条执行线索。 创建多线程有两种方法:继承Thread类和实现Runnable接口。通过调用继承thread对象的start()方法就可以调用该类中的run()方法。如果想要将一段代码在一个新的线程上运行时,该代码就应该位于一个类的run函数中,并且run()函数所在的类是Tread类的子类。启动一个新的 阅读全文
posted @ 2011-04-08 16:37 Ruthless 阅读(5974) 评论(2) 推荐(1) 编辑
  2011年3月31日
摘要: package com.ljq.analyzer;import java.io.StringReader;import jeasy.analysis.MMAnalyzer;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.SimpleAnalyzer;import org.apache.lucene.analysis.Token;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.cj 阅读全文
posted @ 2011-03-31 22:39 Ruthless 阅读(2353) 评论(0) 推荐(1) 编辑
摘要: package com.ljq.one;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.standard.StandardAnalyzer;import org.apache.lucene.document.Document;import org.apache.lu 阅读全文
posted @ 2011-03-31 22:18 Ruthless 阅读(11062) 评论(0) 推荐(3) 编辑