다음 Oracle 오류는 무엇을 의미합니까: 잘못된 열 색인
일부 코드를 테스트하는 동안 다음 오류가 발생했습니다.
SQLException:잘못된 열 색인
그게 정확히 무슨 뜻이죠?
Oracle 오류 코드와 설명문을 설명하는 온라인 문서가 있습니까?
Java에 의해 던져진 SQLException의 경우 ResultSet에서 값을 가져오거나 설정하려고 하지만 사용 중인 인덱스가 범위를 벗어났기 때문일 수 있습니다.
예를 들어 결과 집합에서 인덱스 3의 열을 가져오려고 하지만 SQL 쿼리에서 반환되는 열은 두 개뿐일 수 있습니다.
당신이 하려는 것처럼 들리네요SELECT
이치노
당신은 마마 to perhaps perhaps perhaps perhaps perhaps perhaps perhaps perhaps 。ORDER BY
재하하 ?는 ?? ????
SQL 스테이트먼트에 오타가 있습니까?
Spring의 SimpleJdbcTemplate를 사용하여 이 작업을 수행하려고 했을 때 다음과 같이 처리되었습니다.
String sqlString = "select pwy_code from approver where university_id = '123'";
List<Map<String, Object>> rows = getSimpleJdbcTemplate().queryForList(sqlString, uniId);
SQL의 물음표와 일치하지 않는 queryForList에 대한 인수가 있었습니다.첫 번째 행은 다음과 같습니다.
String sqlString = "select pwy_code from approver where university_id = ?";
이런 유형의 오류도 발생했는데, 다음과 같은 잘못된 매개 변수 사용으로 인해 다음과 같은 문의가 있다고 가정해 보십시오.
SELECT * FROM EMPLOYE E WHERE E.ID = ?
preparedStatement object(JDBC)에 대해 다음과 같은 파라미터를 설정하는 경우
preparedStatement.setXXX(1,value);
preparedStatement.setXXX(2,value)
결과, 「」라고 하는 결과가 됩니다.SQLException: Invalid column index
그래서 나는 그 두 번째 파라미터 설정을 삭제하여 준비된 스테이트먼트를 실행한 후 문제를 해결했다.
이 수정을 시도해 보세요.실패에 직면했기 때문입니다.
물음표 주위의 작은 따옴표를 삭제합니다.즉, (?',?''?'와 같은 예약된 파라미터를 사용한 경우 다음과 같이 됩니다.
(?,?,?)
나는 준비된 성명서를 사용하면서 이 문제를 겪었다."VALUES"에 충분한 "?"를 추가하지 않았습니다. 적절한 양을 추가하자 일식이 충돌하여 변경 사항이 손실되었습니다.그러나 p.campbell의 제안대로 SQL을 샅샅이 살펴보기 전까지는 오류가 아니라고 생각했습니다.
Spring Security 3.1.0과 Oracle 11G를 사용할 때도 똑같은 문제가 있었습니다.다음 쿼리를 사용하고 있는데 잘못된 열 인덱스 오류가 발생했습니다.
<security:jdbc-user-service data-source-ref="dataSource"
users-by-username-query="SELECT A.user_name AS username, A.password AS password FROM MB_REG_USER A where A.user_name=lower(?)"
쿼리에 "1 as enabled"를 추가해야 했습니다.
<security:jdbc-user-service data-source-ref="dataSource" users-by-username query="SELECT A.user_name AS username, A.password AS password, 1 as enabled FROM MB_REG_USER A where A.user_name=lower(?)"
그 후 모든 것이 잘 되었다.Spring JDBC 핵심 패키지의 버그일 수 있습니다.
최종 sql 문은 다음과 같습니다.
select col_1 from table_X where col_2 = 'abcd';
SQL IDE 내에서 실행하면 모든 것이 정상입니다.
다음으로 java를 사용하여 다음 스테이트먼트를 구축합니다.
String queryString= "select col_1 from table_X where col_2 = '?';";
PreparedStatement stmt = con.prepareStatement(queryString);
stmt.setString(1, "abcd"); //raises java.sql.SQLException: Invalid column index
sql 문(데이터베이스에 대해 실행된 첫 번째 문)에는 문자열 값 주위에 따옴표가 포함되어 세미콜럼으로 끝나지만 Prepared Statement에 전달되는 문자열에는 와일드카드 문자 주위에 따옴표가 포함되어 있거나 세미콜럼으로 끝나서는 안 됩니다.
흰색 바탕에 나타나는 문자를 제거했습니다.
"select col_1 from table_X where col_2 =
' ?
' ; ";
손에 넣다
"select col_1 from table_X where col_2 = ?";
(해당 솔루션은 https://coderanch.com/t/424689/databases/java-sql-SQLException-Invalid-column)에서 찾을 수 있습니다.
기존 어플리케이션 중 하나의 어플리케이션에서 이 문제가 발생했는데, 이 어플리케이션은 준비된 스테이트먼트를 동적으로 만듭니다.
String firstName;
StringBuilder query =new StringBuilder("select id, name from employee where country_Code=1");
query.append("and name like '");
query.append(firstName + "' ");
query.append("and ssn=?");
PreparedStatement preparedStatement =new prepareStatement(query.toString());
snn 값을 설정하려고 할 때 잘못된 열 인덱스 오류가 발생했으며, 결국 firstName에 '이(가) 포함되어 구문을 방해하기 때문에 발생한 것임을 알게 되었습니다.
언급URL : https://stackoverflow.com/questions/5969081/what-does-the-following-oracle-error-mean-invalid-column-index
'code' 카테고리의 다른 글
Woocommerce 체크아웃 페이지에 배송지 주소가 먼저 표시되고 청구지 주소가 표시됩니까? (0) | 2023.02.27 |
---|---|
Spring Cloud Gateway - URL의 하위 부분 전체를 프록시/전송 (0) | 2023.02.27 |
React의 다른 반환문으로 여러 줄 JSX를 반환하려면 어떻게 해야 합니까? (0) | 2023.02.27 |
WP_Query에서 WooCommerce 특집 제품 가져오기 (0) | 2023.02.27 |
약속이 해결되기 전에 지침이 렌더링되고 있습니다. (0) | 2023.02.27 |