最近学java的jdbc  需要将连接保持再传递到另一个Frame中更新数据库  但试了几次都没成功。希望各位大哥大姐帮帮忙!附 :代码
public Framephone() {
    ……
    public void foundelem(String name)
    {
        String str;
        try
        {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            String url = "jdbc:odbc:addr";
            con = DriverManager.getConnection(url);
            Statement st = con.createStatement();
            str = "select * from addrbook where name="+"'"+name+"'";
            ResultSet rs = st.executeQuery(str);
            if(rs.next())
            {
                String addr = rs.getString("addr");
                String phone = rs.getString("phone");
                String mobile = rs.getString("mobile");
                FrameE mesinf = new FrameE(name,addr,phone,mobile,this);//用this传递
                mesinf.setVisible(true);
            }
            else
                javax.swing.JOptionPane.showInternalMessageDialog(jLabel1.getParent(),
                       "不存在此联系人!");            rs.close();
            st.close();
            con.close();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}public class FrameE extends JFrame {
    ……
    public FrameE(String n,String a,String p,String m,Framephone st) {
        try {
            jbInit();
            jLabeln.setText(n);
            jTexta.setText(a);
            jTextp.setText(p);
            jTextm.setText(m);
            this.fp = st;  //保存传递过来的对象
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
    public void edit(MouseEvent e)
    {
        String name = jLabeln.getText();
        String addr = jTexta.getText();
        String phone = jTextp.getText();
        String mobile = jTextm.getText();
        int num = 0;
        try
        {
            String str = "update addrbook set addr = '"+addr+"',phone ='"+phone+"',mobile='"+mobile+"' where name='"+name+"'";
            num = fp.st.executeUpdate(str);//使用Statement对象 但老是抛出异常
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }
        if(num>0)
        {
            javax.swing.JOptionPane.showInternalMessageDialog(this.getParent(),"更新成功!");
        }
        else
            javax.swing.JOptionPane.showInternalMessageDialog(this.getParent(),"更新失败!");
    }
    ……
}

解决方案 »

  1.   

    你传递Statement对象的方法不提倡,通常是传递Connection对象或者是定义全局静态变量,最好定义静态Connection对象,在任何地方都可以调用。使用Statement对象的时候,直接使用conn.createStatement().executeUpdate(str);的方法执行就可以,不需要单独创建Statement对象
      

  2.   

    能把异常信息发出来吗?
    传递Connection,应该问题不大的!
      

  3.   

    问:
    num = fp.st.executeUpdate(str);//使用Statement对象 但老是抛出异常 答:当然会出异常了。因为:fp.st这个引用值是null。
      

  4.   

    不好意思阿在网吧可能写得不是蛮好` `
      因为是用记事本写很不习惯`  
       希望能帮上忙,估计可能会有一两个单词错误见谅`````public class SqlHelper
    {
      private Connection conn;
      private Statement sta;
      private ResultSet rs;
      
      public static Connection getCon()//获得连接的方法
      {
        try{
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
          conn = DriverManager.getConnection("jdbc:odbc:addr"); 
          sta = conn.createStatement();
        } catch (Exception ex) { 
           ex.printStackTrace(); 
           return null;
         } 
         return conn;//返回连接对象
      }   public static Boolean executeSql(String sqlstring)//增删改方法你只需要传SQL语句进来即可
      {
         this.getCon();//得到连接
         try{
           sta.executeUpdate(sqlstring);
         } catch (Exception ex){
           ex.printStackTrace(); 
           return false;//不成功返回假
         }
         return true;//执行成功返回真
      }  public static ResultSet executeQuery(String sqlstring)//查询方法你只需要传SQL语句进来即可
      {
         //打开连接
         this.getCon();
         try{
           rs=sta.executeNonQuery(sqlstring);//执行查询
         } catch (Exception ex){
           ex.printStackTrace(); 
           return null;
         }
         return rs;//返回语句集对象
      }
      
      public static void close()//封装好的关闭连接方法
      {
         try{
           sta.close();
           conn.close();
         } catch (Exception ex){
          ex.printStackTrace(); 
         }
      }
    }