读书人

用数据库链接池的程序如何改写成用jav

发布时间: 2011-12-29 22:09:38 作者: rapoo

用数据库链接池的程序怎么改写成用javabean的呢?
代码如下 想改成 javaBean 连接的


package msdn.javabean;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;

import sun.jdbc.rowset.*;

/**
* <p> Title: 基础数据库操作类 </p>
* <p> Description: </p>
* <p> Copyright: Copyright (c) 2006 </p>
* <p> Company: </p>
* @author hellion
* @version 1.0
*/

public class DBManager {
public static final String DATABASE = "java:comp/env/jdbc/database ";

public DBManager() {
}

/**
* 取数据库连接
* @param jndi 数据库连接JNDI
* @return 数据库连接
* @throws Exception
*/
public static Connection getConnection(String jndi) throws Exception {
Connection conn = null;
try {
Context initCtx = new InitialContext();

DataSource ds = (DataSource) initCtx.lookup(jndi);
conn = ds.getConnection();
conn.setAutoCommit(false);
}
catch (Exception e) {
e.printStackTrace();
}
return conn;
}

public static Connection getConnection() throws Exception {
return getConnection(DATABASE);
}

public static void cleanup(Connection conn, PreparedStatement ps) {
try {

if (ps != null) {
ps.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
try {
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}

protected static void cleanup(Connection conn, PreparedStatement ps,
ResultSet rs) {



try {
if (rs != null) {
rs.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
try {
if (ps != null) {
ps.close();
}
}
catch (Exception e) {}
try {
if (conn != null && !conn.isClosed()) {
conn.close();
}
}
catch (Exception e) {
e.printStackTrace();
}
}

/**
*查询默认数据库的数据
* @param sql
* @deprecated
* @return
* @throws Exception
*/
public static CachedRowSet executeQuery(String sql) {
return executeQuery(sql, DBManager.DATABASE);
}

/**
*
* @param sql
* @param databasejndi
* @deprecated
* @return
* @throws Exception
*/
public static CachedRowSet executeQuery(String sql, String databasejndi) {
CachedRowSet crs = null;
Statement st = null;
Connection conn = null;
ResultSet rs = null;
try {
crs = new CachedRowSet();
conn = DBManager.getConnection(databasejndi);
st = conn.createStatement();
rs = st.executeQuery(sql);
crs.populate(rs);
}
catch (Exception se) {
System.out.println( "SQLException in DBManager.exceuteQuery, sql is :\n " +
sql);
se.printStackTrace();


}
finally {
DBManager.cleanup(conn, null, rs);
}
return crs;
}

/**
* 通用查询 默认数据库
* @param sql
* @param values
* @return CachedRowSet
*/
public static CachedRowSet executeQuery(String sql, Object[] values) {
return executeQuery(sql, values, DBManager.DATABASE);
}

/**
* 通用查询
* @param sql
* @param values
* @param dataBase
* @return
*/
public static CachedRowSet executeQuery(String sql, Object[] values,
String dataBase) {
System.out.println( "sql: "+sql);
CachedRowSet crs = null;
PreparedStatement st = null;
Connection conn = null;
ResultSet rs = null;
try {
crs = new CachedRowSet();
if (values == null || values.length < 1) {
return executeQuery(sql);
}
conn = DBManager.getConnection(dataBase);
st = conn.prepareStatement(sql);
for (int i = 0; i < values.length; i++) {
st.setObject(i + 1, values[i]);
}
rs = st.executeQuery();
crs.populate(rs);
}
catch (Exception se) {
System.out.println( "SQLException in DBManager.exceuteQuery, sql is :\n " +
sql);
se.printStackTrace();
}
finally {
DBManager.cleanup(conn, null, rs);


}
return crs;
}

/**
* 执行update,delete,insert 操作.
* @param sql
* @deprecated
* @return
* @throws Exception
*/
public static int executeUpdate(String sql) {
Statement st = null;
Connection conn = null;
int result = 0;
try {
conn = DBManager.getConnection(DBManager.DATABASE);
st = conn.createStatement();
result = st.executeUpdate(sql);
conn.commit();
}
catch (Exception se) {
try {
conn.rollback();
}
catch (Exception es) {
es.printStackTrace();
}
System.out.println( "SQLException in DBConnet.exceuteQuery, sql is :\r\n " +
sql + " \r\nerror is: " + se.getMessage());
se.printStackTrace();
}
finally {
DBManager.cleanup(conn, null, null);
}
return result;

}

/**
* 执行数据修改操作。
* @param sql
* @param values
* @return
*/
public static int executeUpdate(String sql, Object[] values) {
Connection conn = null;
PreparedStatement ps0 = null;
int rows = 0;
try {
conn = getConnection(DBManager.DATABASE);
ps0 = conn.prepareStatement(sql);
for (int i = 0; i < values.length; i++) {
ps0.setObject(i + 1, values[i]);
}
rows = ps0.executeUpdate();


conn.commit();
}
catch (Exception e) {
try {
conn.rollback();
}
catch (Exception ex) {
ex.printStackTrace();
}
e.printStackTrace();
}
finally {
cleanup(conn, ps0);
}
return rows;
}

}


server.xml 文件

<Resource name= "jdbc/database " type= "javax.sql.DataSource " username= "sa " password= "sa " driverClassName= "com.microsoft.jdbc.sqlserver.SQLServerDriver " maxIdle= "2 " maxWait= "50 " url= "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=chinamsdn " maxActive= "100 "/>

我的博客 www.liyingfei.com

[解决办法]
javabean连接的无非就是getConnection这个函数中的连接操作不再是DataSource ds = (DataSource) initCtx.lookup(jndi);
conn = ds.getConnection();
而是
Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver ");
conn = Driver.getConnect( "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=chinamsdn ",sa ", "sa ");

之类的东西
[解决办法]
楼上正解..
[解决办法]
你的那个程序好像已经就是javabean了,
[解决办法]
public Connection getConnection() {
Connection conn = null;
try {
//加载驱动
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver ");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
//获得Connection对象
con = DriverManager.getConnection( "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=test ", "sa ", " ");
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
[解决办法]
这个程序是用到了连接池技术 能具体结合这个例子 具体写一下 怎么不用连接池 把数据库链接直接写在java 文件里面呢》?
===================================================
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver ");
Connection conn =DriverManager.getConnection( "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test ", "sa ", " ");

读书人网 >Java Web开发

热点推荐