import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@SuppressWarnings("serial")
public class DeleteFrame<mainWindow> extends JFrame implements ActionListener{
JButton yesB,cancelB;
JLabel label1,label2;
JTextField text1;
String sid;
public DeleteFrame(){
Container c=this.getContentPane();
c.setLayout(new GridLayout(3,1));
    c.setFont(new Font("true",Font.TRUETYPE_FONT,13));
    JPanel p1=new JPanel();
    JPanel p2=new JPanel();


   JLabel label1=new JLabel("删除学生信息",SwingConstants.CENTER);
   label1.setFont(new Font("TRUE",Font.TRUETYPE_FONT,20));
   label1.setForeground(Color.blue);
   c.add(label1);

   JLabel label2=new JLabel("请输入学号");
   text1=new JTextField(10);
   p1.add(label2);
   p1.add(text1);
   c.add(p1);
   yesB=new JButton("确定");
   cancelB=new JButton("退出");
   p2.add(yesB);
   p2.add(cancelB);
   c.add(p2);
  yesB.addActionListener(this);
  cancelB.addActionListener(this);
  this.setSize(400,300);
  this.setTitle("删除学生信息");
  this.setVisible(true);
  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

public void actionPerformed(ActionEvent e){
if (e.getSource()==yesB){
del();
}
if (e.getSource()==cancelB){
shutDown();
}
}
private void del(){
try{
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
            Connection con = DriverManager.getConnection 
              ("jdbc:microsoft:sqlserver://127.0.0.1:1433","kelly","123");
            String sql="DELETE FROM mytable WHERE sid=' "+sid+"'";
            PreparedStatement ps=con.prepareStatement(sql);
            ps.executeUpdate(sql);
            con.close();
            JOptionPane.showMessageDialog(this,"删除成功!");
            
}
catch(SQLException e){
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
private void shutDown(){
DeleteFrame f=new DeleteFrame();
        f.dispose();
}
@SuppressWarnings("unchecked")
public  static void main(String[]args){
new DeleteFrame();
}
}
private void shutDown()此方法是想实现关闭当前窗口的功能,不知道代码该怎么写,还有private void del()方法是想删除数据库中的某些记录,不知道错在哪里,请指教,非常感谢......

解决方案 »

  1.   

    是以下错误
    [Microsoft][SQLServer 2000 Driver for JDBC]Invalid call Statement method: {0}
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    at com.microsoft.jdbc.base.BasePreparedStatement.executeUpdate(Unknown Source)
    at DeleteFrame.del(DeleteFrame.java:60)
    at DeleteFrame.actionPerformed(DeleteFrame.java:47)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6216)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5981)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4583)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4413)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4556)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4220)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4150)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2475)
    at java.awt.Component.dispatchEvent(Component.java:4413)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
      

  2.   

    关闭窗口就不要new一个了
    直接调用 dispose方法ps.executeUpdate(sql);去掉sql参数
      

  3.   

    at DeleteFrame.del(DeleteFrame.java:60) 
    是那句?
    [Microsoft][SQLServer 2000 Driver for JDBC]Invalid call Statement method: {0} 
    好像sql语句有问题
    String sql="DELETE FROM mytable WHERE sid=' "+sid+"'";
    改为:String sql="DELETE FROM mytable WHERE sid='"+sid+"'";
    sid是字符串吗???
      

  4.   

     ps.executeUpdate(sql);
    这个肯定不要参数的
      

  5.   

    private void del(){
    try{
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
                Connection con = DriverManager.getConnection 
                  ("jdbc:microsoft:sqlserver://127.0.0.1:1433","kelly","123");
                String sql="DELETE FROM mytable1 WHERE sid='"+sid+"'";
                PreparedStatement ps=con.prepareStatement(sql);
                ps.executeUpdate();
                con.close();
                JOptionPane.showMessageDialog(this,"删除成功!");
                
    }
    catch(SQLException e){
    e.printStackTrace();
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }用这些语句删除数据库table1表中的某条数据为什么删不了呢,高手指教,非常感谢……
      

  6.   

    1.PreparedStatement 对像的sql应该是用?做为占位符吧
    占位符应该用ps.setString(占位符index,值);来赋值的
     ps.executeUpdate();中是没有sql的
    private void del(){
            try{
                Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
                Connection con = DriverManager.getConnection 
                  ("jdbc:microsoft:sqlserver://127.0.0.1:1433","kelly","123");
                String sql="DELETE FROM mytable WHERE sid=?";
                PreparedStatement ps=con.prepareStatement(sql);
                ps.setString(1,sid);
                int count = ps.executeUpdate();
                con.close();
                if(count > 0){
                    JOptionPane.showMessageDialog(this,"删除成功!");
                 }else{
                     JOptionPane.showMessageDialog(this,"删除失败!");             }
                
            }
            catch(SQLException e){
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
      

  7.   

    关于关闭窗口的问题是你怎么能再new一次呢,你一new 不就生成个新的窗口了,你所做的不过是new 一个新的窗口,关一个窗口最终还是有一个窗口
    你应该是拿到当前JFrame的实例再调用他的dispose() 方法才对啊代码如下
     @SuppressWarnings("unchecked")
        private void shutDown(){
    //        DeleteFrame f=new DeleteFrame();
            this.dispose();
        }
      

  8.   

    关闭窗口dispose();关闭数据库close()
    ps:关闭数据库要注意,关闭时有先后顺序的,先关闭statement然后关闭connection