Java 在循环中轮询新的传入数据后,如何更新表中行的值
我已经用java实现了对这个数据库的轮询,并读取驻留在Outgoing队列中的所有传入数据。现在我在更新轮询行时遇到了问题,就像我只是更改了行中的一些值,所以 我的问题是: 1.如何循环此表中的行,使其具有ACTION=804的值,并具有最高的SEQ值 2.如何通过更改下表的KEYINFO1和KEYINFO2中的值来更新行 下面是轮询和检查新传入消息的代码Java 在循环中轮询新的传入数据后,如何更新表中行的值,java,jquery,oop,message-queue,polling,Java,Jquery,Oop,Message Queue,Polling,我已经用java实现了对这个数据库的轮询,并读取驻留在Outgoing队列中的所有传入数据。现在我在更新轮询行时遇到了问题,就像我只是更改了行中的一些值,所以 我的问题是: 1.如何循环此表中的行,使其具有ACTION=804的值,并具有最高的SEQ值 2.如何通过更改下表的KEYINFO1和KEYINFO2中的值来更新行 下面是轮询和检查新传入消息的代码 public void run() { // run method calls the fullpoll() int se
public void run() { // run method calls the fullpoll()
int seqId = 0;
while(true) {
List<KamMessage> list = null;
try {
list = fullPoll(seqId);
if (!list.isEmpty()) {
seqId = list.get(0).getSequence();
incomingQueue.addAll(list);
this.outgoingQueue = incomingQueue;
System.out.println("waiting 3 seconds");
System.out.println("new incoming message");
Thread.sleep(3000);
MessageProcessor processor = new MessageProcessor() {
@Override
public void run() {
generate(dbConnection);
}
};
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
public List<KamMessage> fullPoll(int lastSeq) throws Exception {
Statement st = dbConnection.createStatement();
ResultSet rs = st.executeQuery("select * from msg_new_to_bde where ACTION = 804 and
SEQ >" + lastSeq + "order by SEQ DESC");
List<KamMessage> pojoCol = new ArrayList<KamMessage>();
try {
while (rs.next()) {
KpiMessage filedClass = convertRecordsetToPojo(rs);
pojoCol.add(filedClass);
}
for (KpiMessage pojoClass : pojoCol) {
System.out.print(" " + pojoClass.getSequence());
System.out.print(" " + pojoClass.getTableName());
System.out.print(" " + pojoClass.getAction());
System.out.print(" " + pojoClass.getKeyInfo1());
System.out.print(" " + pojoClass.getKeyInfo2());
System.out.println(" " + pojoClass.getEntryTime());
}
} finally {
rs.close();
st.close();
// TODO: handle exception
}
如何通过将ENTITYKEY和STATUSKEY更改为ENTITYKEY1和STATUSKEY1,在表中按顺序更改行的两个值进行更新
我必须使用这样一种逻辑,即我的方法应该查找具有最高序列号和相应ACTIONKEY的行,最后用不同的值更新行中的值
附言:善意的请求:请给出一个否定的理由。这样我可以清楚地解释我的问题使用setValueAt更新表格的模型;这一观点应该遵循。如果没有,请编辑您的问题,使其包含显示问题的内容。@trashgood谢谢。我已经更新了上面的内容,正如您所说,我也尝试过使用setVAalueAT,但是如何使用这样的逻辑,此更新方法查找具有最高序列号的数据,并使用不同的值更新行…您确定这是pl/sql吗?您应该将此代码从循环中提取出来以供初学者使用。效率很低。st=conn.createStatement;System.out.PrintLn更新值;String query=插入到msg_new_to_bdetablename、action、keyinfo1、keyinfo2值?、?、?;pstmt=conn.prepareStatementquery;//创建一个语句,我不知道这个循环是如何终止的。真的不知道你在这里想做什么。@Plouf trashgod你在使用plsql,但在Java中执行。剩下的就是我说过的情况。。。
public void generate()
{
KpiMsg804 upd= createKpiMsg804();
while(true){
try {
st = conn.createStatement();
System.out.println("Updating Values");
String query = "insert into
msg_new_to_bde(tablename,action,keyinfo1,keyinfo2) values(?, ?, ?, ?)";
pstmt = conn.prepareStatement(query); // create a statement
pstmt.setString(1,upd.getTableName());
pstmt.setInt(2,upd.getAction()); // set value of action
pstmt.setString(3,upd.getKeyInfo1()); // set key-info value1
pstmt.setString(4,upd.getKeyInfo2()); // set key-info value2
int rows = pstmt.executeUpdate();
System.out.println("Number of Rows Created " +rows);
// execute insert statement
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
public KpiMsg804 createKpiMsg804()
{
KpiMsg804 msg= new KpiMsg804();
msg.setKeyInfo1("ENTITYKEY2");
msg.setKeyInfo2("STATUSKEY2");
return msg;
}