Как я могу получить конкретный столбец из MySQL с JDBC? - PullRequest
0 голосов
/ 30 мая 2018
    PreparedStatement ps2;
    ResultSet rs2;

    String username = jTextField_username.getText();
    String userpassword = jTextField_userpassword.getText();

    String sql = "SELECT distinct kalanizin from users where username =?";
    String[] resultsetarray = null;

    try {

       ps2 = MyConnection.getConnection().prepareStatement(sql);
       ps2.setString(1, username);

       rs2 = ps2.executeQuery();
       String result = rs2.getString(0); // i want this String to hold the first result

Привет всем.У меня есть одна проблема, которая продолжает бить меня по голове.Как говорится в заголовке, с помощью JDBC я хочу получить один столбец из моей базы данных.Например,

Select * from users where username = "blabla"

Я хочу, чтобы Java выполнила этот запрос и получила первую найденную строку.Затем помещает в строку или целое число.Как вы видите мой ужасный код сверху, он не может этого сделать.Я пытался сделать это с помощью оператора, но он все еще не работал.Может кто-нибудь мне помочь?Это будет высоко ценится.Ps.извините за мои ужасные имена переменных и использование моего местного языка в качестве переменных

Ответы [ 4 ]

0 голосов
/ 30 мая 2018

Вы пропускаете вызов ResultSet#next.

Согласно вашему примеру кода вы можете сделать это:

PreparedStatement ps2;
ResultSet rs2;

String username = jTextField_username.getText();
String userpassword = jTextField_userpassword.getText();

String sql = "SELECT distinct kalanizin from users where username =?";
String[] resultsetarray = null;

try {
   ps2 = MyConnection.getConnection().prepareStatement(sql);
   ps2.setString(1, username);

   rs2 = ps2.executeQuery();
   if(rs2.next()) { // moving to the first row
       String result = rs2.getString(1); // i want this String to hold the first result
   } else {
       // throw Exception ?
   }
} catch (SQLException e) {
    e.printStackTrace();
}
0 голосов
/ 30 мая 2018

Вы запрашиваете столбец с columnIndex=0, но индексы столбцов начинаются с 1

Вы можете использовать этот код, может быть, я использовал некоторое время назад, чтобы запросить всю таблицу

public List<Article> findAll() {
    Connection connection = jdbConnectionWrapper.getConnection();
    List<Article> articles = new ArrayList<>();
    try {
        PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM article");
        ResultSet resultSet = preparedStatement.executeQuery();

        while (resultSet.next()) {
            Article article = new Article();

            article.setId(resultSet.getLong(1));
            article.setName(resultSet.getString(2));
            article.setPrice(resultSet.getInt(3));

            articles.add(article);
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return articles;
}
0 голосов
/ 30 мая 2018

Мой подход будет следующим:

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

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

select u.age from users u where u.username=? 

И затем в зависимости от типа данных вы можете извлечь его из набора результатов.

0 голосов
/ 30 мая 2018

Если вы знаете имя столбца. Вы можете использовать методы, такие как getString(columnLabel) вместо getString(columnIndex):

Извлекает значение указанного столбца в текущей строкеэтот объект ResultSet в виде строки в языке программирования Java.

columnLabel - метка для столбца, указанного в предложении SQL AS.Если предложение SQL AS не было задано, меткой будет имя столбца

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