这个简单,查询时把主键一起查出来,在JTable中把这一列隐藏就行了,然后在表的鼠标事件中得到主键,放在数据结构里,一个事务里批处理一下就OK了.
解决方案 »
- javaee.jar 必须放在common\lib下吗?
- log4j中哪个类是用来创建日志文件的
- 在JTree上用Shift和鼠标右键不能多选,是不是还要加Checkbox?
- 兼容性问题
- spring工具包去哪下载?
- Webwork+Spring+hibernate 框架,在公司的机器上做好的程序,回来后就不好用了!为什么啊!急!
- 请教大家一个关于hibernate问题?
- dhcp记录sql操作日志的问题
- html 表单提交到selvlet里后中文却显示????这样的乱码
- 【求救】CXF2.4.2+Spring+hibernate整合,启动Tomcat时报错WARNING: Invocation of destroy method
- @@@@@@@@@@xml解析问题!!!快来拿分啊!!!
- javamail发邮件smtp认证最后问题
感觉 pengji(彭乃超) 说得对,有道理,一个递归循环(我不懂,瞎掰的哦)顶一下!
Sting strSql = "DELETE FROM yourTableName WHERE yourPrimaryKeyColumName IN(";
int nIndex = 0;
while(nIndex < naToDelPKs.length){
strSql += naToDelPKs[nIndex] + ",";
nIndex++;
}
strSql +="-1)";
然后用strSql 作为删除的sql的可以了。其中:
naToDelPKs 假设是你已得到的要删除的主键的整型数组,并且假设你的主键是数值型可以用getInt()正确得到的类型,最后的-1是一个不可能(!)出现的主键值,这样处理是方便以while统一处理,尤其是要删除的数量多时,我想这样比一条一条删除好些。
供参考!
“Sting”at first line should be "String"
能否说详细点呢?我也想过这样,问题是“表的鼠标事件”是哪个??
mouseclick()???那个不行。如果有类似cellsclick()的就好了。
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.util.Vector;
import com.abl.c7mon.util.AblTableModel;
import com.abl.c7mon.util.AblUtil;public class TkgpCallRecordFrame extends JFrame
{
JScrollPane tableScrollPane = new JScrollPane();
JTable callRecordTable = new JTable();
AblTableModel model = new AblTableModel();
RelayWindow relayWin = new RelayWindow();
TkgpRelayThread relay ;//= new TkgpRelayThread();
int callId = 0;
String start;
String end;
//TableColumn col ;//= new TableColumn(9);
String call [] = {"主叫号码","被叫号码","DPC","OPC","CIC","SLS","链路名","呼叫时间","通话时长","callId"}; public TkgpCallRecordFrame()
{
try
{
jbInit();
if(!AblUtil.frameVector.contains(this))
{
AblUtil.frameVector.addElement(this);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
private void jbInit() throws Exception
{
this.setTitle("详细呼叫纪录");
this.setIconImage(AblUtil.getAblImage("AMBERLINE"));
//this.setIconImage(AblUtil.getImage("AMBERLINE"));
callRecordTable.setDoubleBuffered(true);
this.getContentPane().add(tableScrollPane, BorderLayout.CENTER);
model.setColumnNames(call);
//model.addColumn(new String("callId"));
callRecordTable.setModel(model);
TableColumnModel tcm = callRecordTable.getColumnModel();
TableColumn col = callRecordTable.getColumn("callId");
tcm.removeColumn(col);//隐藏callId列
tableScrollPane.getViewport().add(callRecordTable, null);
try{
callRecordTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
public void valueChanged(ListSelectionEvent e)
{ select_Row(e);//注意这个方法
//System.out.println(tableModel.getValueAt( table.getSelectedRow(),1)+":be adjusting"); }
});
callRecordTable.addMouseListener(new java.awt.event.MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
table_mouseClicked(e);//注意这个方法
}
public void mouseReleased(MouseEvent e)
{
//table_mouseReleased(e);
}
});
}catch(Exception exp){exp.printStackTrace();return;} }
public void addRelayText(String str)
{
relayWin.clearText();
relayWin.setRecordText(str);
}
public void addRow(Vector rowVector)
{
model.addRow(rowVector);
} public void setTime(String start,String end)
{
this.start = start;
this.end = end;
} /**Overridden so we can exit when window is closed*/
protected void processWindowEvent(WindowEvent e) {
if (e.getID() == WindowEvent.WINDOW_CLOSING) {
cancel();
}
super.processWindowEvent(e);
}
void cancel()
{
System.gc();
//System.out.println("退出");
AblUtil.frameVector.remove(this);
if(this.relayWin != null)
relayWin.dispose();
if(relay != null)
relay.closeConn();
this.dispose();
} void select_Row(ListSelectionEvent e)
{
// relayWin.setLocation(1,1);
//relayWin.setSize(100,100);
//relayWin.show();
System.out.println(model.getValueAt(callRecordTable.getSelectedRow(),9));
callId = Integer.parseInt(((String)model.getValueAt(callRecordTable.getSelectedRow(),9)).trim()); }
void table_mouseClicked(MouseEvent e)
{
if(e.getClickCount() == 2)
{
relayWin.clearText();
relayWin.setRecordText("※…… 正在连接后台,请稍候!……");
if((relay == null)||(!relay.isAlive()))
{
relay = new TkgpRelayThread();
relay.setResultFrame(this);
relay.start();
}
relay.setData(start,end,callId,0,100);
relay.setSend(true);
//relay.setRecive(true);
//relay.start();
int xx = 0;
int yy = 0;
//relayWin.setSize(100,100);
//int wid = this.tableScrollPane.getViewport().getWidth();
int hei = this.getToolkit().getScreenSize().height;
//e.translatePoint(this.tableScrollPane.getViewport().getX(),this.tableScrollPane.getViewport().getY());
/*e.translatePoint(e.getComponent().getX(),e.getComponent().getY());
//e.translatePoint(this.getLocation().x,this.getLocation().y);
if(e.getX() < relayWin.getWidth()/2)
xx = relayWin.getWidth()/2;
else if(e.getX() > (wid - relayWin.getWidth()/2))
xx = wid - relayWin.getWidth();
else
xx = e.getX()-relayWin.getWidth()/2;
if(relayWin.getHeight() > (hei - e.getY() - this.getLocation().y))
yy = hei - relayWin.getHeight() - this.getLocation().y;
else
yy = e.getY()+relayWin.getHeight()/2;*/ /*System.out.print(e.getX());
System.out.print(" : ");
System.out.println(e.getY());
System.out.println("XX:YY");
System.out.print(xx);
System.out.print(" : ");
System.out.println(yy);
System.out.println("WW:HH");
System.out.print(wid);
System.out.print(" : ");
System.out.println(hei);*/
//e.translatePoint(this.getLocation().x,this.getLocation().y);
//relayWin.setLocation(xx+this.getLocation().x,this.getLocation().y);//yy+this.getLocation().y);
if(relayWin.getHeight() > (hei - e.getY()))
yy = hei - relayWin.getHeight() - this.getLocation().y;
else
yy = e.getY();
relayWin.setLocation(this.getWidth()/2 - relayWin.getWidth()/2,yy);
// relayWin.setLocation(e.getX()+this.getLocation().x,e.getY()+this.getLocation().y);
relayWin.show();
//System.out.println(this.tableScrollPane.getViewport().getHeight());
}
else
relayWin.hide();
}
}
谢谢!其实有个很简单的方法,原来直接在任何一个事件内写getvalueat就ok的,呵呵,能否再解答个疑惑,删除记录后如何更新jtable?
至于JTable的更新,这是我年前写的程序,有些忘了具体的方法了,好像model中有removeRow之类的方法,可以按getSelectedRow()的航号来删除,如果没有更新,就updateUI一下。老弟,很多事要多试多看资料。
mode.removeRow(6);
mode.addRow(vector);
mode.insertRow(6,vector);
table.setModel(model);//本句可先不加上试一下,如果不能刷新,再加上
table.updateUI();