我想创建一个方法,该方法返回一个包含数据库中所有值的数组。
这是我到目前为止所拥有的:
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
。
答案 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 + "]");
}
}