java 数据库关闭连接

publicclassQueryExecutor{JFramejf=newJFrame("厕所");privateJScrollPanescrollPane;privat... 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对象? 谢谢
展开
 我来答
qi...8@163.com
2018-05-15 · 超过18用户采纳过TA的回答
知道答主
回答量:26
采纳率:100%
帮助的人:4.8万
展开全部
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//一个数据库通用的帮助类,用于连接数据库与关闭数据库
public class DBUtil {

//第一步:声明你所需要的一些全局变量
private final static String DRIVER_CLASS="com.microsoft.sqlserver.jdbc.SQLServerDriver";//加载驱动的字符串

private final static String CONN_STR="jdbc:sqlserver://localhost:1433;databaseName=testDB";//数据库连接字符串

private final static String DB_USER="sa";//数据用户

private final static String DB_PWD="123456";//数据库登录密码

//第二步:加载数据库驱动(这里是sqlserver)
static{

try{

Class.forName(DRIVER_CLASS);

}catch(ClassNotFoundException e){

e.printStackTrace();//抛出异常
}
}
百度网友eafd31e
2018-05-15 · 超过57用户采纳过TA的回答
知道小有建树答主
回答量:110
采纳率:70%
帮助的人:52.4万
展开全部
statement在每次查询之前创建,查询完就关闭。单独写个方法关闭ResultSet和Statement吧,ResultSet和Statement作为参数,不为空则close,捕获一下异常。
追问
数据库的连接 在什么地方关闭呢?
追答
数据库的链接,有两种处理方式,一个就是和Statement一样,每次请求之前创建一个,请求完close,不过这样效率较低,反复创建连接对数据库压力也大一些,另一种就是使用连接池,每次需要时从连接池获取,用完归还连接池而不是直接关闭连接,连接池的会根据你的配置自动关闭。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式