java 数据库关闭连接

java 数据库关闭连接,第1张

import javasqlConnection;

import javasqlDriverManager;

import javasqlPreparedStatement;

import javasqlResultSet;

import javasqlSQLException;

//一个数据库通用的帮助类,用于连接数据库与关闭数据库

public class DBUtil {

//第一步:声明你所需要的一些全局变量

private final static String DRIVER_CLASS="commicrosoftsqlserverjdbcSQLServerDriver";//加载驱动的字符串

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{

ClassforName(DRIVER_CLASS);

}catch(ClassNotFoundException e){

eprintStackTrace();//抛出异常

}

}

首先要有一个可以连接的数据库,其次使用下面这个文件(流行的三种数据库连接);另外的Main函数和类自己写吧sqlStr用恰当的SQL语句代替

package db;

import javasql;

//import commysqljdbcDriver;//导入MYSQL数据库驱动

//import oraclejdbcdriverOracleDriver;//ORACLE的

//MSSQL的其实不用import进来也行的但是在编译时,必须要把这些"必需的库"加进来

/下面是MYSQL的连接设置/

/driver name would be loaded {@link #getConnection()}/

private final String driverName = "commysqljdbcDriver"; //要加载的驱动名称

/url to connect {@link #driverName}/

private String url = "jdbc:mysql://localhost:3306/dabaseName";//连接的URL

private String user = "root";//数据库用户名

private String password = "123456";//数据库登陆密码

/下面是ORACLE thin连接设置/

private String driverName = "oraclejdbcdriverOracleDriver"; //driver name

private String url = "jdbc:oracle:thin:@//1921681816:1521/databaseName";

/对于Oracle 推荐这样写:jdbc:oracle:thin://1921681816:1521:databaseName

private String user = "username";

private String password = "userpassword";

/下面是SQLserver连接设置/

private String driverName = "commicrosoftjdbcsqlserverSQLServerDriver";

private String url = "jdbc:microsoft:sqlserver://localhost:1433;databaseName=test";

private String user = "aaa";

private String password = "123";

/下面是通用的/

private Connection conn = null;//

private Statement stmt = null;//

private PreparedStatement pst = null;//

private ResultSet rs = null;//

/加载驱动/

try{

ClassforName(driverName);//newInstance();

com = DriverManagergetConnection(url,user,password);//获取连接;

stmt = conncreateStatement();//

rs = stmtexecuteQuery(sqlStr);//执行一次查询sqlStr = "select from tablename";

stmtexecuteUpdate(sqlStr);//添加,删除,修改sqlStr = "delete from table ";

stmtclose();

connclose();

}

catch (Exception e){

eprintStackTrace();//打印异常到后台

}

/以下是一个完全的实例/

/

@(#) DbManagerjava 100 2007/07/26

Copyright (c) 2007

this class is

/

package query;

import javasql;

//import oraclejdbcdriverOracleDriver;

/

DB Manager for Oracle

@author lijm

@version $id:2007

@bug bug description

@concurrency concurrency des

@copyright 2007 des

@example des

/

public class DbManager

{

/driver name would be loaded {@link #getConnection()}/

private final String driverName = "commysqljdbcDriver"; //driver name

/url to connect {@link #driverName}/

private String url = "jdbc:mysql://localhost:3306/ljm2";

private String user = "root";//"together";

private String password = "123456";//"wowinmylife2005";

private Connection conn = null;

private Statement stmt = null;

private PreparedStatement pst = null;

private ResultSet rs = null;

/

构造函数,创建连接和语句

@see #getConnection()

@throws Exception if getConnection failed

/

public DbManager() throws SQLException

{

try {

conn = getConnection();

}

catch (SQLException e)

{

Systemoutprintln("创建数据库连接失败!");

throw e;

}

try {

stmt = conncreateStatement();

}

catch (SQLException e){

Systemoutprintln("创建语句失败");

throw e;

}

}

/

连接数据库

<p> detail remark 1{@link #DbManager()}</p>

<p> detail remark 2</p>

/

public Connection getConnection()

throws SQLException/,ClassNotFoundException,javalangInstantiationException,javalangIllegalAccessException/

{

try

{

ClassforName(driverName);//newInstance();

return DriverManagergetConnection(url,user,password);

}

catch (ClassNotFoundException e)

{

Systemoutprintln("加载驱动类 : " +driverName+ " 失败!");

eprintStackTrace();

throw new SQLException("没有找到驱动类");

}

catch (SQLException e){

Systemoutprintln("连接数据库失败");

eprintStackTrace();

throw e;

}/

catch (javalangInstantiationException e){

Systemoutprintln("实例化驱动程序失败");

throw new SQLException("实例化驱动程序失败");

}

catch (javalangIllegalAccessException e){

Systemoutprintln("实例化驱动程序失败");

throw new SQLException("实例化驱动程序失败");

}/

catch (Exception e){

throw new SQLException("其它异常");

}

//return conn;

}

/

执行数据库查询

@param sqlStr sql statement

@return 查询结果集

/

public ResultSet execQuery(String sqlStr) throws SQLException

{

try

{

rs = stmtexecuteQuery(sqlStr);

}

catch (SQLException e)

{

Systemoutprintln("查询数据失败");

eprintStackTrace();

throw e;

}

return rs;

}

/

执行数据库更新(插入记录,更新记录,删除记录

@param sqlStr

/

public void execUpdate(String sqlStr) throws SQLException

{ boolean update = true;

try

{

stmtexecuteUpdate(sqlStr);

//return true;

}

catch (SQLException e)

{ Systemoutprintln("更新失败");

eprintStackTrace();

update = false;

throw e;

}

}

/

关闭连接;释放资源(手动)

在程序中要记得连接的关闭,不然的话会引起很多的SQL异常

/

public void close()

{

try {

if (stmt != null){

stmtclose();

stmt = null;

}

connclose();

conn = null;

}

catch (SQLException e){

Systemoutprintln("关闭数据库连接失败!");

eprintStackTrace();

}

}

/

测试本文件(DbManagerjava)

/

public static void main(String [] args){

try{

DbManager dbm = new DbManager();

ResultSet rs = dbmexecQuery("select from req_bill_operate_table where dt_operatetime like ''");

if(rsnext()){

Systemoutprintln("rs in not null in main");

}

dbmclose();

Systemoutprintln("ather main try");

}

catch (SQLException e){

Systemoutprintln("e in main :" +egetMessage()+ "\t cause:" +egetCause());

//eprintStackTrace();

}

//dbmexecUpdate("create table ljmmm( id number)");

}

}

或者你也可以试试以下的程序

准备工作:

1、jar包放在C:\Program Files\Java\jdk150_09\jre\lib\ext中

2、在eclipse中:项目名-属性-java构建路径-添加外部jar包

/

本示例代码详细说明了如何在Java中利用JDBC直接连接到SQL Server 2000数据库,包括使用SQl 2000驱动(三个jar包),

以及使用SQL 2005包(一个包)的两种情况

/

import javasqlConnection;

import javasqlDriverManager;

import javasqlResultSet;

import javasqlStatement;

import javasql;

public class DBManagerSQL {

ResultSet rs;

String strurl="jdbc:microsoft:sqlserver://127001:1433;DatabaseName=testDB";//2、SQL 2000 三个包时

//String strurl="jdbc:sqlserver://127001:1433;DatabaseName=testDB";//1、驱动为SQL 2005时,sqljdbcjar

public DBManagerSQL(){}

public ResultSet getResult(String sql)

{

try{

ClassforName("commicrosoftjdbcsqlserverSQLServerDriver");//2、SQL 2000三个包时

//ClassforName("commicrosoftsqlserverjdbcSQLServerDriver"); //2、驱动为SQL 2005时,sqljdbcjar

Connection con=DriverManagergetConnection(strurl,"sa","sa");

executeUpdate、execute

concreateStatement(int resultSetType,int resultSetConcurrency)

resultSetType定义结果集类型:TYPE_FORWARD_ONLY,结果集的游标只能向前移

TYPE_SCROLL_INSENSTIVE,结果集游标可以前后移动,结果集不反映表中数据变化

TYPE_SCROLL_SENSITIVE,结果集游标可以前后移动,结果集立即反映表中数据变化

resultSetConcurrency定义结果集的更新方式:

CONCUR_UPDATABLE,可以进行更新 *** 作

CONCUR_READ_ONLY,不可以进行更新 *** 作

示例:反向遍历数据表

st=conncreateStatement(ResultSetTYPE_SCROLL_SENSITIVE,ResultSetCONCUR_READ_ONLY);

rs=stexecuteQuery(sql);

rsafterLast;//将游标指向结果集结束

while(rsprevious())

{

Systemoutprintln(rsgetString(1));//此处为第一列!也可以使用列名

}

Statement stmt=concreateStatement( ResultSetTYPE_SCROLL_SENSITIVE,ResultSetCONCUR_UPDATABLE);

//ResultSet包含符合SQL语句中条件的所有行,等价于一张表,其中有查询所返回的列标题及相应的值。通过get方法可以访问这些行中的数据

//ResultSet维持一个指向当前行的指针,最初指向第一行之前。通过ResultSetnext方法移动到下一行,返回值True/false

ResultSet rs=stmtexecuteQuery(sql);

return rs;

}

catch(Exception e)

{

Systemoutprintln("Exception:"+etoString());

return null;

}

}

public boolean executeSql(String sql)

{

try

{

ClassforName("commicrosoftjdbcsqlserverSQLServerDriver");

Connection conn=DriverManagergetConnection(strurl,"sa","sa");

Statement stmt=conncreateStatement();

stmtexecuteUpdate(sql);

conncommit();

return true;

}

catch(Exception e)

{

Systemoutprintln("Exception:"+etoString());

return false;

}

}

public static void main(String args[])

{

DBManagerSQL db=new DBManagerSQL();

ResultSet rs1=null;

try{

rs1=dbgetResult("select from student");

Systemoutprintln("");

while(rs1next())

{

Systemoutprintln(rs1getString(1));//此处为第一列!也可以使用列名getString("sno")

//getInt()可以将指定字段以Int类型返回,其他类推

}

}

catch(SQLException e)

{

Systemoutprintln("========================>"+etoString());

}

//下为记录的插入,删除,更新 *** 作

String sqlstr="insert into student values('200501013','刘玲','女')"; //注意引号

// String sqlstr="delete from student where sname='刘玲'";

//String sqlstr="update student set sex='女'where sname='张三'";

dbexecuteSql(sqlstr);

//断开连接

// 一般顺序为ResultSet--Statement-- Connection

///示例

try{

if(rs!=null)

{rsclose();}

if(stmt!=null)

{stmtclose();}

if(conn!=null&&!connisclosed())

{connclose();}

}

catch(SQLException e){

eprintStackTrace();

}

/

try{

if (rs1!=null) rs1close();

}

catch(SQLException e)

{

//Systemoutprintln("========================>"+etoString());

eprintStackTrace();

}

}

}

实在不行下面一种也行

import javasql; //导入sql库

public class DBStu { //建一个类,类名为DBStu

public boolean insert(String name,String sex,int num){//建一个公共的方法有boolean的返回值

Connection con = null; //初始化连接对象

PreparedStatement pstmt = null; //初始化执行语句对象

boolean list = false; //新建boolean变量为false;

try {

ClassforName("sunjdbcodbcJdbcOdbcDriver"); //加载连接数据库存的驱动

} catch (ClassNotFoundException ex) { //捕获异常

}

try {

con = DriverManagergetConnection("jdbc:odbc:dbName"); //用ODBC方法连接数据源,数据源名为dbName

String sql = "insert into student values(,,)"; //创建sql语句,语句意思为插入数据

pstmt = conprepareStatement(sql); //执行该语句

pstmtsetString(1,name); //在语句里添加值,里面的1对应的第一个问号,由name得到的值填入

pstmtsetString(2,sex); //与上同意

pstmtsetInt(3,num); //与上同意

int count = pstmtexecuteUpdate(); //用一个整型变量来接爱更新了几条语句

list = (count>0)true:false; //用三元运算符判断如果更新至少一条语句,list就为true

} catch (SQLException ex1) { //捕获异常

list = false; //如果有异常则为假

}finally{

try {

pstmtclose(); //关闭执行语句

conclose(); //关闭连接语句

} catch (SQLException ex2) { //捕获异常

}

}

return list; //返回它的值,如果为真,则这个方法插入数据成功了

}

}

下面是理论

完全是代码啊

第一步:在构造函数里面使用ClassforName加载驱动

第二步:在构造函数中使用DriverManagergetConnection(地址,用户,密码)得到链接。

第三步:得到预编译对象PreparedStatement ps = conncreatePreparedStatement ();

第四步:得到结果集ResuletSet rs = psexecuteQuely(SQL语句)

或者是添加,修改,删除 boolean b = psexecuteUpdata(SQL语句)

建议你开一下jdbc的书籍,你会明白为什么这么做的,理解了问题就简单了,好多的事情IDE可以做,知道原理就可以了

首先要知道JAVA里面3个 *** 作数据库的接口

CONNECTION STATEMENT REAULTSET

然后用ClassforName加载驱动

用DrivermanagergetConnection();建立连接

然后用CONNECTION的对象 createStatement();

然后就可以用得到的Statement对象去执行SQL语句了

仔细查看java api文档,在ResultSet类的最上面有一段文字:

默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。

就是说ResultSet只能向前移动(rsnext()),而且只能按所取的记录的列的顺序来读取,所以这里:

String str1 = rsgetString(field1);

String str2 = rsgetString(field2);

如果所取的记录里字段field2在field1之前,而读取的时候读field2在读field1之后,那么就会抛出上述异常!!

解决方法非常简单:要么修改select语句使得field2在field1之前,要么修改读取语句的顺序!

一般来将,Connection在DB端有最大空闲时间的限制。

如:mysql默认Connection在8个小时无人使用(即有线程用Connection发送了SQL),就会自动断开。而此时,你本地配置的数据库连接池,却还不知道该连接已经被数据库断开了。这样就产生了,虽然拿出了Connection却在使用时,抛出已经关闭的异常。

解决办法是为连接池加检验Connection有效性的配置。这个我就不好给出具体的配置了,因为得看你用的是什么数据库连接池实现。

以上就是关于java 数据库关闭连接全部的内容,包括:java 数据库关闭连接、java问题,高分悬赏!!!、在线等!!!java连接数据库,流已关闭问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10176196.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存