十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
import java.sql.Connection;
网站的建设成都创新互联公司专注网站定制,经验丰富,不做模板,主营网站定制开发.小程序定制开发,H5页面制作!给你焕然一新的设计体验!已为水处理设备等企业提供专业服务。
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();//抛出异常
}
}
//第三步:获取数据库连接
public static Connection getConn(){
try {
return DriverManager.getConnection(CONN_STR,DB_USER,DB_PWD);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//最后关闭数据库连接
public static void closeConn(ResultSet rs,PreparedStatement pstmt,Connection conn){
try {
if (rs!=null) {//如果返回的结果集对象不能为空,就关闭连接
rs.close();
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (pstmt!=null) {
pstmt.close();//关闭预编译对象
}
} catch (Exception e) {
e.printStackTrace();
}
try {
if (conn!=null) {
conn.close();//关闭结果集对象
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
没异常,不过浪费资源,占着坑不拉,执行完一次数据库交互就要关闭一次
try{
sql...
}catch(...){
//异常信息
}finally{
rs.close();
stmt.close();
conn.close();
//关链接,释放资源
}
楼主说的关了不能执行肯定是把结果集返回,这样编程不行的,因为在上述操作中结果集已经关了,再返回就是空了,我们应该把数据返回,在
try{
list.add{rs.getObject(1)};
///
}
把数据装在list里面,返回list
try{
//执行的代码块
} catch{
//抛出异常
} finally{
//在finally里面不管是否抛出异常都会执行
conn.close;
}
数据库为了及时响应请求,一定会保持一定数目的 线程,哪怕暂时不用。
你在 client 端 调用 close 释放了连接,那么你工作就已经完成了。
想确定会不会有问题,那么可以这么做。
不停的重新运行你的这段代码,如果 mysql 的线程数 没有增多 就不是问题。
如果随运行次数 线性增加,再来考虑解决这个问题
就是这样的,线程的回收,mysql 有自己的机制。你写程序的时候,最好也这么做,资源的回收不是越快越好,因为初始化资源也是要消耗代价的。
java对象销毁时关闭连接
对象使用完之后需要对其进行清除。对象的清除是指释放对象占用的内存。在创建对象时,用户必须使用 new 操作符为对象分配内存。不过,在清除对象时,由系统自动进行内存回收,不需要用户额外处理。这也是 Java 语言的一大特色,某种程度上方便了程序员对内存的管理。
Java 语言的内存自动回收称为垃圾回收(Garbage Collection)机制,简称 GC。垃圾回收机制是指 JVM 用于释放那些不再使用的对象所占用的内存。
Java 语言并不要求 JVM 有 GC,也没有规定 GC 如何工作。不过常用的 JVM 都有 GC,而且大多数 GC 都使用类似的算法管理内存和执行回收操作。具体的垃圾回收实现策略有好多种,在此不再赘述。
注意:C++语言对象是通过 delete 语句手动释放。如果回收内存的任务由程序负责,也就是说必须在程序中显式地进行内存回收,这无疑会增加程序员的负担,而且存在很多弊端。Java 语言对象是由垃圾回收器收集然后释放,程序员不用关系释放的细节。自动内存管理是现代计算机语言发展趋势,例如:C# 语言的垃圾回收,Objective-C 和 Swift 语言的 ARC(内存自动引用计数管理)。
package mysql;
import java.sql.*;
/**
* @author xys
*/
public class ConnectMysql {
public static Connection getConnection() throws ClassNotFoundException, SQLException {
String url = "jdbc:mysql://localhost:3306/databaseName";
String user = "mysqluser";
String password = "password";
String driverClass = "com.mysql.cj.jdbc.Driver";
Connection connection = null;
Class.forName(driverClass);
try {
connection = DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
if (connection != null) {
System.out.println("数据库连接成功");
} else {
System.out.println("数据库连接失败");
connection.close();
}
return connection;
}
public void getResult() throws ClassNotFoundException, SQLException {
// 实例化 Statement 对象
Statement statement = getConnection().createStatement();
// 要执行的 Mysql 数据库操作语句(增、删、改、查)
String sql = "";
// 展开结果集数据库
ResultSet resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
// 通过字段检索
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
// 输出数据
System.out.println("ID : " +id);
System.out.println("name :" + name);
}
// 完成后需要依次关闭
resultSet.close();
statement.close();
getConnection().close();
}
}