要求用javabean封装的,能进行基本的查询等操作,并安全释放连接。谢谢了!!
解决方案 »
- 拦截器问题,如何拦截静态资源文件的访问请求<img src="/images/***.jpg"/>?
- 关于DNS解析的问题
- GWT做web页面,如何显示时钟;桌面程序如何与tomcat中的servlet或sesion交互?
- 第一个jsp 页面 就乱码 汗
- 袁红岗:谈JSF的未来之路
- 关于JSP操作文本文件的中文乱码的问题
- 请问大家现在开发网站用什么工具、语言或框架最好?
- 右键点这个类,怎么没有run菜单项,应该在什么地方设置更改
- 怎么连接数据库?
- 做一个bs架构的虚拟实验室,跪求入门所需要的知识
- 高人必看的问题
- 为什么在IE运行http://localhost:8080/admin结果是空白页呢。
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2006</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
import java.sql.*;
import javax.naming.*;
import javax.sql.*;public class nsDatabase {
private Connection con;
private Statement stmt;
private ResultSet rs;
private int rn;
private boolean rb;
static Context ctx;
static DataSource ds;
private String sql = " select * from sysobjects ";
public nsDatabase() {
try {
ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/DBconn");
con = ds.getConnection(); stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(sql); }
catch (Exception e) {
e.printStackTrace();
} } /* 函数功能:创建数据库Statement */
public void init(Connection con) {
try {
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
}
catch (Exception e) {
System.out.println("init");
System.out.println(e.getMessage());
}
} /* 函数功能:关闭数据库连接 */
public void close() {
try {
if (rs != null) {
rs.close();
}
}
catch (Exception e) {
}
try {
if (stmt != null) {
stmt.close();
}
}
catch (Exception e) {
}
try {
if (con != null) {
con.close();
}
}
catch (Exception e) {
System.out.println("close");
System.out.println(e.getMessage());
}
} /* 函数功能:获取数据库连接 */
public Connection getCon(String strDS) {
try {
ds = (DataSource) ctx.lookup(strDS);
con = ds.getConnection();
}
catch (Exception e) {
System.out.println("getCon");
System.out.println(e.getMessage());
}
return con;
} /* 函数功能:获取数据结果集 */
public ResultSet GetResultSet(String strSql) {
try {
rs = stmt.executeQuery(strSql);
}
catch (Exception e) {
e.printStackTrace();
}
return rs;
} public int GetResultNum(String strSql) {
try {
rn = stmt.executeUpdate(strSql);
}
catch (Exception e) {
e.printStackTrace();
}
return rn;
} public boolean GetResultBool(String strSql) {
try {
rb = stmt.execute(strSql);
}
catch (Exception e) {
e.printStackTrace();
}
return rb;
}} 在其它的类里面可以这样调用
import java.sql.*;
import nsDatabase ;
nsDatabase db = new nsDatabase();
String strSql = "select * from Table ";
ResultSet ResultSet1 = db.GetResultSet(strSql);
return ResultSet1;
首先谢谢你的热心,但是我发现你的代码里虽然写了释放数据库连接的函数close,可是并没有调用。那这样,这个连接不是还一直存在吗?其实我想要的关键是正确释放数据库连接,包括在查询后。
你平时的工作中,是如何封装的,能说说吗?
class UserInfo
{
private String id;
private String name;public void setId(String id)
{
this.id=id;
}public void setName(String name)
{
this.name=name ;
}public String getId()
{
return this.id;
}public String getName()
{
return this.name;
}
}这个是一个UserInfo实体类,是和数据库中的user表对应的下面我只写查询方法
public List getAllUser()
{
//这里省略了连接和创建PreparedStatement
ResultSet rs = pst.executeQuery();List list = new ArrayList();
UserInfo userInfo ;
while(rs.next())
{
userInfo = new UserInfo();
userInfo.setId(rs.getString("id");
userInfo.setName(rs.getString("name");list.add(userInfo);
}close(rs,pst,conn);
return list;
}这里假设有一个close()方法,是回收资源的,最后在finally块中关闭(省略了)明白了吗?当然,你可以使用Hibernate,它做的更加完善
import java.util.Properties;
import java.util.Date;
import java.text.SimpleDateFormat;public class DBConnection {
public Connection conn = null;
public ResultSet rs = null;
private Statement stmt= null;
private PreparedStatement pStat = null;
public void DBConnection() {
try {
getConnection();
}
catch (Exception ex) {
ex.printStackTrace();
}
}//»ñÈ¡Êý¾Ý¿âÁ¬½ÓÀà
public static Connection getConnection() throws SQLException {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch (java.lang.ClassNotFoundException e) {
System.err.println("¼ÓÔØÇý¶¯Æ÷ÓдíÎó:" + e.getMessage());
System.out.print("¼ÓÔØÇý¶¯Æ÷ÓдíÎó:" + e.getMessage()); //Êä³öµ½¿Í»§¶Ë
}
Properties sysProps = new Properties();
sysProps.put("user", "hua");
sysProps.put("password", "hua");
return DriverManager.getConnection(
"jdbc:oracle:thin:@10.71.200.198:1521:test", sysProps);
} public int executeInsert(String sql) {
int num = 0;
try {
conn = getConnection();
stmt = conn.createStatement();
num = stmt.executeUpdate(sql);
}
catch (SQLException ex) {
System.err.println("Ö´ÐвåÈëÓдíÎó:" + ex.getMessage());
System.out.print("Ö´ÐвåÈëÓдíÎó:" + ex.getMessage()); //Êä³öµ½¿Í»§¶Ë
} CloseDataBase();
return num;
} // display data public ResultSet executeQuery(String sql) {
rs = null;
try {
conn = getConnection();
pStat = conn.prepareStatement(sql);
rs = pStat.executeQuery();
}
catch (SQLException ex) {
System.err.println("Ö´ÐвéѯÓдíÎó:" + ex.getMessage());
System.out.print("Ö´ÐвéѯÓдíÎó:" + ex.getMessage()); //Êä³öµ½¿Í»§¶Ë
}
return rs;
//CloseDataBase();
} // delete data
public int executeDelete(String sql) {
int num = 0;
try {
conn = getConnection();
stmt = conn.createStatement();
num = stmt.executeUpdate(sql);
}
catch (SQLException ex) {
System.err.println("Ö´ÐÐɾ³ýÓдíÎó:" + ex.getMessage());
System.out.print("Ö´ÐÐɾ³ýÓдíÎó:" + ex.getMessage()); //Êä³öµ½¿Í»§¶Ë
}
finally {
CloseDataBase();
}
return num;
} //¹Ø±ÕÊý¾Ý¿â
public void CloseDataBase() {
try {
if (conn != null) {
conn.close();
}
}
catch (Exception end) {
System.err.println("Ö´ÐйرÕConnection¶ÔÏóÓдíÎó:" + end.getMessage());
System.out.print("Ö´ÐйرÕConnection¶ÔÏóÓдíÎó:" + end.getMessage()); //Êä³öµ½¿Í»§¶Ë
}
} //¹Ø±ÕÊý¾Ý¿â
public void close(ResultSet rs, PreparedStatement pst, Connection conn) {
try {
if (rs != null) {
rs = null;
}
if (pst != null) {
pst.clearParameters();
}
if (conn != null) {
conn.close();
}
}
catch (Exception end) {
System.err.println("Ö´ÐйرÕConnection¶ÔÏóÓдíÎó:" + end.getMessage());
System.out.print("Ö´ÐйرÕConnection¶ÔÏóÓдíÎó:" + end.getMessage()); //Êä³öµ½¿Í»§¶Ë
}
}
//»ñÈ¡µ±Ç°Ê±¼ä×Ö·û´®£¬ÒÔyyyy-mm-dd¸ñʽ·µ»Ø
public static String getCurrDatetimeStr() {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(new Date());
}
}
!
public class DataBaseBean { Connection con = null ;
ResultSet rs = null ;
Statement st = null ;
public DataBaseBean() throws ClassNotFoundException, SQLException
{
String user = "" ;
String password = "" ;
Class.forName("驱动");
con = DriverManager.getConnection("URL",user,password) ;
}
//以下是进行查询操作
public ResultSet findAll(String sql) throws SQLException
{
st = con.createStatement();
rs = st.executeQuery(sql);
return rs ;
}
// 以下是进行 插入/更新 的操作
public void insertOrUpdate(String sql) throws SQLException
{
st = con.createStatement() ;
st.executeQuery(sql) ;
this.destory() ;
}
// 以下是关闭Connection,Statement的方法
public void destory() throws SQLException
{
con.close() ;
st.close() ;
}
// 以下是关闭Connection,Statement,ResultSet的方法
public void destroy(ResultSet rs) throws SQLException
{
this.rs = rs ;
con.close() ;
st.close() ;
rs.close() ;
}
}
〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓操作ResultSet是必然的,你可以把ResultSet封装一个类里,也可以放到List,Set或者一个集合里,我认为在页面与数据库操作的中间,应该加一层操作ResultSet。这样可以提高页面与数据库层的效率。最好不要把ResultSet放到页面里。
我想中间的那层不用我写了吧!