private boolean InsertMmsBcc(List list){
String sqlbcc = "insert into mms_bcc(BCC_ID,BCC_NUMBER,MMS_ID) ";
String sqlcommit =  sqlbcc;
boolean bFlag = false;
for(int i=0;i<list.size();i++)
{
String tempStr = "select "+"bcc_id_seq.nextval,"+list.get(i)+","+m_MmsId + " from dual";
sqlcommit+=tempStr;
if(i+1 < list.size())
{
sqlcommit += " union ";
}
}
Connection conn =  DBConnectionManager.getInstance().getConnection("sjw"); 
Statement stmt=null;
try {
stmt = conn.createStatement();
stmt.executeUpdate(sqlcommit);
conn.commit();
bFlag = true;
} catch (SQLException e) {
System.out.println(e.getMessage());
}
catch(Exception e1)
{

}
if(stmt != null)
try {
stmt.close();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
DBConnectionManager.getInstance().freeConnection("sjw", conn);
return bFlag;
}
我程序就是这样调用的,数据库连接池,我是从网上拷贝的,
DBConnectionManager这个是管理数据类,代码如下回复

解决方案 »

  1.   

    http://xiaobian.javaeye.com/blog/111797 
    数据库连接池管理类  是这个页面的代码 
      

  2.   

    private boolean GetNextMmsId(){
    m_MmsId = null;
    String sqlmms_id_seq = "select mms_id_seq.nextval from dual";
    Connection conn =  DBConnectionManager.getInstance().getConnection("sjw"); 
    Statement stmt=null;
    ResultSet rs = null;
    boolean bFlag = false;
        try {
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sqlmms_id_seq);
    while(rs.next() && !bFlag)
    {
    m_MmsId = rs.getString(1);
    bFlag = true;
    }
    } catch (SQLException e) {
    System.out.println(e.getMessage());
    }
    catch(Exception e1)
    {
    System.out.println(e1.getMessage());
    }

    try {
    if(rs != null)
    rs.close();
    if(stmt != null)
    stmt.close();
    } catch (SQLException e1) {
    e1.printStackTrace();
    }
    DBConnectionManager.getInstance().freeConnection("sjw", conn);
    return bFlag;
    }是rs = stmt.executeQuery(sqlmms_id_seq);抛出错误的
      

  3.   

    http://www.cnblogs.com/wangdetian168/archive/2008/06/20/1226361.html
      

  4.   

    并发问题,呵呵指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence然后同步你的那个方法(GetNextMmsId获取流水号)
    这样就没有问题了,呵呵
    效率应该没有问题了
      

  5.   


    public class FlowNumManager {
    private static final Log log = LogFactory.getLog(FlowNumManager.class);
    private DeptConfigDAO deptConfigDao;
    private static FlowNumManager instance; private FlowNumManager() {
    } public static synchronized void init() {
    if (instance == null) {
    instance = new FlowNumManager();
    } } public static FlowNumManager getInstance() {
    if (instance == null) {
    init();
    }
    return instance;
    } /**
     * 流水号生产<br>
     * 要用同步机制?
     * 
     * 
     * @return
     */
    public synchronized int genSN()throws SNManagerException {

    }
      

  6.   

    synchronized 同步方法,
    这年头分数不好拿呀,哈哈代码在上面
      

  7.   

    以前遇到过这个问题,好像是ORA-1000,就是数据库的关闭不正确;
    你的关闭代码:
    try { 
    if(rs != null) 
    rs.close(); 
    if(stmt != null) 
    stmt.close(); 
    } catch (SQLException e1) { 
    e1.printStackTrace(); 

    DBConnectionManager.getInstance().freeConnection("sjw", conn); 中;
    为什么不直接conn.close;
      

  8.   

    我用的是数据库连接池,conn不能关闭吧
      

  9.   

    conn 要关闭
      简单点讲,这里的close并不是直接将与数据库的连接(A)关掉,而是将你从连接池中得到的封装过的连接(B)退回到池中,让连接池根据设定的参数,是否需要将真正的连接A关掉,还是继续将这个A保持着,等下次再用。