笨小孩's profile李宁PhotosBlogLists Tools Help

笨小孩

Occupation
Location
Interests
Lists

李宁

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 patters

The 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;
 
Photo 1 of 9
No list items have been added yet.