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连接数据库,流已关闭问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)