如何解决这个问题以及这段代码有什么问题? 我知道之前已经问过这个问题,但我无法解决问题
private void cb_categoriesPopupMenuWillBecomeVisible(javax.swing.event.PopupMenuEvent evt) {
cb_categories.removeAllItems();
try {
String sql_c = "SELECT * FROM inventory.categories";
cc.pst = cc.c.prepareStatement(sql_c);
cc.rs = cc.pst.executeQuery();
while (cc.rs.next()) {
String c_name = cc.rs.getString("CategoryName");
cb_categories.addItem(c_name);
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e);
} finally {
try {
cc.rs.close();
cc.pst.close();
} catch (Exception e) {
}
}
}
答案 0 :(得分:1)
您的ResultSet和PreparedStatement未在方法范围内声明,因此我必须假设您已在其他地方声明它们。
这是一个很大的错误。
您应该在方法范围中声明Statement和ResultSet。
您尝试关闭资源,但是应该将它们包装在单独的try / catch块中。你不能冒被关闭的风险而不是另一方。
还有其他一些我批评你的代码的东西(例如SELECT *,将UI和数据库代码混合在一起),但这足以启动。
从界面开始:
1
然后写一个具体的实现:
Loaded += (s, e) =>
{
// GetChildByName comes from
// https://github.com/JustinXinLiu/Continuity/blob/0cc3d7556c747a060d40bae089b80eb845da84fa/Continuity/Extensions/UtilExtensions.cs#L44
var layerGrid = mapControl.GetChildByName<Grid>("LayerGrid");
var canvas1 = layerGrid.Children.First();
Canvas.SetZIndex(canvas1, 1);
};
这是你可以用JUnit测试的东西。让它完美运行,然后提供您的UI代码的引用。它会将UI和数据库代码分开。您可以在任何应用程序中使用此DAO,而无需担心Swing或Web UI。