MySql Соединитель SQL Оператор не возвращает никаких значений в java - PullRequest
0 голосов
/ 17 апреля 2020

Я использую mySQL Соединитель в java, и мне нужно написать этот длинный запрос, где я присоединяюсь к таблицам и возвращаю акции определенного пользователя. User_ID будет предоставлен программой java, следовательно, я получил? и передается в базу данных. Однако я предполагаю, что из-за синтаксической ошибки в java она не возвращает никаких значений программе и просто не работает. Запрос отлично работает в базе данных.

 String a = jTextField_User_Name.getText();
     PreparedStatement ps = null;

     String queryretrive = "SELECT DISTINCT Stock_Name FROM stockname,users,stock,userstock WHERE 'users.ID' = ? AND users.ID = userstock.User_ID AND userstock.Stock_ID = stock.Stock_ID AND stock.Stock_ID = stockname.Stock_ID";

    ResultSet rs;
     try {
        ps = MyConnector.getConnection().prepareStatement(queryretrive);

        ps.setString(1,a);


        rs = ps.executeQuery();

        if(rs.next())
        {
              System.out.println(rs.getString("Stock_Name"));

        }else{
            JOptionPane.showMessageDialog(null, "Error");
        }
    } catch (SQLException ex) {
        Logger.getLogger(LoginForm.class.getName()).log(Level.SEVERE, null, ex);
    }

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

WHERE 'users.ID' = ? AND users.ID =

Очевидно, что вторая ссылка на users.ID не нуждается в кавычках, так почему вы пытались процитировать первую?

В любом случае, MySQL " и ' используются для кавычек строковые литералы , а ` (backtick) используется для кавычек идентификаторов . Если включен режим ANSI_QUOTES SQL, тогда " используется для цитирования идентификаторов, как это делают другие диалекты СУБД.

Если вам нужно заключить в кавычки, вам нужно цитировать каждую часть отдельно, поэтому правильное цитирование будет `users`.`ID` или "users"."ID".

Тот факт, что ' иногда работает для цитирования идентификаторов, является просто странным мягким поведением и не должен использоваться, поскольку его легко спутать со строковыми литералами. Даже не знаю, как MySQL решает, является ли он строковым литералом или идентификатором, поэтому лучше никогда этого не делать.

0 голосов
/ 17 апреля 2020

этот запрос не длинный, но его трудно понять без вашей модели данных и примера кода.

, если он работает в MySQLWorkBench, должен работать с java. Если это не работает с java, вы плохо обрабатываете ошибки или неправильно установили параметр.

'users.ID' может быть просто users.ID

remove try / поймать для целей тестирования или обработать этот улов.

Кстати. С помощью java / mysql ВСЕГДА обрабатывайте окончательно свободное соединение, что-то вроде:

finally
{
    try {if (rs != null) rs.close();} catch(Exception e) {}
    try {if (statement != null) statement.close();} catch(Exception e) {}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...