[英]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]在此处输入图像描述
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 则拒绝新申请。
如果我正确理解您的问题,您需要以下内容:
创建序列 my_test_id_seq 递增 1;
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
中调用 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.