0
다음은 내 mysql 저장 프로 시저입니다.이 프로 시저는 Java 코드 내부에서 호출합니다. 동적으로 테이블 이름과 한계 값을 확인하고 있습니다. 그것은 mysql 커맨드 라인에서 작동합니다.다중 PREPARE 문을 가진 MySQL 프로 시저 문제
문제는 자바 내부에서이 프로 시저를 호출하고 결과 집합에서 읽기를 시도하면 잘못된 열 예외가 발생합니다. 여기
`CREATE DEFINER=`root`@`localhost` PROCEDURE `top_gainers`(
IN sExchange VARCHAR (24),
IN iLimit INT,
OUT sStatus VARCHAR(10),
OUT sMessage VARCHAR(40)
)
BEGIN
SET sStatus = '0';
IF sExchange = '' OR iLimit = ''
THEN
SET sStatus = '1';
SET sMessage = 'Parameter is missing';
END IF;
SET @table_test = CONCAT('SHOW TABLES LIKE \'', sExchange,'\'');
PREPARE stmnt FROM @table_test;
EXECUTE stmnt;
DEALLOCATE PREPARE stmnt;
IF FOUND_ROWS() = 0
THEN
SET sStatus = '2';
SET sMessage = 'Invalid exchange selected';
END IF;
IF sStatus = '0'
THEN
SET @text = CONCAT('SELECT * FROM ', sExchange, ' ORDER BY CHANGE_PER DESC LIMIT ', iLimit);
PREPARE stmnt FROM @text;
EXECUTE stmnt;
DEALLOCATE PREPARE stmnt;
IF FOUND_ROWS() = 0
THEN
SET sStatus = '3';
SET sMessage = 'Could not find relevant data';
ELSE
SET sMessage = 'Market movers fetched successfully';
END IF;
END IF;
END`
는 자바 코드 (내 표는 SYMBOL 및 설명 열이있다) ". 열 'SYMBOL'을 (를) 찾을 수 없습니다"
이
conn = DBConnection.getInstance().getConnection();
String sQuery = "{CALL top_gainers(?, ?, ?, ?)}";
cstmt = conn.prepareCall(sQuery);
cstmt.setString(1, sExchange); // "NSE"
cstmt.setString(2, sLimit); // "10"
cstmt.registerOutParameter(3, java.sql.Types.VARCHAR);
cstmt.registerOutParameter(4, java.sql.Types.VARCHAR);
boolean hasResult = cstmt.execute();
JSONArray jArray = new JSONArray();
while (hasResult) {
ResultSet res = cstmt.getResultSet();
sStatus = cstmt.getString("sStatus");
sMessage = cstmt.getString("sMessage");
if (sStatus.equals("0")) {
while (res.next()) {
JSONObject jObj = new JSONObject();
jObj.put("symbol", res.getString("SYMBOL"));
jObj.put("description", res.getString("DESCRIPTION"));
jArray.put(jObj);
}
}
DBConnection.closeResultSet(res);
hasResult = cstmt.getMoreResults();
}
예외
+--------------------+---------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------------------+-------+
| SYMBOL | varchar(255) | NO | PRI | | |
| DESCRIPTION | varchar(255) | YES | | NULL | |
--------------------------------------------------------------------------------+
당신은 어떻게 정확한 예외를 제공시겠습니까? – yeputons
항상 정확한 예외 메시지를 포함하십시오. –
이것이 "열 'SYMBOL'을 찾을 수 없습니다."라는 메시지입니다. – JintoThomas