返回基于SQL的动态数组

时间:2019-05-14 20:54:09

标签: java jdbc

我想创建一个方法,该方法返回一个包含数据库中所有值的数组。

这是我到目前为止所拥有的:

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 个答案:

答案 0 :(得分:1)

rs.next();只需告诉您的结果集中是否有数据(即true或false),就可以使用或创建实际数据数组,您必须遍历结果集并从中创建用户对象,并必须添加该对象在您的用户列表中

还要更改签名

 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 + "]");
        }
      }