gender:
<%
JDBConnection
jdbc
=
new
JDBConnection();
String
sql
=
"select
*
from
gender";
ResultSet
rs
=
null;
rs
=
jdbc.executeQuery(sql);
while
(rs.next())
{
%>
">
<%=rs.getString("gender")%>
<%
}
%>
---------
JDBConnection是我寫的一個javabean,封裝了資料庫的各種操作。
以上有此假設:有一個數據表內gender,裡面有個字容段gender,但只有兩條記錄(M和F)。
子獲取值的時候就只獲取gender的值就行了。
String
gender
=
request.getParameter("gender");
㈡ JSP對資料庫的基本操作
直接將你要的連接封裝成一個資料庫的連接類,在這個類中值完成資料庫的連接和關閉不做任何事情,要用的時候直接調用就是了,你說的<jsp:useBean id="db" class "bean.ConnDB" scope="session"/>....
JavaBean是一種符合特定規范的Java對象,在JavaBean中定義了一系列的屬性(也就是成員變數),並提供了訪問和設置這些屬性的公共方法(也就是getXXX和setXXX方法)。JavaBean可以作為共享數據存放在page、request、session和application范圍內。在JSP文件中,可以通過專門的標簽來定義或訪問JavaBean。例如:<jsp:useBean id="uuwoxin" scopo="page/request/session/application" class="BaiUser">(--使用BaiUser類實例化一個對象uuwoxin,相當於BaiUser uuwoxin=new BaiUser();--)
輸出一個JavaBean的某個屬性到頁面上的時候,可以使用<jsp:getProperty name="uuwoxin" property="password">(--相當於uuwoxin.getPassword();--)
設置一個JavaBean的某個屬性,可以使用<jsp:setProperty name="uuwoxin" property="password" value="uuwoxin_password">(--相當於uuwoxin.setPassword("uuwoxin_password");--)
用於實例化JavaBean對象的類是寫在後台的,比如Tomcat站點中WEB-INF/classes文件夾下,並且需要編譯成位元組碼文件(.class)。
struts框架中的ActionForm Bean就是一種典型的JavaBean。
深入了解JavaBean可以訪問:http://java.sun.com/procts/javabeans。
㈢ JAVA web 與資料庫的連接到底是怎樣連的啊
JAVA Web開發中與資料庫的連接操作,配置:
1、新建資料庫。
新建登錄角色,在新建資料庫的時候把資料庫的所有權交給你新建的角色。用用戶和密碼控制資料庫。保證資料庫的安全。
2、編寫context.xml文件 Xml文件的目的是封裝用戶和密碼,也是封裝的一種,方便操作。
以下為context.xml文件樣例:
<?xml version="1.0" encoding="utf-8"?>
<Context reloadable = "true">
<Resource
name="jdbc/sampleHS"
type="javax.sql.DataSource"
maxActive="14"
maxIdle="10"
username="hstaoshu"
maxWait="5000"
driverClassName="org.postgresql.Driver"
password="hstaoshu"
url="jdbc:postgresql://localhost:5432/hstaoshu"/>
</Context>
詳細說明:
name="jdbc/sampleHS"裡面的ssampHS是可改名稱,建議根據需要自己命名;
username="hstaoshu"
password="hstaoshu"此兩項為你新建的資料庫登錄角色用戶名和密碼信息,只有匹配 了才能訪問。這里簡單為了表示,把用戶名和密碼弄成了跟資料庫名字一樣。其實這是很不安全的。
url="jdbc:postgresql://localhost:5432/hstaoshu"/>
這是連接資料庫的URl,就像訪問網站的地址一樣。沒有這個是無法訪問資料庫的。localhost:5432表示本地埠。一般不需要改動,如果你在配置資料庫的時候改動過埠,那麼你需要把它改回來。/hstaoshu是你的資料庫名稱。
其他選項請勿擅自改動。
3、編寫DAO類。
DAO類的作用是與數據連接後,對資料庫的一些操作的封裝。封裝的作用。為了更好的數據管理。
DAO是真正如何使用資料庫的關鍵步驟,前兩步只是部署和配置。
private static InitialContext context = null;
private DataSource dataSource = null;
//一般把跟資料庫的連接放在DAO類的構造函數里,只要被實例化,就能和資料庫連接。
public BookDAO() {
try {
if (context == null) {
context = new InitialContext();
}
dataSource = (DataSource) context.lookup("java:comp/env/jdbc/sampleHS");
// 連接資料庫,前面在context.xml文件配置里的URl
} catch (NamingException e2) {
e2.printStackTrace();
}
}
public Connection getConnection() {
Connection conn = null;
try {
conn = dataSource.getConnection();// 獲得數據源的連接對象
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
做完上面的三步操作,開發環境已經完全和資料庫連接OK,可以開始資料庫的操作了。一般來說,對資料庫的操作語句都是提前封裝好的。這樣修改起來會對下面的代碼影響降到最小。
如下:
// ------------------資料庫操作語句代碼封裝------------------
/* 查看所有圖書 */
private static final String SELECT_ALL_SQL = "SELECT * FROM book";
那麼在使用的時候只要直接調用:
pstmt = conn.prepareStatement(SELECT_ALL_SQL);
㈣ 用javabean怎麼樣才能顯示資料庫中的數據,(Java與資料庫已通過jdbc在另已在中連接 )
資料庫中有個學生表(STUDENT),欄位有學號、姓名、性別、生日。
1、建立學生對應的JavaBean
publicclassStudent{
privateintno;
privateStringname;
privateintsex;
privateDatebirthday;
//setter、getter方法
}
2、從資料庫中查詢數據封裝到JavaBean中
Stringsql="select*fromstudent";
ps=connection.preparestatement(sql);
rs=ps.execeteQuery();
ArrayList<Student>list=newArrayList<Student>();
while(rs.hasNext()){
Students=newStudent();
s.setNo(rs.getInt("NO"));
//...
list.add(s);
}
//然後遍歷list就可以拿到Student的數據了。
㈤ 關於javabean和DAO模式
JavaBean是數據的承載體,負責把一組有邏輯的數據從一個層傳到另一個層。
DAO的出現是對持久層的變動的一個解決方案。
對於不同的持久介質(RDBMS、XML、ODBMS等)、不同的提供廠商(Oracle、Mysql等)提供的產品,進行持久化操作時,對於業務邏輯層應該是統一的,於是DAO模式就出現了。
對於同一個業務操作,例如添加一個用戶,請求到達業務層,只需調用DAO層的addUser()即可。而到底是怎麼添加的、以及添加到哪裡,是業務層不用關心的,也是不要關心的。
於是,持久層將利用業務層傳遞來的請求數據,即封裝了要添加的用戶信息JavaBean,添加到持久層:Oracle就要取序列,Mysql會自動增長,XML就要手動控制了。這些實現細節對業務邏輯層是一樣的效果。
但是DAO模式中也會有一些數據承載體,不過它們承載的不是業務數據,而是持久化操作的相關對象,例如DAO對象,DAO工廠,連接對象等。表面上看,這些也承載數據,但它實際是包含了內在的邏輯和操作。例如連接對象的打開和關閉,事務的回滾和提交等。
所以,嚴格意義上來說,它們不是純粹的JavaBean。純粹的JavaBean是只包含屬性和這些屬性對應的getter和setter。
㈥ jsp中封裝資料庫操作,例如資料庫連接,條件查詢等到javabean中,怎麼做
封裝到bean裡面有點麻煩,等於自己實現簡易orm了,況且多表查詢時還不好操作,把結果集放到List裡面還好
㈦ (JAVA)怎樣將對資料庫的增刪查改方法封裝起來便於以後調用
public class DBRecordSet {
static private Logger log = Logger.getLogger(DBRecordSet.class.getName());
ResultSetMetaData md = null;
Connection conInner = null;
private int firstElementOfThisList = 0; //當前緩沖池中保存的記錄在整個結果集中的位置
private int countOfElementsInthisList = 0; //緩沖池中記錄的數目
private List resultList = null; //保存結果的緩沖池
private Vector columnMap = null;
private int cacheSize = -1; //保存結果的緩沖池大小
private int maxRecords = 10; //執行結果集的時候得到的最多的記錄數
private String strSQLStmt = null; //打開結果集的時候執行的SQL語句
private boolean isClosed = true; //結果集是否已經open
private int columnCount = -1; //結果集欄位數目
private int columnTypeInt[] = null;
private String columnTypeString[] = null;
private int curRow = 0; // 當前游標所在行,基數為 1
private int maxRow = -1; // 執行查詢語句得到的記錄數,基數為 1
private int curPage = -1; // 分頁顯示時當前所在頁,基數為 1
private int pageSize = -1; // 分頁顯示時每頁記錄數,基數為 1
private int pageCount = -1; // 分頁顯示時總頁數,基數為 1
private int updateCount = -1;
private boolean cursorDir = true;
DBConnectionManager connMgr = null;
private DBConnectionManager getConnectionManager() {
if (connMgr == null) {
connMgr = DBConnectionManager.getInstance();
}
return connMgr;
}
private int getCacheSize() {
if (this.cacheSize == -1) {
cacheSize = getConnectionManager().getCacheSize();
if (cacheSize <= 0)
cacheSize = 50;
}
return this.cacheSize;
}
public void setCacheSize(int size) {
this.cacheSize = size;
}
/**
* 構造函數
*/
public DBRecordSet() {
close();
}
public int execute(Connection con, String sql) {
if (con == null || sql == null || sql.length() <= 0) {
return -1;
}
Statement stmt = null;
try {
if (con.isClosed()) return -1;
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// 設置 ResultSet 對象可包含的最多行數
if (maxRecords > 1) stmt.setMaxRows(maxRecords);
//執行語句,判斷語句類型
log.debug("開始執行SQL語句: " + sql);
int resultCount = stmt.executeUpdate(sql);
log.debug("執行SQL語句成功: " + sql + "; 返回結果數目為" + resultCount);
return resultCount;
} catch (Exception e) {
log.error("執行SQL語句失敗:" + e.getMessage());
} finally {
try {
if (stmt != null)
stmt.close();
} catch (Exception e) {
log.error("關閉Statement失敗:" + e.getMessage());
return -1;
}
}
return -1;
}
public boolean openSelect(Connection con, String sql) {
Statement stmt = null;
ResultSet rs = null;
int n = 0, i = 0;
if (con == null) return false;
firstElementOfThisList = 0;
countOfElementsInthisList = 0;
try {
if (con.isClosed()) return false;
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// 設置 ResultSet 對象可包含的最多行數
if (maxRecords > 1) stmt.setMaxRows(maxRecords);
//執行語句,判斷語句類型
log.debug("開始執行SQL語句: " + sql);
if (stmt.execute(sql)) {
log.debug("執行查詢語句成功");
rs = stmt.getResultSet();
md = rs.getMetaData();
columnCount = md.getColumnCount();
updateCount = -1;
if (resultList != null) {
resultList.clear();
resultList = null;
}
resultList = new ArrayList();
if (columnMap != null) {
columnMap = null;
}
columnMap = new Vector(columnCount);
for (n = 1; n <= columnCount; ++n) {
String columnName = md.getColumnName(n).trim();
columnName = columnName.toLowerCase();
if (columnName == null || columnName.length() <= 0) {
columnName = "vcolumn_" + String.valueOf(n);
}
if (columnMap.contains(columnName)) {
columnName += "_" + String.valueOf(n);
}
columnMap.add(columnName);
}
/*
for (n = 1; n <= columnCount; ++n){
log.debug("查詢語句結果集的列" + n + ":" + String.valueOf(columnMap.get(n - 1)));
}
*/
PropertyContainer property = null;
while (rs.next() && i < getCacheSize()) {
property = new PropertyContainerImpl();
for (n = 1; n <= columnCount; ++n) {
try {
property.addPropertyBy(String.valueOf(columnMap.get(n - 1)), rs.getObject(n));
} catch (Exception e) {
property.addPropertyBy(String.valueOf(columnMap.get(n - 1)), rs.getString(n));
}
}
resultList.add(property);
i++;
}
if (property != null)
log.debug("Open查詢的最後一條記錄是:" + property.valueToString());
if (i > 0) { //如果有記錄取出
firstElementOfThisList = 1;
countOfElementsInthisList = resultList.size();
maxRow = i;
if (i >= getCacheSize()) { //記錄沒有取完
//注意:為了兼容以前代碼,這里需要將結果集滾動到最後,用來獲得記錄數目
while (rs.next()) maxRow++;
maxRow++;
}
curRow = 0;
} else {//如果沒有記錄
firstElementOfThisList = 0;
countOfElementsInthisList = 0;
curRow = -1;
maxRow = 0;
log.debug("沒有記錄返回:" + sql);
}
log.debug("open: 讀取從第0條記錄開始的" + getCacheSize() + "條記錄, 返回記錄" + countOfElementsInthisList + "條。總記錄數為" + maxRow + "條");
} else {
// 執行更新語句後將查詢結果集關閉並清除各項信息
int updatecount = stmt.getUpdateCount();
close();
updateCount = updatecount;
log.debug("成功執行更新語句");
} //保存執行的SQL語句
strSQLStmt = sql;
} catch (SQLException e) {
log.error(e.toString() + " : 執行SQL語句時出錯:" + sql);
return false;
} catch (Exception e) {
log.error(e.toString() + " : 執行SQL語句時出錯:" + sql);
return false;
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
//getConnectionManager().freeConnectionInner(con);
} catch (Exception e) {
log.error(e.toString() + " : 結果集不能正確關閉");
//getConnectionManager().freeConnectionInner(con);
return false;
}
}
isClosed = false;
return true;
}
/**
* 執行SQL語句,可以為查詢或更新語句。
* 執行更新語句後調用 getUpdateCount() 取得所更新的記錄數
*
* @param sql 執行的SQL語句
*/
public boolean open(String sql) {
Statement stmt = null;
ResultSet rs = null;
int n = 0, i = 0;
Connection con = getConnectionManager().getConnectionInner();
if (con == null) return false;
firstElementOfThisList = 0;
countOfElementsInthisList = 0;
try {
if (con.isClosed()) return false;
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
// 設置 ResultSet 對象可包含的最多行數
if (maxRecords > 1) stmt.setMaxRows(maxRecords);
//執行語句,判斷語句類型
log.debug("開始執行SQL語句: " + sql);
if (stmt.execute(sql)) {
log.debug("執行查詢語句成功");
rs = stmt.getResultSet();
md = rs.getMetaData();
columnCount = md.getColumnCount();
updateCount = -1;
if (resultList != null) {
resultList.clear();
resultList = null;
}
resultList = new ArrayList();
if (columnMap != null) {
columnMap = null;
}
columnMap = new Vector(columnCount);
for (n = 1; n <= columnCount; ++n) {
String columnName = md.getColumnName(n).trim();
columnName = columnName.toLowerCase();
if (columnName == null || columnName.length() <= 0) {
columnName = "vcolumn_" + String.valueOf(n);
}
if (columnMap.contains(columnName)) {
columnName += "_" + String.valueOf(n);
}
columnMap.add(columnName);
}
/*
for (n = 1; n <= columnCount; ++n){
log.debug("查詢語句結果集的列" + n + ":" + String.valueOf(columnMap.get(n - 1)));
}
*/
PropertyContainer property = null;
while (rs.next() && i < getCacheSize()) {
property = new PropertyContainerImpl();
for (n = 1; n <= columnCount; ++n) {
try {
property.addPropertyBy(String.valueOf(columnMap.get(n - 1)), rs.getObject(n));
} catch (Exception e) {
property.addPropertyBy(String.valueOf(columnMap.get(n - 1)), rs.getString(n));
}
}
resultList.add(property);
i++;
}
if (property != null)
log.debug("Open查詢的最後一條記錄是:" + property.valueToString());
if (i > 0) { //如果有記錄取出
firstElementOfThisList = 1;
countOfElementsInthisList = resultList.size();
maxRow = i;
if (i >= getCacheSize()) { //記錄沒有取完
//注意:為了兼容以前代碼,這里需要將結果集滾動到最後,用來獲得記錄數目
while (rs.next()) maxRow++;
maxRow++;
}
curRow = 0;
} else {//如果沒有記錄
firstElementOfThisList = 0;
countOfElementsInthisList = 0;
curRow = -1;
maxRow = 0;
log.debug("沒有記錄返回:" + sql);
}
log.debug("open: 讀取從第0條記錄開始的" + getCacheSize() + "條記錄, 返回記錄" + countOfElementsInthisList + "條。總記錄數為" + maxRow + "條");
} else {
// 執行更新語句後將查詢結果集關閉並清除各項信息
int updatecount = stmt.getUpdateCount();
close();
updateCount = updatecount;
log.debug("成功執行更新語句");
} //保存執行的SQL語句
strSQLStmt = sql;
} catch (SQLException e) {
log.error(e.toString() + " : 執行SQL語句時出錯:" + sql);
return false;
} catch (Exception e) {
log.error(e.toString() + " : 執行SQL語句時出錯:" + sql);
return false;
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
getConnectionManager().freeConnectionInner(con);
} catch (Exception e) {
log.error(e.toString() + " : 結果集不能正確關閉");
getConnectionManager().freeConnectionInner(con);
return false;
}
}
isClosed = false;
return true;
}
/**
* 根據語句,得到從startIndex開始的count條記錄
*/
private void getResultAt(int start, int count) throws Exception {
if (isClosed) {
throw new Exception("還沒有打開結果集");
}
Statement stmt = null;
ResultSet rs = null;
Connection con = getConnectionManager().getConnectionInner();
int readStart = start;
int readCount = count;
if (con == null) {
log.error("無法獲得有效連接");
throw new Exception("getResultAt: 無法獲得有效連接");
}
try {
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(strSQLStmt);
if (resultList != null) {
resultList.clear();
resultList = null;
}
resultList = new ArrayList();
// skip initial rows as specified by the start parameter.
while (start-- > 1 && rs.next()) ;
//分別對每一個欄位,取出數值,放到BaseBusinessObject的PropertyContainer中
while (count-- > 0 && rs.next()) {
PropertyContainer property = new PropertyContainerImpl();
for (int n = 1; n <= columnCount; ++n) {
try {
property.addPropertyBy(String.valueOf(columnMap.get(n - 1)), rs.getObject(n));
} catch (Exception e) {
property.addPropertyBy(String.valueOf(columnMap.get(n - 1)), rs.getString(n));
}
}
resultList.add(property);
}
log.debug("getResultAt: 讀取從第" + readStart + "條記錄開始的" + readCount + "條記錄, 返回記錄" + resultList.size() + "條");
} catch (SQLException e) {
throw new Exception(e.toString());
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
getConnectionManager().freeConnectionInner(con);
} catch (Exception e) {
log.error(e.toString() + " : 結果集不能正確關閉");
getConnectionManager().freeConnectionInner(con);
}
}
}
/**
* 執行SQL語句,可以為查詢或更新語句。
* 執行更新語句後調用 getUpdateCount() 取得所更新的記錄數
*
* @param sql 執行的SQL語句
*/
public boolean openGBK(String sql) {
return open(Convert.toGBK(sql));
}
/**
* 返回執行查詢語句後表的列數
*/
public int getColumnCount() {
return columnCount;
}
/**
* 返回每列的類型,基數為 1
*
* @param schema 表模式名
* @param table 表名
*/
public int[] getColumnType(String schema, String table) {
Connection con = null;
ResultSet results = null;
List list = new ArrayList();
if (columnTypeInt == null) {
log.debug("getColumnType: getConnection");
con = getConnectionManager().getConnectionInner();
if (con == null) return null;
try {
DatabaseMetaData dmd;
dmd = con.getMetaData();
results = dmd.getColumns(null, null, table.toUpperCase(), null);
//
while (results.next()){
list.add(new Integer(results.getInt("DATA_TYPE")));
}
columnTypeInt = new int[list.size()];
for(int i = 0; i < list.size(); i++){
Integer type = (Integer)list.get(i);
columnTypeInt[i] = type.intValue();
}
} catch (Exception e) {
return null;
} finally {
try {
results.close();
getConnectionManager().freeConnectionInner(con);
} catch (Exception e) {
getConnectionManager().freeConnectionInner(con);
log.error(e.toString() + " : 結果集不能正確關閉");
return null;
}
}
}
return columnTypeInt;
}
/**
* 返回每列的名稱,基數為 1
*
* @param schema 表模式名
* @param table 表名
*/
public String[] getColumnName(String schema, String table) {
Connection con = null;
ResultSet results = null;
if (columnTypeString == null) {
log.debug("getColumnName: getConnection");
con = getConnectionManager().getConnectionInner();
if (con == null) return null;
try {
DatabaseMetaData dmd;
dmd = con.getMetaData();
results = dmd.getColumns(null, null, table.toUpperCase(), null);
//
int i = 1;
while (results.next()) i++;
columnTypeString = new String[i];
i = 1;
results.beforeFirst();
while (results.next()) columnTypeString[i++] = results.getString("COLUMN_NAME").trim();
} catch (Exception e) {
return null;
} finally {
try {
results.close();
getConnectionManager().freeConnectionInner(con);
} catch (Exception e) {
getConnectionManager().freeConnectionInner(con);
log.error(e.toString() + " : 結果集不能正確關閉");
return null;
}
}
}
return columnTypeString;
}
/**
* 返回執行更新語句後實際更新的記錄數
*/
public int getUpdateCount() {
return updateCount;
}
/**
* 設置查詢語句執行完後取得的最大記錄數
*
* @param maxrec 最大記錄數
*/
public void setMaxRecords(int maxrec) {
maxRecords = maxrec;
}
/**
* 返回查詢語句執行完後取得的最大記錄數
*/
public int getMaxRecords() {
return maxRecords;
}
/**
* 關閉查詢結果集並清除各項信息
*/
public void close() {
md = null;
firstElementOfThisList = 0; //當前緩沖池中保存的記錄在整個結果集中的位置
countOfElementsInthisList = 0; //緩沖池中記錄的數目
if (resultList != null) {
int size = resultList.size();