java sql 增加数据失败

代码如下:
package bookup;

import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

import javax.swing.*;

public class book extends JFrame implements ActionListener {

JLabel jlbl1,jlbl2,jlbl3,jlbl4,jlbl5,jlbl6;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
JButton jbtn1,jbtn2,jbtn3,jbtn4,jbtn5,jbtn6;


Connection con=null;
Statement stmt=null;
PreparedStatement pstmt=null;
ResultSet rs=null;


public  book(String title) {
    
    super(title);
    jlbl1 =new JLabel("编号:");
    jlbl2 =new JLabel("书名:");
    jlbl3 =new JLabel("作者:");
    jlbl4 =new JLabel("分类:");
    jlbl5 =new JLabel("出版社:");
    jlbl6 = new JLabel("出版时间:");
    
    
    
    jtf1=new  JTextField();
    jtf1.setEditable(false);
    jtf2=new  JTextField();
    jtf3=new  JTextField();
    jtf4=new  JTextField();
    jtf5=new  JTextField();
    jtf6=new  JTextField();
    
    
    jbtn1=new JButton("查询");
    
    jbtn2=new JButton("下一条");
    jbtn3=new JButton("增加");
    jbtn4=new JButton("删除");
    jbtn5=new JButton("修改");
    jbtn6=new JButton("清空");
    
    jbtn1.addActionListener(this);
    jbtn2.addActionListener(this);
    jbtn3.addActionListener(this);
    jbtn4.addActionListener(this);
    jbtn5.addActionListener(this);
    jbtn6.addActionListener(this);
    
    
Container cp=this.getContentPane();
cp.setLayout(new GridLayout(9,2,20,20));
cp.add(jlbl1);
cp.add(jtf1);
cp.add(jlbl2);
cp.add(jtf2);
cp.add(jlbl3);
cp.add(jtf3);
cp.add(jlbl4);
cp.add(jtf4);
cp.add(jlbl5);
cp.add(jtf5);
cp.add(jlbl6);
cp.add(jtf6);
cp.add(jbtn1);
cp.add(jbtn2);
cp.add(jbtn3);
cp.add(jbtn4);
cp.add(jbtn5);
cp.add(jbtn6);


setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800,400);
setResizable(false);
this.setLocation(500,200);
setVisible(true);
}

public void createCon() 
{
    try 
    {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        
String constr="jdbc:sqlserver://localhost:1433;DatabaseName=book";
con =DriverManager.getConnection(constr,"sa","123456");

        
    }catch(Exception e)
    {
        System.out.print("驱动或连接失败:"+e.getMessage());
        
        
    }
}
    
    public void getData()
    {
        
        try {
            stmt=con.createStatement();
            String sql="select * from Table_Book";
            rs=stmt.executeQuery(sql);
            if (rs.next())
                
        {
                jtf1.setText(rs.getString(1));
                jtf2.setText(rs.getString(2));
                jtf3.setText(rs.getString(3));
                jtf4.setText(rs.getString(4));
                jtf5.setText(rs.getString(5));
                jtf6.setText(rs.getString(6));
                    }
            
        
        }catch (SQLException e) {
            System.out.println("数据读取失败");
            
            
        }
        
    
    }
            
        public void releaseZy()
        {
            try {
                rs.close();
                stmt.close();
                con.close();
            }catch(SQLException e){
                System.out.println("释放资源失败");
            }
            
            }
        //下一条
        public void nextData()
        {
            try {
                if (rs.next())
                {
                    jtf1.setText(rs.getString(1));
                    jtf2.setText(rs.getString(2));
                    jtf3.setText(rs.getString(3));
                    jtf4.setText(rs.getString(4));
                    jtf5.setText(rs.getString(5));
                    jtf6.setText(rs.getString(6));
        }
        
            }catch (SQLException e){
            System.out.println("读取下一条数据失败");
        }
            }
            
        
        //增加
        public void InsertData() 
        {
        
            try {        
            String sql="insert into Table_Book  (书名,作者,类别,出版社,出版时间) values  (?,?,?,?,?)";
        
            pstmt=con.prepareStatement(sql);
            
            pstmt.setString(1, jtf2.getText());
            pstmt.setString(2, jtf3.getText());
            pstmt.setString(3, jtf4.getText());
            pstmt.setString(4, jtf5.getText());
            pstmt.setString(5, jtf6.getText());
            
            int i=pstmt.executeUpdate();
            if (i>0)
            {
                JOptionPane.showMessageDialog(this, "成功增加一条记录");
                }
        } catch  (SQLException e){
            JOptionPane.showMessageDialog(this ,  "增加数据失败");
        } 
        }    
        
        
        //删除
        public void DelateData()
        
        {
          try {
              String sql="delete Table_Book where 编号=?";
              pstmt=con.prepareStatement(sql);
              pstmt.setString(1,jtf1.getText());
              int i=pstmt.executeUpdate();
              if (i>0)
              {
                  
                  JOptionPane.showMessageDialog(this, "成功删除一条记录");
                  
              }
          
          }catch (SQLException e) {
              JOptionPane.showMessageDialog(this,"删除数据失败");
              
              
              
              
          }
        }

    



@Override
public void actionPerformed (ActionEvent e) {
    if (e.getSource()==jbtn1)
    {
        createCon();
        getData();
        
        
    }
    else if (e.getSource()==jbtn2) 
    {
    nextData();
}
    else if (e.getSource()==jbtn3)
    {
        createCon();
        InsertData();
        
    
    }
    else if (e.getSource()==jbtn4) {
    createCon();
    DelateData();
    getData();
}

}

}

可否把控制台报错信息贴出来

releaseZy方法里先对rsstmtcon对象进行null值判断,不为null时再调用close方法。