Java java.sql.SQL 예외:문을 준비할 때 열 인덱스가 잘못되었습니다.
아래의 내 코드는 사용자 입력을 기반으로 행 집합을 데이터베이스에 쿼리합니다.SQL Developer 내부에서 쿼리를 시도하고 테스트해 보았는데 올바른 행을 반환하면 완벽하게 작동합니다.입력의 예는 다음과 같습니다. 2013-01-22
그러나 Java 내부의 어떤 이유로 인해 다음 오류가 발생합니다.
java.sql.SQLException: Invalid column index
콘솔에 다음 줄에서 실행 중임이 표시됩니다.
preparedStatement.setString(1, to);
전체 연결 코드:
ResultSet rs = null;
PreparedStatement preparedStatement = null;
try {
String strQuery =
"SELECT homes.home_id, homes.title, homes.description, homes.living_room_count, homes.bedroom_count, homes.bathroom_count, homes.price, homes.sqft,"
+ " listagg(features.feature_name, '\n') WITHIN GROUP(ORDER BY features.feature_name) features, home_type.type_name"
+ " FROM homes"
+ " INNER JOIN bookings ON bookings.home_id <> homes.home_id"
+ " INNER JOIN home_feature ON homes.home_id = home_feature.home_id"
+ " INNER JOIN home_type ON home_type.type_code = homes.type_code"
+ " INNER JOIN features ON home_feature.feature_id = features.feature_id"
+ " WHERE bookings.booking_end < date '?'"
+ " OR bookings.booking_start > date '?'"
+ " GROUP BY homes.home_id, homes.title, homes.description, homes.living_room_count, homes.bedroom_count, homes.bathroom_count, homes.price, homes.sqft, home_type.type_name";
preparedStatement = conn.prepareStatement(strQuery);//prepare the statement
preparedStatement.setString(1, to);//insert
preparedStatement.setString(2, from);//insert
rs = preparedStatement.executeQuery();//execute query
전체 스택 추적은 다음과 같습니다.
SEVERE: java.sql.SQLException: Invalid column index
at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5317)
at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5305)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:248)
at DB.DatabaseConnector.getPropertiesSearch(DatabaseConnector.java:258)
at DB.SearchServlet.doPost(SearchServlet.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:722)
SEVERE: at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5317)
SEVERE: at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:5305)
SEVERE: at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:248)
SEVERE: at DB.DatabaseConnector.getPropertiesSearch(DatabaseConnector.java:258)
SEVERE: at DB.SearchServlet.doPost(SearchServlet.java:47)
SEVERE: at javax.servlet.http.HttpServlet.service(HttpServlet.java:688)
SEVERE: at javax.servlet.http.HttpServlet.service(HttpServlet.java:770)
SEVERE: at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1550)
SEVERE: at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281)
SEVERE: at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
SEVERE: at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655)
SEVERE: at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
SEVERE: at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
SEVERE: at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331)
SEVERE: at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231)
SEVERE: at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317)
SEVERE: at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195)
SEVERE: at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:860)
SEVERE: at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:757)
SEVERE: at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1056)
SEVERE: at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:229)
SEVERE: at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
SEVERE: at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
SEVERE: at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
SEVERE: at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
SEVERE: at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
SEVERE: at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
SEVERE: at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
SEVERE: at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
SEVERE: at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
SEVERE: at java.lang.Thread.run(Thread.java:722)
SQL developer는 쿼리가 정상적으로 작동하는데 왜 오류가 발생하는지 잘 모르겠습니다.Oracle을 사용하고 있습니다.
편집:
결과 세트는 동일한 방법으로 여기에 읽힙니다.그런 다음 홈 개체가 다시 전달됩니다.
HomeList homes = new HomeList();
homes = new HomeList(rs);
생성자는 다음과 같습니다.
public HomeList(ResultSet rs) {
this();
try {
while (rs.next()) {
list.add(new Home(rs.getInt(1),
rs.getString(2),
rs.getString(3),
rs.getInt(4),
rs.getInt(5),
rs.getInt(6),
rs.getInt(7),
rs.getInt(8),
rs.getString(9),
rs.getString(10)
));
}//end while
} catch (SQLException e) {
e.printStackTrace();
}//end try
}
쿼리 문자열 내의 모든 위치에서 와일드카드는?
대신에'?'
그러면 문제가 해결될 겁니다.
편집:
추가로, 당신은 변화가 필요합니다.date '?'
로.to_date(?, 'yyyy-mm-dd')
그것을 시도해 보시고 저에게 알려주세요.
@TechSpellBound가 제안한 대로 ? 기호 주변의 인용문을 제거합니다.그런 다음 연결된 문자열의 각 행 끝에 공백 문자를 추가합니다.그렇지 않으면 전체 쿼리가 다음과 같이 전송됩니다(일부만 예로 사용)..... WHERE bookings.booking_end < date ?OR bookings.booking_start > date ?GROUP BY ....
그?
그리고OR
공백 문자로 구분해야 합니다.쿼리 문자열에서 필요한 곳이면 어디든지 수행합니다.
인date '?'
,그'?'
값이 있는 리터럴 문자열입니다.?
매개 변수 자리 표시자가 아니므로 쿼리에 매개 변수가 없습니다.그date
현재까지 사용된 단축형 문자열입니다.교체해야 합니다.date '?'
와 함께?
실제로 매개 변수가 있습니다.
또한, 만약 당신이 그것이 데이트라는 것을 안다면, 사용하세요.setDate(..)
그리고 아닌setString(..)
매개 변수를 설정합니다.
언급URL : https://stackoverflow.com/questions/14478488/java-java-sql-sqlexception-invalid-column-index-on-preparing-statement
'programing' 카테고리의 다른 글
다른 Gitrepo 내부에서 Gitrepo 유지 관리 (0) | 2023.06.25 |
---|---|
파이어베이스Init 제공자:Firebase App 초기화 실패 (0) | 2023.06.25 |
도커 컨테이너에서 호스트 mongodb에 연결 (0) | 2023.06.25 |
에서 Oracle 데이터베이스 연결 방법.넷코어 (0) | 2023.06.25 |
여러 CTE와 연합하려면 어떻게 해야 합니까? (0) | 2023.06.25 |