Вернуть динамический массив на основе SQL - PullRequest
0 голосов
/ 14 мая 2019

Я хотел бы создать метод, который возвращает массив со всеми значениями из базы данных.

Это то, что я имею до сих пор:

package ch.test.zt;

import java.sql.*;

class Database {

    static boolean getData(String sql) {
        // Ensure we have mariadb Driver in classpath
        try {
            Class.forName("org.mariadb.jdbc.Driver");
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        String url = "jdbc:mariadb://localhost:3306/zt_productions?user=root&password=test";

        try {
            Connection conn = DriverManager.getConnection(url);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);

            return rs.next();

        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        return false;
    }

}

Это означает, что я мог бы использовать Database.getData("SELECT * FROM users") и получить массив со всеми данными из нужной мне базы данных.

В моем коде выше я использую return rs.next();, что определенно неправильно.Это возвращает true.

1 Ответ

1 голос
/ 15 мая 2019

rs.next (); просто скажите, есть ли в вашем наборе результатов данные или нет, то есть истина или ложь, чтобы использовать или создать массив фактических данных, вы должны выполнить итерацию по вашему результирующему набору, создать из него объект пользователя и добавить этот объект в вашем списке пользователей

Также измените подпись

 static List<User> getData(String sql) 

И лучше всего использовать как Select Username,UserId from Users; as your sql как то так:

   try {    List<User> userList = new ArrayLisy();
            Connection conn = DriverManager.getConnection(url);
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            //until there are results in the resultset loop over it
             while (rs.next()) {              
               User user = new User();
               user.SetName(rs.getString("username"));
               // so on.. for other fields like userID ,age , gender ,loginDate,isActive  etc ..
               userList.add(user);
            } 
          }

если вы не знаете, какие столбцы таблицы вы собираетесь получить, то вы можете найти то же самое, используя:

Теперь вы знаете всю информацию, и с ее помощью вы можете построить правильный запрос. и работать с этим

  DatabaseMetaData metadata = connection.getMetaData();
        ResultSet resultSet = metadata.getColumns(null, null, "users", null);
        while (resultSet.next()) {
          String name = resultSet.getString("COLUMN_NAME");
          String type = resultSet.getString("TYPE_NAME");
          int size = resultSet.getInt("COLUMN_SIZE");

          System.out.println("Column name: [" + name + "]; type: [" + type + "]; size: [" + size + "]");
        }
      }       
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...