Как я могу передать запрос SQL в качестве параметра для другого запроса SQL в Java? - PullRequest
0 голосов
/ 22 апреля 2019

Я пишу код для управления кафе, поэтому во фрейме я добавил JTable, где каждый раз, когда я выбираю элемент из JComboBox, он должен показываться в JTable. Для этого я добавил кнопку, и для ее действия я проверял, что каждый раз, когда я щелкаю по ней, он сохраняет элемент, выбранный из JComboBox, в базе данных, а затем из базы данных, выбранной в Jtable. Но проблема в том, что JTable имеет 2 столбца, а выбор из JComboBox - только один. поэтому другой столбец должен вызываться из другой базы данных, что означает, что мне нужно вызвать SQL-запрос внутри другой базы данных, и я не знаю, как это сделать. Я пробовал приведенный ниже код, но он выдает мне эту ошибку: «У вас есть ошибка в вашем синтаксисе SQL; посмотрите руководство, соответствующее вашей версии сервера MariaDB, для правильного синтаксиса для использования рядом с« produit »в строке 1»

b2.addActionListener (новый ActionListener () { public void actionPerformed (ActionEvent e) {

            try {
                Class.forName("com.mysql.jdbc.Driver");
                Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/café", "root",
                        "ata1");

                Statement statement = connection.createStatement();
                ResultSet resultat = statement.executeQuery ( "SELECT prix FROM commande_existantes WHERE "+ cb.getSelectedItem() + "IN produit" );
                Statement stmt = connection.createStatement();
                stmt.executeUpdate("INSERT INTO commande_existante VALUES ('" + cb.getSelectedItem() + "'," +resultat+ ")");

    } catch (Exception a) {
        a.printStackTrace();
    }
    }
    });

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019

Вы можете напрямую использовать, как показано ниже:

String selected = cb.getSelectedItem ();

stmt.executeUpdate ("INSERT INTO commande_existante VALUES ('" + selected + "', (SELECT prix FROM commande_existantes WHERE '" + selected + "' IN ('produit') AND ROWNUM <2))") * </p>

0 голосов
/ 22 апреля 2019

Скорее всего, вы хотите что-то вроде:

Statement statement = connection.createStatement();
ResultSet resultat = 
    statement.executeQuery ( "SELECT prix FROM commande_existantes " +
                             " WHERE produit = " + cb.getSelectedItem() );
if (rs.next) {
    stmt.executeUpdate("INSERT INTO commande_existante VALUES " + 
                       "('" + cb.getSelectedItem() + "'," + 
                              resultat.getDouble("prix")+ ")");
}

Я предполагаю, что "produit" - это имя столбца в "commande_existantes" - так что вы просто хотите найти строки, в которых значение "produit" - это то, которое вы выбрали. В SQL «IN» используется для поиска значения в списке, который вы указываете после «IN» ... - но запрос уже просматривает все строки в этой таблице в поисках совпадений с вашим предложением «WHERE», так что сравнение "=" - это все, что вам нужно.

ResultSet потенциально представляет собой таблицу значений, которые являются ответом на запрос, который вы запустили - поэтому вам нужно перейти к строке (используя «next ()»), а затем получить нужное значение столбца (в данном случае, используя этот вызов "getDouble ()".

Вам следует искать учебник по JDBC и, в частности, как использовать параметры в SQL, а не встраивать значения в SQL, как вы делали здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...