Java 返回基于SQL的动态数组

Java 返回基于SQL的动态数组,java,jdbc,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.jdb

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

这就是我到目前为止所做的:

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.getDataSELECT*,从数据库中获得一个包含我所需的所有数据的数组


在上面的代码中,我使用的是return rs.next;,这绝对是错误的。返回true。

rs.next;只要告诉您的结果集中是否有数据,即true或false,为了使用或创建实际数据的数组,您必须迭代结果集并从中创建用户对象,并且必须将该对象添加到用户列表中

还要更改签名

 static List<User> getData(String sql) 
如果不知道要获取的表的列,则可以使用以下方法查找相同的列:

现在您知道了所有信息,然后可以使用它构造适当的查询 从这里开始工作

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

你到底不清楚什么?你读过的JavaDocs吗?嗯,这不是真正的动态。如果我不知道用户名、用户名等列名怎么办。?
  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 + "]");
        }
      }