본문 바로가기

프로젝트/예제 및 샘플

MariaDB에서 MultiSelect Example

프로젝트 요건중


1. 대량건수 Select

2. 한번의 Select에서 한건의 데이타 조회

3. 성능 이슈 있음 - Migration의 용도도 사용


적당한게 뭐 없나 열심히 찾아보고 테스트 하는 시간이 더 많이 걸린듯.

일단 Select라 배치형태의 처리는 힘들고, Rowset을 사용해 볼까도 했지만,

MariaDB 의 JDBC 가 지원안한것 같아 고민하던중 다음과 같은 옵션 발견


allowMultiQueries=true


그 옵션을 활용한 Multi Select 예제


Connection conn = null;
		PreparedStatement ps = null;
		
		int paramCount = oriDataArry.length;
		String [] returnData = new String[paramCount];
		
		try {
			conn = ds.getConnection();
			// MariaDB의 DB Connection Option중 allowMultiQueries=true 설정되어 있어야 가능.
			String queryStr = "SELECT ENC_DATA FROM TOKEN_ENC_MAPPING WHERE DESTINATION_NAME = ? AND DATA_CODE = ? AND TOKEN = ?;";
			StringBuffer queryStrBuff = new StringBuffer();
			for (int i = 0 ; i < paramCount ; i++) {
				queryStrBuff.append(queryStr);
			}
			ps = conn.prepareStatement(queryStrBuff.toString());
			
			// oriData Array
			for (int i = 0 ; i < paramCount ; i++) {
				ps.setString(1+(i*3), destinationName);
				ps.setString(2+(i*3), bizKey);
				ps.setString(3+(i*3), oriDataArry[i]);
			}
			
			boolean success = ps.execute();
			logger.debug("복호화를 위한 암호화값 조회 성공 여부 : {}" , success);
			int resultCount  = 0;
			
			do {
				logger.debug("결과 조회 {}번째",resultCount);
			    ResultSet resultSet = ps.getResultSet();
			    if (resultSet.next()) {
			    	returnData[resultCount] = resultSet.getString("ENC_DATA");
			    } else {
			    	returnData[resultCount] = null;
			    }
			    resultCount++;
			} while(ps.getMoreResults());

		} catch (SQLException se) {
			logger.error("DB SQLException 발생", se);
			se.printStackTrace();
		} finally {
			try { ps.close(); } catch (SQLException se1){}
			try { conn.close(); } catch (SQLException se1){}
		}
		
		return returnData;


'프로젝트 > 예제 및 샘플' 카테고리의 다른 글

SAP GUI에서 RFC Destination 설정  (0) 2014.09.12