반응형
안녕하세요. 자바프로젝트 입니다.
불철주야 개발에 열심이신 개발자님 반갑습니다.
mybatis 경우 이미 만들어진 sql 을 조회합니다.
그러나 만약 사용자가 쿼리를 만들어서 파라메터로 받은 다음 조회 할 경우는 어떻게 할까요?
즉 동적으로 sql 를 실행하는 경우 입니다.
몇가지 방법이 있습니다.
그 중에 하나입니다.
/**
*
* @param query (sql 쿼리가 들어감)
* @return 쿼리 쿼리 결과가 리턴함( KEY : columnList ,dataList )
* (columnList -> 컬럼 리스트, dataList - > 데이터)
*/
public Map<String, Object> getQueryResultData(String query) {
Map<String,Object> queryResultData = new HashMap<String,Object>();
List<String> columnList = new ArrayList<String>();
List<Map<String,Object>> dataList = new ArrayList<Map<String,Object>>();
String JDBC = "com.mysql.jdbc.Driver";
String URL = "jdbc:mysql://localhost:3306/javaproject";
String ID = "javaprojject";
String PWD = "1234";
String SQL = query.replaceAll(";","");
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
try {
Class.forName(JDBC);
conn = DriverManager.getConnection(URL, ID, PWD);
psmt = conn.prepareStatement(SQL);
rs = psmt.executeQuery();
ResultSetMetaData meta = rs.getMetaData();
int colCnt = meta.getColumnCount();
for(int i = 1;i<=colCnt;i++) {
String name = meta.getColumnName(i);
columnList.add(name);
}
while(rs.next()) {
Map<String,Object> cont = new HashMap<String,Object>();
for(int i = 1;i<=colCnt;i++) {
String name = meta.getColumnName(i);
Object value = rs.getObject(i);
if(value == null)value = "";
if(value instanceof String) {
value = ((String)value).replace("\\", "\\\\")
.replace("\'", "\\\'")
.replace("\"", "\\\"")
.replace("\r\n", "\\n")
.replace("\n", "\\n");
} else if(value instanceof java.sql.Clob) {
StringBuffer output = new StringBuffer();
String str = "";
Clob clob = (java.sql.Clob)value;
BufferedReader br = new BufferedReader(clob.getCharacterStream());
try {
while((str = br.readLine())!=null) {
output.append(str);
}
}catch(Exception e) {}
value = output.toString();
value = ((String)value).replace("\\", "\\\\")
.replace("\'", "\\\'")
.replace("\"", "\\\"")
.replace("\r\n", "\\n")
.replace("\n", "\\n");
}
cont.put(name, value);
}
dataList.add(cont);
}
queryResultData.put("columnList", columnList);
queryResultData.put("dataList", dataList);
} catch (ClassNotFoundException e) {
System.out.println("jdbc driver 로딩 실패");
} catch (SQLException e) {
System.out.println(" 연결 실패" + e.getMessage());
}finally {
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
}
}
if(psmt!=null) {
try {
psmt.close();
} catch (SQLException e) {
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
}
}
}
return queryResultData;
}
혹시 궁금한점이나 더 알고 싶은 부분이 있으면 편하게 답글 남겨주시면 답변드리겠습니다.
감사합니다.
반응형
'IT' 카테고리의 다른 글
2023년 최고 가성비 노트북 BEST 3 (0) | 2023.09.19 |
---|---|
매직 마우스 내돈내산 개봉기 (1) | 2023.04.12 |
Jupyter notebook ,설치 및 실행하기 (0) | 2022.11.26 |
Spring 에서 MyBatis로 DB연결 (0) | 2022.11.14 |
webjars 못 불러 올때 처리방법 (0) | 2022.10.27 |