| 笨小孩's profile李宁PhotosBlogLists | Help |
|
李宁March 24 关于抽象抽象是一种能让你在关注某一概念的同时可以放心地忽略其中一些细节的能力-在不同的层次处理不同的细节。任何时候当你在对一个聚合物品工作时,你就是在用抽象。当年把一个东西称为“房子”而不是由玻璃、木材和钉子构成的组合体时,你就是在用抽象。当你把一组房子称为“城镇”时,你还是在使用抽象。 --代码大全 P89 April 16 JDBC 写 Clob 到数据库中(oracle 9i)创建一个表LOB_TEST
CREATE TABLE LOB_TEST ( A NUMBER(10), B BLOB, C CLOB ) 下面是java代码
package test; import java.io.*; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Random; /**
* A general-purpose SQL interpreter program. **/ public class ExecuteSQL { final static String url="jdbc:oracle:thin:@127.0.0.1:1521:test"; //orcl为数据库的SID final static String user="test"; final static String password="test"; final static String driver="oracle.jdbc.driver.OracleDriver"; final static String filePath="D:\\test\\test.txt"; public static void main(String[ ] args) { Connection conn = null; // Our JDBC connection to the database server PreparedStatement pstmt = null; Random random=new Random(); String num=String.valueOf(random.nextLong()); try { StringBuffer sql=new StringBuffer(); StringBuffer updateSql=new StringBuffer(); sql.append("INSERT INTO guof_test (A,C) values ('"+num+"',EMPTY_CLOB())"); updateSql.append("SELECT A,C from guof_test WHERE A= ? For update"); conn = getConnection(); conn.setAutoCommit(false); Statement state = conn.createStatement( ); state.executeUpdate(sql.toString()); state.close(); pstmt = conn.prepareStatement(updateSql.toString()); pstmt.setString(1, num); ResultSet rest = pstmt.executeQuery(); File parsed = new File(filePath); BufferedReader in =new BufferedReader(new InputStreamReader(new FileInputStream(parsed))); String readStr=null; if(rest.next()){ oracle.sql.CLOB clob = (oracle.sql.CLOB) rest.getClob("C"); Writer outStream = clob.getCharacterOutputStream(); try{ while((readStr=in.readLine())!=null){ outStream.write(readStr); } outStream.close(); }catch (IOException e) { e.printStackTrace(); } finally { try { outStream.close(); } catch (IOException e) { e.printStackTrace(); } } } conn.commit(); conn.setAutoCommit(true); } catch (Exception e) { e.printStackTrace();; } finally {
try { conn.close( ); } catch (Exception e) { } } } /**
* @return * @throws ClassNotFoundException * @throws SQLException */ public static Connection getConnection() throws ClassNotFoundException, SQLException { Connection conn; if (url == null) throw new IllegalArgumentException("No database specified"); if (driver != null) Class.forName(driver);
conn = DriverManager.getConnection(url, user, password); return conn; } } February 09 工作感悟来到东软电信已经有3个月了,感到在学校学的知识很肤浅,自己的平时积累还很不够,但是广泛的涉猎也确实让我感觉到对于现在软件公司的一些硬伤应该如何进行改进。
今天突然客户让我们改产品变更的页面,这个页面使整个BSS最复杂的页面,稍作改动就会荡掉,我认为要想根治这个问题要作两步
1.编写详细的测试用例,用Junit进行详细的测试,在测试完备的基础上进行代码的重构
2.重构是个系统工程,将现在的代码改造成面向对象的设计。
3.从跑junit测试
October 29 Design pattersThe Singleton Patterns :ensures a class has only one instance ,and provides a global point of access of it. June 12 PL/SQL 小练习(scott\tiger)
一.pl/sql 1.从DEPT,EMP表中选出部门的员工数大于3的部门号,部门名。 SELECT COUNT(*) AS SUMDEPNO,D.DEPTNO,D.DNAME FROM EMP E,DEPT D WHERE E.DEPTNO =D.DEPTNO GROUP BY E.DEPTNO,D.DEPTNO,D.DNAME HAVING COUNT(*)>3 2.求出EMP表中HIREDATE在1981年并且并且JOB 是以‘M’开头的员工的薪金总和 。 SELECT SUM(SAL)
FROM EMP WHERE TO_CHAR(HIREDATE,'YYYY-MM-DD') LIKE '1981%' AND JOB LIKE 'M%' 3.选出COMM为空并且部门号不是30、薪金小于2700 的员工号,名字。 SELECT * FROM EMP WHERE COMM IS NULL AND DEPTNO <> '30' AND SAL>2700 4.选出部门中管理员手下超过2个人的管理员的信息.
SELECT E1.* FROM EMP E1 WHERE EMPNO IN( SELECT MGR FROM EMP E2 GROUP BY MGR HAVING COUNT(*)>=2 ) 5.选出部门20,30中最高工资和最低工资的差额. SELECT MAX(SAL)-MIN(SAL) FROM EMP WHERE DEPTNO ='20' OR DEPTNO='30' GROUP BY DEPTNO 6.求EMP中名字中第二个字母是L的员工所在的部门信息。
SELECT * FROM EMP WHERE ENAME LIKE '_L%' 7.求出部门的平均工资。 SELECT AVG(SAL),DEPTNO FROM EMP GROUP BY DEPTNO 8.求出在部门的平均工资大于3000的部门中工资大于2000的员工信息。 SELECT * FROM EMP WHERE DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) >2000) AND SAL>2000 二.
1.输入一个部门号,利用PROCEDURE,游标,将部门号中的员工号,姓名,工作,薪金打印到屏幕上. (输入为空的时候打印全部信息)。 create or replace procedure getInfor(ID_Dept in number) is TYPE cur_ref_cursor_type IS REF CURSOR; my_cursor cur_ref_cursor_type; C_EMPNO EMP.EMPNO%TYPE;
C_ENAME EMP.ENAME%TYPE; C_JOB EMP.ENAME%TYPE; C_MGR EMP.MGR%TYPE; C_HIRDATE EMP.HIREDATE%TYPE; C_SAL EMP.SAL%TYPE; C_COMM EMP.COMM%TYPE; C_DEPTNO EMP.DEPTNO%TYPE; begin open my_cursor for select * from emp where deptno=ID_Dept; LOOP FETCH my_cursor INTO C_EMPNO,C_ENAME,C_JOB,C_MGR,C_HIRDATE,C_SAL,C_COMM,C_DEPTNO; EXIT WHEN my_cursor%NOTFOUND; DBMS_OUTPUT.put_line (C_EMPNO||','||C_ENAME||','||C_JOB||','||C_MGR||','||C_HIRDATE||','||C_SAL||','||C_COMM||','||C_DEPTNO); END LOOP; end getInfor; May 24 Oracle存储过程小例子--(scott\tiger)
--输入一个部门号,利用PROCEDURE,游标,将部门号中的员工号,姓名,工作,薪金打印到屏幕上.
--(输入为空的时候打印全部信息)。 create or replace procedure getInfor(ID_Dept in number) is
TYPE cur_ref_cursor_type IS REF CURSOR; my_cursor cur_ref_cursor_type; C_EMPNO EMP.EMPNO%TYPE;
C_ENAME EMP.ENAME%TYPE; C_JOB EMP.ENAME%TYPE; C_MGR EMP.MGR%TYPE; C_HIRDATE EMP.HIREDATE%TYPE; C_SAL EMP.SAL%TYPE; C_COMM EMP.COMM%TYPE; C_DEPTNO EMP.DEPTNO%TYPE; begin open my_cursor for select * from emp where deptno=ID_Dept; LOOP FETCH my_cursor INTO C_EMPNO,C_ENAME,C_JOB,C_MGR,C_HIRDATE,C_SAL,C_COMM,C_DEPTNO; EXIT WHEN my_cursor%NOTFOUND; DBMS_OUTPUT.put_line (C_EMPNO||','||C_ENAME||','||C_JOB||','||C_MGR||','||C_HIRDATE||','||C_SAL||','||C_COMM||','||C_DEPTNO); END LOOP; end getInfor; |
|
|||
|
|