JSP 如何将“count”插入到JDBC DB列中并获取“count”?

1cosmwyk  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(131)

我想做一个小的“事件申请页”的培训。

  • (名额有限,先到先得。)*

我使用JSP、JAVA(DAO(数据访问对象))和oracle JDBC。
当客户点击“申请”按钮、
[1. id],[2.应用日期],[3.应用计数(+1)]将保存在我创建数据库表中。
我还不知道如何创建登录会话。所以我创建了一个输入字段,在申请时可以直接输入id。
我可以插入并从数据库表中获取关于ID和申请日期的信息。
但我的麻烦是因为 “应用”计数。
我将设置限制,当“应用计数”为100时不再应用。(先到先得)
如何将应用计数插入到数据库中,以及如何从数据库中获取计数值?
下面是我代码和情况。

1.数据库表格

我创建的列为3 [1.标识] / [2.八月计数] / [3.应用日期] enter image description here

Applybean.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. ApplyDAO.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“文件...
如果我意识到如何插入并获取“apply count”,
我可以找到如何使我的活动页面完美。
我会非常感激你的帮助。

  • 谢谢-谢谢
bvn4nwqk

bvn4nwqk1#

如果我理解你的问题是正确的,你需要以下东西:
1.在Oracle中创建序列对象:
创建递增1序列my_test_id_seq;
1.更改Oracle表并将此序列用作默认值:

alter table eventcount_aug modify (aug_cnt number default my_test_id_seq.nextval);

这样,您就可以在插入时自动递增aug_cnt列。
1.然后你可以在insertApply中的insert调用之前使用select max(aug_cnt) as count from eventcount_aug;,它将决定你是否需要继续插入。为此,你可以创建一个实用程序方法,如下所示:
私有整数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;

}
然后在try块之前在你的insertApply中使用这个:

public void insertApply(ApplyBean abean) {
  if(getCount()<100){ // if count is less than 100, then only insert.
   try{
   ..
  }

更新:对于Oracle〈12 c版本,可以更新原始insertApply方法中的insert。

String sql = "insert into eventcount_aug values(?,sysdate,my_test_id_seq.nextval)";

无需重新创建表或更改表&使用序列。

von4xj4u

von4xj4u2#

看起来你并不关心应用程序的撤销或者并发问题,你可以在插入新的应用程序之前使用另一个SQL来获取当前的计数。

select max(aug_cnt) as count from eventcount_aug;

然后,如果计数〈100,则将新计数设置为计数+1,否则,如果计数〉= 100,则拒绝新应用。

相关问题