如何使用数据库条目数据预加载GUI



我正在尝试用数据库条目的数据预加载GUI。基本上,在以前的JForm中,我已经要求用户输入一个名称,这个类使用这个名称并用数据库条目填充现有的文本字段和区域,尽管它似乎不起作用,因为它没有预加载任何现有的字段,尽管它确实存在于数据库中。如果有人能帮忙,我们将不胜感激,因为这很快就会到期!

public void presetPage(){
modifyRecipe m = new modifyRecipe();
String name = m.getSR();
try{
String url = "jdbc:derby://localhost:1527/Cookbook";
Connection conn = DriverManager.getConnection(url);
String sql = "SELECT * from RECIPES where name=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, name);
ResultSet rs = pst.executeQuery();
boolean found = false;
while(rs.next()){
if(rs.getString(1).equalsIgnoreCase(name)){
JOptionPane.showMessageDialog(null, "Found " + name );
found = true;
txtName.setText(rs.getString(1));
txtSubcatagory.setText(rs.getString(2));
cmbCatagory.getSelectedItem().toString();
txtIngredients.setText(rs.getString(4));
txtInstructions.setText(rs.getString(5));
txtMod.setText(rs.getString(6));

}else if(!found){
JOptionPane.showMessageDialog(null, "Item Not Found!");
this.dispose();
}
}

连接到database:

使用JDBC驱动程序连接到数据库,如下所示:

String url = "jdbc:derby://localhost:1527/Cookbook";
Connection conn = DriverManager.getConnection(url);

准备SELECT查询:

编写一个SELECT查询以从database中获取数据。使用PreparedStatement将参数绑定到查询:

String sql = "SELECT * from RECIPES where name=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, name);

执行查询:

执行查询并获取ResultSet,还检查它是否有任何数据:

ResultSet rs = pst.executeQuery();
if (rs.next()) {
// the result set has data
} else {
// the result set is empty
}

在GUI中加载数据:

使用来自ResultSet的数据加载GUI:

txtName.setText(rs.getString(1));
txtSubcatagory.setText(rs.getString(2));
cmbCatagory.setSelectedItem(rs.getString(3));
txtIngredients.setText(rs.getString(4));
txtInstructions.setText(rs.getString(5));
txtMod.setText(rs.getString(6));

GUI组件必须在setText()setSelectedItem()方法之前进行初始化。

GUI必须初始化,否则数据将不会加载。

public void presetPage() {
//modifyRecipe m = new modifyRecipe();
//String name = m.getSR();
try {
String url = "jdbc:derby://localhost:1527/Cookbook";
Connection conn = DriverManager.getConnection(url);
String sql = "SELECT * from RECIPES where name=?";
//PreparedStatement pst = conn.prepareStatement(sql);
//pst.setString(1, name);
ResultSet rs = pst.executeQuery();
if (rs.next()) {
txtName.setText(rs.getString(1));
txtSubcatagory.setText(rs.getString(2));
cmbCatagory.setSelectedItem(rs.getString(3));
txtIngredients.setText(rs.getString(4));
txtInstructions.setText(rs.getString(5));
txtMod.setText(rs.getString(6));
} else {
//JOptionPane.showMessageDialog(null, "Item Not Found!");
//this.dispose();
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}

我们假设GUI组件已初始化,SQL查询返回一行。若查询返回多行,那个么必须适当地处理它。

最新更新