我想将
getGneratedKeys()
,也称为last_generated_id
,从当前的Java类传递到下一个类。然而,我对如何存储和收集下一个Java类的ID以供此类使用一无所知。
场景是
insert.jsp
将将所有字符串和int插入我的MySQL数据库。第二页UserImage.jsp
会将图像上传到与insert.jsp
相同的表和相同的记录中。 这意味着
UserImage
查询将是update 查询,而不是 insert 查询。
Save.java
(
insert.jsp
的关联类):
public String execute()
{
int i = 0; //SELECT LAST_INSERT_ID();
try{
Class.forName("com.mysql.jdbc.Driver");
java.sql.Connection con =DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql?zeroDateTimeBehavior=convertToNull","root","8899");
String s = "insert into usertable(userNRIC, userName, userEmail, userPW, userContact, userAddress, catID, catTypeID, sectionID, status"
+ ") values (?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) ";
PreparedStatement ps=con.prepareStatement(s, Statement.RETURN_GENERATED_KEYS);
ps.setString(1, mb.getUserNRIC());
ps.setString(2, mb.getUserName());
ps.setString(3, mb.getUserEmail());
ps.setString(4, mb.getUserPW());
ps.setInt(5, mb.getUserContact());
ps.setString(6, mb.getUserAddress());
ps.setInt(7, mb.getCatID());
ps.setInt(8, mb.getCatTypeID());
ps.setInt(9, mb.getSectionID());
ps.setString(10, mb.getStatus());
ps.executeUpdate();
con.commit();
ResultSet rs = ps.getGeneratedKeys();
if (rs != null && rs.next()) {
i = rs.getInt(1);
//ps.setInt(i, mb.getUserID("UserID"));
}
ps.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
addActionError(e.getMessage());
}
return SUCCESS;
}
FileUploadAction.java
(
UserImage.jsp
的关联类):
public String execute(){
int i = 0;
connection = getConnection();
String query = "update usertable set userPhoto=? where userID=?";
try {
String filePath = servletRequest.getSession().getServletContext().getRealPath("/");
System.out.println("Server path:" + filePath);
File fileToCreate = new File(filePath, this.userImageFileName);
FileUtils.copyFile(this.userImage, fileToCreate);
//String uniqueFileName = fileToCreate.getPath();
pst = connection.prepareStatement(query);
pst.setString(1, this.userImageFileName);
i = pst.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
addActionError(e.getMessage());
return INPUT;
}
return SUCCESS;
}
Record record = Fire the select query based on userID ordered by last insertion
If record is found then
get the generated value from first record
update the record
Else
insert new record
用户旅程:
Student.jsp
->
UserImage.jsp
只需将自动生成的随机密钥存储为请求属性,并将其传递给客户端到UserImage.jsp
,并在单击上传按钮时发送回服务器。了解更多关于
get last inserted id
同时更新时间。
Statement stmt = con.createStatement();
String query = "SELECT max(userID) FROM usertable";
int my_last_generated_id = stmt.executeQuery(query).uniqueResult();
还有你的更新帖子
pst = connection.prepareStatement(query);
pst.setString(1, this.userImageFileName);
pst.setInt(2, my_last_generated_id );
i = pst.executeUpdate();
getGeneratedKeys
中的值。让它成为您通过第一个操作初始化的
last_generated_id
。该操作返回
UserImage.jsp
,您可以在其中使用绑定到包含值的操作属性的hidden 字段。 当您将表单提交到第二个操作时,该值将填充到第二个操作属性中。因此,当您需要在执行第二个操作时使用它时,您可以轻松完成。
因为您对操作使用不同的类,所以您应该在两个类中创建此属性。请注意 OGNL 通过提供适当的操作配置来正确绑定和填充隐藏字段。