?? dbcon.java
字號(hào):
package com.eschool;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright 2005</p>
* <p>Company: Marquis</p>
* @author not attributable
* @version 1.0
*/
public class DbCon
{
////////////////////////////////////////////////////////////////////////////
private String driverManagerType;
private int pageSize,pageCount,absolutePage,recordCount;
////////////////////////////////////////////////////////////////////////////
private Connection connection;
private PreparedStatement preparedStatement;
private ResultSet resultSet;
private String databaseURL;
private String userName;
private String password;
/**
* 構(gòu)造DbOperation?
* 在構(gòu)造時(shí)需選擇所使用的環(huán)境類(lèi)型,
* DbOperation支持多種主流的DriverManager驅(qū)動(dòng)及DataSource環(huán)境?
* 并定義了一些常用DriverManager和DataSource的標(biāo)準(zhǔn)格式,
* 其中包括Oracle、Sybase、MySQL、SQLServer等主流數(shù)據(jù)庫(kù)的DriverManager格式?
* 以及Jdbc-Odbc-Bridge的標(biāo)準(zhǔn)格式,
* 同時(shí)還提供了Tomcate、WebLogic和WebSphere下DataSource的標(biāo)準(zhǔn)格式,
* 程序員在使用時(shí)只需要選擇相應(yīng)的常量即可?
* @param useContextType int<br>使用的環(huán)境類(lèi)圿
* @see DbOperation#getUseContextType
*/
public DbCon()
{
////////////////////////////////////////////////////////////////////////
this.driverManagerType = new String("org.gjt.mm.mysql.Driver");
this.databaseURL="jdbc:mysql://localhost:3306/xia?useUnicode=true&characterEncoding=gbk";
this.userName="root";
this.password="";
////////////////////////////////////////////////////////////////////////
this.pageSize = 20;
this.pageCount = 0;
this.absolutePage = 0;
this.recordCount = 0;
////////////////////////////////////////////////////////////////////////
this.connection = null;
this.preparedStatement = null;
this.resultSet = null;
}
/**
* 打開(kāi)數(shù)據(jù)庫(kù),需要給該方法提供數(shù)據(jù)庫(kù)的URL地址、用戶名稱(chēng)及用戶密碼?
* 成功打開(kāi)數(shù)據(jù)庫(kù)后便可通過(guò)executeSQL方法對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作?
* @param databaseURL String<br>數(shù)據(jù)庫(kù)的URL地址,如果使用DataSource則為數(shù)據(jù)庫(kù)的JNDI-Name
* @param userName String<br>用戶名稱(chēng)
* @param password String<br>用戶密碼
* @throws java.sql.SQLException
* @throws java.lang.ClassNotFoundException
* @throws javax.naming.NamingException
*/
public void open()
throws java.sql.SQLException,java.lang.ClassNotFoundException,javax.naming.NamingException
{
Class.forName(this.driverManagerType);
this.connection = DriverManager.getConnection(this.databaseURL,this.userName,this.password);
}
/**
* 執(zhí)行SQL語(yǔ)句,可以是Select、Insert、Delete、Update中的任何一個(gè)?
* @param sql String<br>欲被執(zhí)行的SQL語(yǔ)句
* @return ResultSet<br>如果執(zhí)行查詢操作,則返回該查詢操作的ResultSet;如果執(zhí)行的是其它操作,則返回null?
* @throws java.sql.SQLException
*/
public ResultSet executeSQL(String sql) throws java.sql.SQLException
{
sql = sql.trim();
this.preparedStatement = this.connection.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
if(sql.substring(0,1).equalsIgnoreCase("s"))
{
this.resultSet = this.preparedStatement.executeQuery(sql);
return this.resultSet;
}
else
{
this.preparedStatement.executeUpdate(sql);
return null;
}
}
/**
* 關(guān)閉數(shù)據(jù)帿
* @throws java.sql.SQLException
*/
public void close() throws java.sql.SQLException
{
if(this.resultSet!=null)
{
this.resultSet.close();
}
if(this.preparedStatement!=null)
{
this.preparedStatement.close();
}
if(this.connection!=null)
{
this.connection.close();
}
}
/**
* 關(guān)閉數(shù)據(jù)帿
* @throws java.sql.SQLException
*/
public void closeRs() throws java.sql.SQLException
{
if(this.resultSet!=null)
{
this.resultSet.close();
}
}
/**
* 獲得當(dāng)前使用的環(huán)境類(lèi)型?
* 這些值由DbOperation定義?br>
* useOracleDriverManager - 使用Oracle格式的DriverManager<br>
* useSybaseDriverManager - 使用Sybase格式的DriverManager<br>
* useMysqlDriverManager - 使用MySQL格式的DriverManager<br>
* useSqlserverDriverManager - 使用SQLServer格式的DriverManager<br>
* useDb2DriverManager - 使用DB2格式的DriverManager<br>
* useInformixDriverManager - 使用Informix格式的DriverManager<br>
* usePostgresqlDriverManager - 使用PostgreSQL格式的DriverManager<br>
* useJdbcOdbcBridge - 使用Jdbc-Odbc-Bridge格式的DriverManager<br>
* useTomcateDataSource - 使用Tomcate格式的DataSource<br>
* useWeblogicDataSource - 使用WebLogic格式的DataSource<br>
* useWebsphereDataSource - 使用WebSphere格式的DataSource
* @see DbOperation#useOracleDriverManager
* @see DbOperation#useSybaseDriverManager
* @see DbOperation#useMysqlDriverManager
* @see DbOperation#useSqlserverDriverManager
* @see DbOperation#useDb2DriverManager
* @see DbOperation#useInformixDriverManager
* @see DbOperation#usePostgresqlDriverManager
* @see DbOperation#useJdbcOdbcBridge
* @see DbOperation#useTomcateDataSource
* @see DbOperation#useWeblogicDataSource
* @see DbOperation#useWebsphereDataSource
* @return int<br>當(dāng)前使用的環(huán)境類(lèi)圿
*/
/**
* 設(shè)置當(dāng)前將要顯示的頁(yè)碼,每頁(yè)顯示的數(shù)據(jù)行數(shù)由setPageSize方法的參數(shù)值決定,
* 當(dāng)輸入的頁(yè)碼值小丿時(shí),將顯示第一頁(yè)數(shù)據(jù);
* 當(dāng)輸入的頁(yè)碼值大于最后一頁(yè)的頁(yè)碼值時(shí),將顯示最后一頁(yè)?
* 需要注意的是,通過(guò)setAbsolutePage來(lái)對(duì)結(jié)果集進(jìn)行定位,不會(huì)使查詢結(jié)果集發(fā)生改變?
* 而只是對(duì)結(jié)果集中的指針(cursor)進(jìn)行了定位?
* 因此如果程序員想得到真正的分頁(yè)效果,應(yīng)參照如下程序?qū)崿F(xiàn)相應(yīng)的功能? * DbOperation database;
* ResultSet resultSet = database.executeSQL("Select * From Table");
* database.setPageSize(20);
* database.setAbsolutePage(2);
* for(int i=1;i<=database.getPageSize();i++)
* {
* if(resultSet.isLast())
* {
* break;
* }
* resultSet.next();
* }
* @see DbOperation#setPageSize
* @param absolutePage int<br>欲顯示的頁(yè)碼便
*/
///*
public void setAbsolutePage(int absolutePage)
{
this.getPageCount();
if(absolutePage<1) absolutePage = 1;
if(absolutePage>this.pageCount) absolutePage = this.pageCount;
this.absolutePage = absolutePage;
}
//*/
/**
* 獲得當(dāng)前顯示的頁(yè)碼便
* @return int<br>當(dāng)前顯示的頁(yè)碼便
*/
///*
public int getAbsolutePage()
{
return absolutePage;
}
//*/
/**
* 設(shè)置每頁(yè)顯示記錄的條數(shù)?
* 當(dāng)輸入的參數(shù)值小丿時(shí),每頁(yè)顯示一條記錄;
* 當(dāng)輸入的參數(shù)值大于記錄總數(shù)時(shí),將顯示所有數(shù)據(jù);
* 默認(rèn)情況下每頁(yè)將顯示20條記錄?
* 程序員可通過(guò)setAbsolutePage方法改變當(dāng)前顯示的頁(yè)碼?
* @see DbOperation#setAbsolutePage
* @param pageSize int<br>每頁(yè)顯示數(shù)據(jù)的行擿
*/
///*
public void setPageSize(int pageSize)
{
if(pageSize<1) pageSize = 1;
this.pageSize = pageSize;
}
//*/
/**
* 獲得每頁(yè)顯示記錄的條擿
* @return int<br>每頁(yè)顯示記錄的條擿
*/
///*
public int getPageSize()
{
return pageSize;
}
//*/
/**
* 獲得記錄結(jié)果集顯示的總的頁(yè)數(shù),其值為:總的記錄擿每頁(yè)顯示的記錄數(shù)[+1]?
* @return int<br>記錄結(jié)果集顯示的總的頁(yè)數(shù)
*/
///*
public int getPageCount()
{
this.getRecordCout();
this.pageCount = this.recordCount/this.pageSize;
if((this.recordCount%this.pageSize!=0)) this.pageCount++;
return pageCount;
}
//*/
/**
* 獲得記錄結(jié)果集總的記錄擿
* @return int<br>記錄結(jié)果集總的記錄擿
*/
///*
public int getRecordCout()
{
try
{
if(this.resultSet.last())
{
this.recordCount = this.resultSet.getRow();
}
else
{
this.recordCount = 0;
}
}
catch(java.sql.SQLException e)
{
}
finally
{
}
return this.recordCount;
}
//*/
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -