Как я связываю ArrayList с PreparedStatement в Oracle?

Надеюсь, что я правильно понимаю вашу проблему. Вы можете попробовать поместить TabView в MouseArea. Во всяком случае, это не лучшее решение.

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    MouseArea {
        anchors.fill: parent
        onPressAndHold: console.log("press")
        TabView {
            Tab {
                title: "Red"
                Rectangle { color: "red" }
            }
            Tab {
                title: "Blue"
                Rectangle { color: "blue" }
            }
            Tab {
                title: "Green"
                Rectangle { color: "green" }
            }
        }
    }
}
5
задан Community 23 May 2017 в 11:48
поделиться

3 ответа

Вы не можете связать Список с единственным параметром в подготовленном операторе.

Генерируйте SQL с маркер параметра для каждого элемента в списке, например:

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

Даже при том, что Вы генерируете новый оператор для каждого запроса, я все еще рекомендовал бы использовать a PreparedStatement. Если Ваш список содержит String экземпляры, Вы заставите необходимый выход защищать от Внедрения SQL.

Но даже если это - безопасный тип, как Integer объекты, некоторые драйверы или промежуточное программное обеспечение могут кэшироваться PreparedStatements, и возвратите кэшируемый экземпляр, если ту же форму требуют. Конечно, некоторое тестирование было бы необходимо. Если Ваши списки будут значительно различаться в размере, то у Вас будет много различных операторов, и плохо реализованный кэш не мог бы быть готов обработать так многих.

5
ответ дан 14 December 2019 в 04:50
поделиться

Вы не можете связать его непосредственно. Существует способ передать массив в качестве параметра. Я понятия не имею, что Вы хотите сделать с ним на стороне базы данных, таким образом, это не может помочь Вам.

В основном необходимо создать тип вложенной таблицы в базе данных; создайте 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')
3
ответ дан 14 December 2019 в 04:50
поделиться

Ну, при оценке ответом на тот, особенно комментариями к моему неправильному ответу в том вопросе, Вы не можете.

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

0
ответ дан 14 December 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: