아래 개선형 DB 긁기 (Java)
역시 동일하게 처리속도도 빠르고 모든 SELECT SQL형태에 대응 한다.
-------------------DAO설정

 private Connection conn=null;
 PreparedStatement pstmt = null;

public Connection connection()
  {
   try
   {
    // 드라이버 적재
    Class.forName(_driver);
   
    // DB 연결
    conn = DriverManager.getConnection(_url, _id, _passwd);
   }
   catch(Exception e)
   {
    System.out.println("DB연결 실패");
    System.out.println(e.getMessage());
   }
   return conn;
  }
-------------------- 읽을부분설정
        DAO dao = new DAO();
        Connection conn = dao.connection();
        PreparedStatement psmt = null;
        PreparedStatement psmt2 = null;

try
  {
         Find= null;
 
         String[] value = new String[2];
         value[0] = start;
         value[1] = end;
           
         Find = GetFastDatas(psmt,value);

---------------- 호출
static public String [][] GetFastDatas(PreparedStatement pstmt,String[] values)
 {
   String[][] datas = null;
  
  ResultSet rs = null;
  boolean state = true;
 
  try
  {
   for(int i=0;i<values.length;i++)
   {
    //System.out.println(values.length + "");
    pstmt.setString(i+1, values[i]);
   }
   
   rs = pstmt.executeQuery();
   
   state = true;
   
   ResultSetMetaData rsmd = rs.getMetaData();
   int numberOfColumns = rsmd.getColumnCount();
   
   ArrayList al = new ArrayList();
   while(rs.next())
   {
    for(int i=1;i<numberOfColumns+1;i++)
    {
     al.add(rs.getString(i));
    }
   
   }
   int rows = al.size()/numberOfColumns;
   
   datas = new String[rows][numberOfColumns];
   for(int i=0;i<rows;i++)
   {
    for(int j=0;j<numberOfColumns;j++)
    {
     datas[i][j] = String.valueOf(al.get(i * numberOfColumns + j));
    }
   }
   
   
  }
  catch(SQLException e)
  {
   e.printStackTrace();
   state = false;
  }
  catch(Exception e)
  {
   e.printStackTrace();
   state = false;
  }
  finally
  {
   
  }
  
   if(!state)
   {
    return null;
   }
  
   return datas;
 }
by Tomoya 2009.04.13 18:03

아래 개선형 DB 긁기 (C# 2.0)
처리속도도 빠르고 역시 모든 SQL형태에 대응 할수 있다.
컨넥션 얻어 오는 것은 아래 글 참조

using System.IO;
using System.Data.Sql;
using System.Data;
using System.Data.OracleClient;
using Oracle.DataAccess;

----------------------------------
OracleCommand cmd = new OracleCommand(sql, DbConn.GetConn());

            OracleDataReader rd;

            Find = null;//길 찾기 배열 초기화

            cmd.Parameters.AddWithValue(":SID", startbstop);
            cmd.Parameters.AddWithValue(":EID", endbstop);

            cmd.Connection.Open();

            rd = cmd.ExecuteReader();
            Find = GetOraDatas(rd);
--------------------------------------------------

//오라클 데이터 받아오기
        public static string[][] GetOraDatas(OracleDataReader rd)
        {
            string[][] datas = null;

            try
            {
                if (rd.HasRows)//데이터 테이블의 크기가 0보다 크다면
                {
                    int dt_cols_count = rd.FieldCount;

                    int k = 0;
                    ArrayList temparr = new ArrayList();
                    while(rd.Read())
                    {
                        for (int j = 0; j < dt_cols_count; j++)
                        {
                            temparr.Add(Convert.ToString(rd[j]));//데이터를 생성한 배열에 저장
                        }
                        k++;
                    }

                    bisdatas = new string[temparr.Count/dt_cols_count][];//행만큼의 2차원 배열 생성
                    for (int i = 0; i < temparr.Count / dt_cols_count; i++)
                    {
                        bisdatas[i] = new string[dt_cols_count];//해당 행만큼 세부 1차원 배열 생성
                        for (int j = 0; j < dt_cols_count; j++)
                        {
                            datas[i][j] = (string)temparr[(i * dt_cols_count) + j];
                        }
                    }
                }
                else
                {
                    bisdatas = null;//0보다 작다면 null값 설정
                }
            }
            catch (Exception ex)
            {
                using (StreamWriter sw = new StreamWriter("./sqlerror.txt"))
                {
                    //string message = "can not read file";
                    sw.WriteLine(ex.Message);//오류 발생시 sql에러로 저장
                }
            }
            finally
            {
               
            }

            return datas;//해당 sql문의 쿼리 결과를 2차원 문자열 배열로 전송
        }

by Tomoya 2009.04.13 17:56
| 1 |