문제

Arraylist (또는 그 문제에 대한 어떤 종류의 목록)를 결국 Oracle 데이터베이스에 액세스하는 데 사용될 준비 상태에 묶을 수있는 방법이 있는지 궁금했습니다. 나는 찾았다 :

조항 대안의 준비?

그리고 그것은 내 문제와 비슷해 보이지만이 질문은 더 구체적입니다. Oracle에서 사용하기 위해 배열 목록을 준비된 상태에 바인딩하고 싶습니다. 가능하다면 어떻게 이루어 지는가?

도움이 되었습니까?

해결책

준비된 명령문에서 목록을 단일 매개 변수에 바인딩 할 수 없습니다.

예를 들어 목록의 각 요소에 대한 매개 변수 마커로 SQL을 생성합니다.

SELECT NAME FROM ITEM WHERE ID IN (?, ?, ?, ?)

각 쿼리마다 새 문장을 생성하더라도 PreparedStatement. 목록에 포함 된 경우 String 인스턴스는 SQL 주입로부터 보호하기 위해 필요한 탈출을 얻을 수 있습니다.

하지만 안전한 유형이더라도 Integer 객체, 일부 드라이버 또는 미들웨어는 캐시 할 수 있습니다 PreparedStatements, 동일한 양식이 요청되면 캐시 된 인스턴스를 반환하십시오. 물론 일부 테스트가 필요합니다. 목록이 크기가 크게 다르면 여러 가지 다른 진술이 있으며, 구현되지 않은 캐시는 많은 것을 처리 할 준비가되지 않을 수 있습니다.

다른 팁

직접 묶을 수는 없습니다. 배열을 매개 변수로 전달하는 방법이 있습니다. 나는 당신이 데이터베이스 측면에서 무엇을하고 싶은지 전혀 모른다. 그래서 이것은 당신에게 도움이되지 않을 수 있습니다.

기본적으로 데이터베이스에서 중첩 테이블 유형을 만들어야합니다. 배열의 데이터를 포함하는 해당 유형을 기반으로 Java 객체를 빌드하십시오. 매개 변수로 전달하십시오.

데이터베이스에서 이러한 객체를 만든 경우 :

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2(20);
CREATE TABLE my_table (a  my_nested_table) NESTED TABLE a STORE AS my_table_a;

그런 다음 다음과 같이 Java 코드를 쓸 수 있습니다.

String[] insertvalues = { "a", "b", "c" };
PreparedStatement p = conn.prepareStatement("INSERT INTO my_table VALUES( ? )");
ARRAY insertParameter = new ARRAY( a_desc, conn, insertvalues );
p.setArray( 1, insertParameter );
p.execute();

Oracle의 결과는 다음과 같습니다.

dev> select * from my_table;

A
--------------------------------------------------------------------------------
MY_NESTED_TABLE('a', 'b', 'c')

글쎄, 그 답에 대한 답, 특히 그 질문에 대한 나의 잘못된 대답에 대한 의견을 판단하면, 당신은 할 수 없습니다.

보다 http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/mapping.html#996857

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top