我正在尝试用数据库条目的数据预加载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查询返回一行。若查询返回多行,那个么必须适当地处理它。