Java 数据库中的项目不会添加到我创建的列表中
Java Items from database won't get added to list I've created
所以我正在尝试创建一个程序来向用户显示食谱。为此,我想从我的数据库中取出项目并将它们放入列表中,但是由于某种原因,当我转到要将列表中的变量添加到我们的 FXML 标签的屏幕时,我收到了严重的空错误。
我在这里创建列表
List<String> stap = new ArrayList<>();
List<String> stapOmschrijving = new ArrayList<>();
List<String> stapAfbeelding = new ArrayList<>();
这是我将数据库中的项目添加到列表的地方:仅供参考:数据库代码用于从数据库中获取简单的字符串,但我在尝试将字符串放入列表时只遇到严重的空错误.
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
String sql;
sql = "SELECT * FROM receptStap WHERE recept_receptNaam = " + dagGerecht ;
try (ResultSet rs = stmt.executeQuery(sql)) {
stap.clear();
stapOmschrijving.clear();
stapAfbeelding.clear();
while(rs.next()){
stap.add(rs.getString("stap"));
stapOmschrijving.add(rs.getString("stapOmschrijving"));
stapAfbeelding.add(rs.getString("stapAfbeelding"));
}
}
stmt.close();
conn.close();
最后,这是我将项目添加到适当的 FXML 标签的地方(在为此 fxml 文件制作的 class 中)
public class StapReceptenController implements Initializable {
Connectie connectie = new Connectie();
Statements statement = new Statements();
@FXML
private Label omschrijving;
@FXML
private ImageView afbeelding;
@FXML
private Label nummer;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
connectie.maakVerbinding();
statement.haalReceptenOp();
int counter = 0;
nummer.setText(statement.stap.get(counter));
omschrijving.setText(statement.stapOmschrijving.get(counter));
错误代码。
为什么有Strings
三个列表?一个更好的主意是将这三个项目封装到一个有意义的 class 和 return 一个 class 来自查询的 List
中。
您应该使用 PreparedStatement
并绑定参数而不是连接字符串来创建 SQL。
您应该通过此方法创建 List
个对象和 return 个对象。
您应该在 finally 块中关闭 Statement
。
您应该传入 Connection
并将其从池中取出。
所以我正在尝试创建一个程序来向用户显示食谱。为此,我想从我的数据库中取出项目并将它们放入列表中,但是由于某种原因,当我转到要将列表中的变量添加到我们的 FXML 标签的屏幕时,我收到了严重的空错误。
我在这里创建列表
List<String> stap = new ArrayList<>();
List<String> stapOmschrijving = new ArrayList<>();
List<String> stapAfbeelding = new ArrayList<>();
这是我将数据库中的项目添加到列表的地方:仅供参考:数据库代码用于从数据库中获取简单的字符串,但我在尝试将字符串放入列表时只遇到严重的空错误.
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
stmt = conn.createStatement();
String sql;
sql = "SELECT * FROM receptStap WHERE recept_receptNaam = " + dagGerecht ;
try (ResultSet rs = stmt.executeQuery(sql)) {
stap.clear();
stapOmschrijving.clear();
stapAfbeelding.clear();
while(rs.next()){
stap.add(rs.getString("stap"));
stapOmschrijving.add(rs.getString("stapOmschrijving"));
stapAfbeelding.add(rs.getString("stapAfbeelding"));
}
}
stmt.close();
conn.close();
最后,这是我将项目添加到适当的 FXML 标签的地方(在为此 fxml 文件制作的 class 中)
public class StapReceptenController implements Initializable {
Connectie connectie = new Connectie();
Statements statement = new Statements();
@FXML
private Label omschrijving;
@FXML
private ImageView afbeelding;
@FXML
private Label nummer;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
connectie.maakVerbinding();
statement.haalReceptenOp();
int counter = 0;
nummer.setText(statement.stap.get(counter));
omschrijving.setText(statement.stapOmschrijving.get(counter));
错误代码。
为什么有Strings
三个列表?一个更好的主意是将这三个项目封装到一个有意义的 class 和 return 一个 class 来自查询的 List
中。
您应该使用 PreparedStatement
并绑定参数而不是连接字符串来创建 SQL。
您应该通过此方法创建 List
个对象和 return 个对象。
您应该在 finally 块中关闭 Statement
。
您应该传入 Connection
并将其从池中取出。