1.String sql = "delete from contract where contractId= ?";
  PreparedStatement stmt = conn.prepareStatement(sql);    
     stmt.setString(1,contractId);    
     stmt.executeUpdate();
    
     sql= "delete from customer where contractId= ?";
     stmt = conn.prepareStatement(sql);  
     stmt.setString(1,contractId);
     stmt.executeUpdate();        stmt.close();
     conn.close();2.String sql_1 = "delete from contract where contractId= ?";
  PreparedStatement stmt_1 = conn.prepareStatement(sql_1);    
     stmt_1.setString(1,contractId);    
     stmt_1.executeUpdate();
        stmt_1.close();  String sql_2= "delete from customer where contractId= ?";
  PreparedStatement stmt_2 = conn.prepareStatement(sql_2);
     stmt_2.setString(1,contractId);
     stmt_2.executeUpdate();
        stmt_2.close();     conn.close();请问是第一种写法更好吗,想知道下问什么。是因为内存分配的空间少吗?

解决方案 »

  1.   

    两个都不好,都重复代码了应封装好一个删除的方法,(方法参数 为, sql语句,条件参数)
      

  2.   

    第一种产生一个String类变量。第二种产生两个单独的变量,从而在内存中就要分配两个内存空间给它们,当然一般情况下内存是足够到不必在意这点小内存的。其余的没什么差别,只是代码写了又写,是编程的一个忌讳
      

  3.   

    俩个string的内容是一样的,所以不会存在你说的问题吧
      

  4.   

    俩个string的内容是一样的,所以不会存在你说的问题吧
    在内存空间中我们是通过变量名来操作内存空间的,每个变量名又单独
    标识自己的内存空间。你想一想如果因为内容一样就用同一个内存空间
    那岂不是说一个内存空间有两个不同的变量名同时标志了?那如果改变
    其中一个的数据,那另一个不是也随之改变了?你觉得科学吗?
    再想想,如果我们定义public int i = 2; private int j = 2;
    它们内容一样,你能说i和j就是一样的吗?
      

  5.   

    两种区别不大,但是第二种推荐,有的数据库或者JDBCAPI不一定提供statement执行多个语句功能。所以重新生成一个statement会比较好一点。
      

  6.   

    第一种绝对不允许,倒不是stmt被复用,而是第一个stmt根本没关。如果是循环里面,次数多的话,马上就出错了
      

  7.   


    没关系的,他的connection关闭了。
      

  8.   

    错。一个connection能同时保持的未关闭statement数量是有限的。上面这段代码本身是不会出这个错的。但是如果养成习惯,一旦放到我前面提及的循环里面,就会出错。
      

  9.   

    额,但是他这里只有两个,而且从statement数量越线的情况下来看,很多可能都是忘记关闭connection操作造成的。很少有一次操作会建立大量statement的,就算是有大量数据流入,很多时候也是重用statement对象,很少过多创建statement的。
    当然,随时记得关闭statement对象是个好习惯,会避免不必要的麻烦。
      

  10.   

    第一种主要是少了关statement,
    除此之外还是喜欢第一种写法。