我想制作一個小的“活動申請頁面”進行培訓。
(活動先到先得。)
我正在使用 JSP、JAVA(DAO(Data Access Object)) 和 oracle JDBC。
當客戶點擊“申請”按鈕時,
[1。身份證],[2。申請日期], [3. apply count ( 1)] 將保存在我制作的 db 表中。
我還不知道如何進行登錄會話。所以我做了輸入欄位,可以在申請時直接輸入id。
我可以從 db 表中插入和獲取關于 id 和應用日期的資訊。
但我很麻煩,因為“申請”計數。
當“申請次數”為100時,我將限制不再申請。(先到先得)
如何將應用計數插入資料庫以及如何從資料庫中獲取計數?
這是我的代碼和情況。
1.資料庫表
我制作的列是 3 [1. 編號] / [2。aug_cnt] / [3。applydate] 在此處輸入影像描述
2.應用bean.java
package model;
import java.sql.Timestamp;
public class ApplyBean {
private String id ;
private int aug_cnt;
private Timestamp applydate;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getAug_cnt() {
return aug_cnt;
}
public void setAug_cnt(int aug_cnt) {
this.aug_cnt = aug_cnt;
}
public Timestamp getApplydate() {
return applydate;
}
public void setApplydate(Timestamp applydate) {
this.applydate = applydate;
}
}
3.應用DAO.java
public class ApplyDAO {
Connection con;
PreparedStatement pstmt;
ResultSet rs;
public void getCon() {
try {
Context initctx = new InitialContext();
Context envctx = (Context)initctx.lookup("java:comp/env");
DataSource ds = (DataSource)envctx.lookup("jdbc/pool");
con = ds.getConnection();
}catch(Exception e) {
e.printStackTrace();
}
}
public void insertApply(ApplyBean abean) {
try{
getCon();
String sql = "insert into eventcount_aug values(?,sysdate)";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, abean.getId());
pstmt.setTimestamp(2, abean.getApplydate());
pstmt.executeUpdate();
con.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
我想我只需要編輯“Applybean.java”檔案......
如果我意識到如何插入并獲得“應用計數”,
我可以找到如何完美地制作我的活動頁面。
我將非常感謝您的幫助。
謝謝你。
uj5u.com熱心網友回復:
如果我正確理解您的問題,您需要以下內容:
- 在 oracle 中創建序列物件:
創建序列 my_test_id_seq 遞增 1;
- 更改您的 Oracle 表并使用此序列作為默認值:
alter table eventcount_aug modify (aug_cnt number default my_test_id_seq.nextval);
這樣,您就可以在有插入時自動遞增您的 aug_cnt 列。
- 然后,您可以
select max(aug_cnt) as count from eventcount_aug;在插入呼叫之前使用,insertApply其中將決定您是否需要繼續插入。為此,您可以創建一種實用程式方法,例如:
私人 int getCount(){
try{
getCon();
int length=0;
String sql = "select max(?) as count from eventcount_aug";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1,"aug_cnt");
ResultSet rs = preparedStatement.executeQuery();
if (rs.next()) {
length = rs.getInt(1);
}
con.close();
}catch(Exception e){
}
return length;
}
然后在你的insertApplybefore try 塊中使用它:
public void insertApply(ApplyBean abean) {
if(getCount()<100){ // if count is less than 100, then only insert.
try{
..
}
insertApply更新:對于 oracle <12c 版本,您可以在原始方法中更新您的插入。:
String sql = "insert into eventcount_aug values(?,sysdate,my_test_id_seq.nextval)";
無需重新創建表或更改表和使用順序。
uj5u.com熱心網友回復:
看來您并不關心應用程式的撤銷或并發問題。在插入新應用程式之前,您可以使用另一個 SQL 來獲取當前計數。
select max(aug_cnt) as count from eventcount_aug;
然后如果 count < 100 則將新計數設定為 count 1,否則如果 count >= 100 則拒絕新申請。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/504192.html
