请选择 进入手机版 | 继续访问电脑版
本站特色:极好的技术研究氛围!所有技术交流,必有回复!

疯狂Java联盟

 找回密码
 加入联盟
查看: 163|回复: 1

java 数据库关闭连接

[复制链接]
发表于 2018-5-15 10:12:12 | 显示全部楼层 |阅读模式
public class QueryExecutor {
JFrame jf=new JFrame("测试");
private JScrollPane scrollPane;
private JButton execBn=new JButton("查询");
private JTextField sqlField=new JTextField(45);
private static Connection conn;
private static Statement stmt;
static {

try
{
Properties props=new Properties();
props.load(new FileInputStream("mysql.ini"));
String drivers=props.getProperty("driver");
String url=props.getProperty("url");
String username=props.getProperty("user");
String password=props.getProperty("pass");
Class.forName(drivers);
conn=DriverManager.getConnection(url,username,password);
stmt=conn.createStatement();
}
catch(Exception e)
{
e.printStackTrace();
}       

}
public void init()
{
JPanel top=new JPanel();
top.add(new JLabel("输入查询语句:"));
top.add(sqlField);
top.add(execBn);
execBn.addActionListener(new ExecListener());
sqlField.addActionListener(new ExecListener());
jf.add(top,BorderLayout.NORTH);
jf.setSize(680, 480);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setVisible(true);

}
class ExecListener implements ActionListener
{       
public void actionPerformed(ActionEvent evt)
{
if(scrollPane!=null)
jf.remove(scrollPane);
try(
ResultSet rs=stmt.executeQuery(sqlField.getText());
)
{
ResultSetMetaData rsmd=rs.getMetaData();
Vector<String> columnNames=new Vector<>();
Vector<Vector<String>> data=new Vector<>();
for(int i=0;i<rsmd.getColumnCount();i++)
{
columnNames.add(rsmd.getColumnName(i+1));
}
while(rs.next())
{

Vector<String> v =new Vector<>();
for(int i=0;i<rsmd.getColumnCount();i++)
{
v.add(rs.getString(i+1));
}
data.add(v);
}
JTable table=new JTable(data,columnNames);
scrollPane=new JScrollPane(table);
jf.add(scrollPane);
jf.validate();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

public static void main(String[] args) {
// TODO Auto-generated method stub
new QueryExecutor().init();

}

}
程序将建立数据库连接 创建Statement对象 放在了静态初始化代码段中,后面操作ResultSet时 用了try() {} 语句自动关闭 那么数据库连接 Statement对象是不是没有关闭啊? 如果想关闭也只能放在try(){} 语句中吗? 正常应该在程序什么地方关闭数据库连接 是statement对象? 谢谢
发表于 2018-5-15 15:55:45 | 显示全部楼层
再写一个方法来关闭资源,
当程序退出时触发该方法、关闭这些数据库资源。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

小黑屋|手机版|Archiver|疯狂Java联盟 ( 粤ICP备11094030号 )

GMT+8, 2018-8-15 09:45 , Processed in 0.119623 second(s), 6 queries , File On.

快速回复 返回顶部 返回列表