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