1.普通数据库连接与采用连池方式有什么区别,各自的优缺点是什么?
2.采用连接池后,每次与数据库打完交道是不是也得关闭连接,这样和普通连接又有什么区别吗?
3.与数库打完交道后,在什么情况下应该关闭连接。如:我往数据库插入一条记录,插入前我要先判断是否有此记录,如果无则插入,有就不能插入。语句应该怎么写?
 Connection conn=连接数据库的BEAN
ResultSet rs_1=null;
ls_sql="SQL语句,判断是否有此记录"
rs_1=sqlbean.executeQuery(ls_sql);
String ls_message="0";
if (rs_1!=null)
{
  try {
rs_1.next();
ls_message=rs_1.getString("count1");
      } catch (SQLException e) {
e.printStackTrace();
}

}
if (rs_1==null||ls_message.equals("0"))
{
  插入数据库语句
}这么写对不对,连接应该写在哪里,当没有查询出数据时,rs是否需要关闭。我主要是不明白RS这块,都什么情况写需要产才。
谢谢!

解决方案 »

  1.   

    连接池就是管理与数据库连接的,如果正常与数据库连接每次都要花费很多资源去创建连接回收连接等,而用连接池连接时候关闭是只是把它放回到连接池中.下次要用时再把它取出来而已.每次查询数据库等到的ResultSet都不会是null,最多是不能进行rs.next(),所以判断是否有记录应该是
    if(rs.next())
    {表示有此记录
    }
    else
    {
      插入数据.
    }当你不再需要与数据库打交道的时候关闭啊,这时候会把里的rs也关闭掉的,所以不能在连接关闭了以外的地方再用这个rs.
    我也懂不得多,这些是我的意见,记得结贴哦,你的结贴是我回贴的再大动力
      

  2.   

    问题3解决方案
    1、一个sql语句可以搞定
    2、设置唯一性;正常的直接插入,不正常的取错误信息,提示用户
    3、程序判断
      

  3.   

    当ResulSet不再使用时就该把连接关闭.可以通过给表设置唯一性约束条件,插入时通过获取SQLException来得知是否违反约束.
      

  4.   

    try {
    ls_sql="SQL语句,判断是否有此记录"
    ResultSet rs_1= sqlbean.executeQuery(ls_sql);
    String ls_message="0";
    if(rs_1.next()) {
     
    ls_message=rs_1.getString("count1");
        
    }
    else {
      插入数据库语句
    }
    }
    catch(SQLException e) {
    }
      

  5.   

    rs_1.next()
    rs_1.close()C3P0|Proxool|DBCP|DDConnectionBroker|DBPool|XAPool|Primrose|SmartPoolPrimrose是一个Java开发的数据库连接池。当前支持的容器包括Tomcat4&5,Resin3与JBoss3.它同样也有一个独立的版本可以在应用程序中使用而不必运行在容器中。Primrose通过一个web接口来控制SQL处理的追踪,配置,动态池管理。在重负荷的情况下可进行连接请求队列处理。JDBC的数据库连接池技术研究与应用   程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。  对于连接的管理可使用空闲池。即把已经创建但尚未分配出去的连接按创建时间存放到一个空闲池中。每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接。如果有就把建立时间最长(通过容器的顺序存放实现)的那个连接分配给他(实际是先做连接是否有效的判断,如果可用就分配给用户,如不可用就把这个连接从空闲池删掉,重新检测空闲池是否还有连接);如果没有则检查当前所开连接池是否达到连接池所允许的最大连接数(maxConn),如果没有达到,就新建一个连接,如果已经达到,就等待一定的时间(timeout)。如果在等待的时间内有连接被释放出来就可以把这个连接分配给等待的用户,如果等待时间超过预定时间timeout,则返回空值(null)。系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池。对于空闲连接的状态,可开辟专门的线程定时检测,这样会花费一定的系统开销,但可以保证较快的响应速度。也可采取不开辟专门线程,只是在分配前检测的方法。...