繁体   English   中英

如何在 JDBC 数据库列中插入“计数”并获取“计数”?

[英]How to insert "count" and get "count" to JDBC DB Column?

我想制作一个小的“活动申请页面”进行培训。

(活动先到先得。)

我正在使用 JSP、JAVA(DAO(数据访问对象)) 和 oracle JDBC。

当客户点击“申请”按钮时,

[1。 身份证],[2。 申请日期], [3. apply count (+1)] 将保存在我制作的 db 表中。

我还不知道如何登录 session。 所以我做了输入字段,可以在申请时直接输入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”文件......

如果我意识到如何插入并获得“应用计数”,

我可以找到如何完美地制作我的活动页面。

我将非常感谢您的帮助。

谢谢你。

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

select max(aug_cnt) as count from eventcount_aug;

然后如果 count < 100 则将新计数设置为 count + 1,否则如果 count >= 100 则拒绝新申请。

如果我正确理解您的问题,您需要以下内容:

  1. 在 oracle 中创建序列 object:

创建序列 my_test_id_seq 递增 1;

  1. 更改您的 Oracle 表并使用此序列作为默认值:
 alter table eventcount_aug modify (aug_cnt number default my_test_id_seq.nextval);

这样,您就可以在有插入时自动递增您的 aug_cnt 列。

  1. 然后,您可以使用select max(aug_cnt) as count from eventcount_aug; 在您在insertApply中调用 insert 之前,这将决定您是否需要先插入 go 。 为此,您可以创建一种实用程序方法,例如:

私人 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;

}

然后在尝试块之前在您的insertApply中使用它:

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

更新:对于 oracle <12c 版本,您可以在原始insertApply方法中更新您的插入。:

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

无需重新创建表或更改表和使用顺序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM