这个简单,查询时把主键一起查出来,在JTable中把这一列隐藏就行了,然后在表的鼠标事件中得到主键,放在数据结构里,一个事务里批处理一下就OK了.

解决方案 »

  1.   

    不懂:`/    可我在听
    感觉  pengji(彭乃超) 说得对,有道理,一个递归循环(我不懂,瞎掰的哦)顶一下!
      

  2.   

    我想没有必要一条一条删除,可以在写删除sql的时候用一个in在where的条件里,象这样:
    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统一处理,尤其是要删除的数量多时,我想这样比一条一条删除好些。
    供参考!
      

  3.   

    so sorry!
    “Sting”at first line should be "String"
      

  4.   

    可以加个sessionbean把得到的pk集传给它,然后在sessionbean中做批量删除
      

  5.   

    to wyalchemy(透明):  你这个strsql写在哪呢?  ejbbeans 能用动态的SQL语句吗???
      

  6.   

    to pentax();
     能否说详细点呢?我也想过这样,问题是“表的鼠标事件”是哪个??
    mouseclick()???那个不行。如果有类似cellsclick()的就好了。
      

  7.   

    现在在家找工作,上网不方便,给你简单拷一下吧,注意鼠标事件,select_Row()方法,callId相当于主键,在表中的列序号是九,你可以把它看成主键,每次把它往Vector里放一下(如果Vector里没有的话),这样你就可以应鼠标把所有要删除的主键放在向量里了,到时取出来删就行了。package com.abl.c7mon.userManager;import java.awt.*;
    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();
      }
    }
      

  8.   

    to pentax():
      谢谢!其实有个很简单的方法,原来直接在任何一个事件内写getvalueat就ok的,呵呵,能否再解答个疑惑,删除记录后如何更新jtable?
      

  9.   

    可先把自动提交设为false(用事务),每删除一条,往批处理里加一条sql删除语句,最后提交,再设回true。我没有具体的代码,事务的代码倒是有,只是现在我的机器不是我工作的机器,并且上网要自己掏腰包的,找起来太麻烦,并且代码也夹杂着其他实现的东西,删减起来太麻烦(就象上边的代码),书上有这些JDBC介绍。
    至于JTable的更新,这是我年前写的程序,有些忘了具体的方法了,好像model中有removeRow之类的方法,可以按getSelectedRow()的航号来删除,如果没有更新,就updateUI一下。老弟,很多事要多试多看资料。
      

  10.   

    谢谢楼上兄台,但是更新问题依然没解决,查了下,model是没有removeRow之类的方法的,删除我已经搞点了,但是删除后,jtable没刷新,updateui也不行,我想,要update的是model。thx anyway.
      

  11.   

    DefaultTableModel mode = new DefaultTableModel();
        mode.removeRow(6);
        mode.addRow(vector);
        mode.insertRow(6,vector);
    table.setModel(model);//本句可先不加上试一下,如果不能刷新,再加上
    table.updateUI();
      

  12.   

    怎么我的model没你说的方法?呵呵,倒~
      

  13.   

    你的model可能是AbstractModel,不是DefaultModel。