用的数据库是Informax 9.3 FC。try {
    this.connection.setAutoCommit(false);
    //操作数据库
    this.connection.commit();
} catch(Exception e) {
    this.connection.rollback();
}使用如上代码会把整张表给锁住了,求高人指点怎么给数据库加行锁。。
PS:数据库本身的begin work; roll work; commit work;貌似不会锁整张表。

解决方案 »

  1.   

    貌似不同数据库不一样吧。。我知道Oracle用select...for update
      

  2.   

    SELECT * FROM table ROWLOCK WHERE id = 1
      

  3.   

    程序用SQL语句是操作数据库的表。不是行
      

  4.   

    哎来人接分吧有人知道PreparedStatement的addBatch()方法实现原码在哪里吗……
      

  5.   

    http://www.j6a.ru/_jdbc_odbc_prepared_statement_8java_source.html01498         //--------------------------------------------------------------------
    01499         // addBatch()
    01500         // adds a set Of Parameters for executeBatch Updates.
    01501         //--------------------------------------------------------------------
    01502 
    01503         public void addBatch() throws SQLException
    01504         {
    01505                 if (OdbcApi.getTracer().isTracing ()){
    01506                         OdbcApi.getTracer().trace ("*PreparedStatement.addBatch");
    01507                 }
    01508 
    01509             try
    01510             {
    01511                 int storedSize;
    01512 
    01513                 //get from storage Vector and add values to it.
    01514                 batchSqlVec = myConnection.getBatchVector(this);
    01515 
    01516                 // If adding parameter for the first time
    01517                 // create the vector to hold them.
    01518                 if ( batchSqlVec == null )
    01519                 {
    01520                     batchSqlVec = new Vector(5,10);
    01521 
    01522                     storedSize = 0;
    01523                 }
    01524                 else
    01525                 {
    01526                     storedSize = batchSqlVec.size();    
    01527                 }
    01528 
    01529                 Object[] addBatchParams = arrayParams.getStoredParameterSet();
    01530                 int[] addBatchParamsIdx = arrayParams.getStoredIndexSet();
    01531 
    01532                 int batchDataLen        = addBatchParams.length;
    01533                 int batchIdxLen         = addBatchParamsIdx.length;
    01534 
    01535                 if ( batchIdxLen == numParams )
    01536                 {
    01537                         batchSqlVec.addElement(addBatchParams);                            
    01538 
    01539                         myConnection.setBatchVector(batchSqlVec, this);
    01540 
    01541                         arrayParams.storeRowIndex( storedSize, addBatchParamsIdx );
    01542 
    01543                         batchOn = true;
    01544                 }
    01545                 else if ( storedSize == 0 )
    01546                 {
    01547                         throw new SQLException("Parameter-Set has missing values.");
    01548                 }
    01549                 else
    01550                 {
    01551                         //myConnection.setBatchVector(batchSqlVec, this);
    01552                         batchOn = true;
    01553                 }
    01554                                                                 
    01555             }
    01556             catch (NullPointerException e)
    01557             {
    01558                   //throw new SQLException("Parameter Set has missing values");
    01559                   batchOn = false;
    01560             }    
    01561         
    01562         }
    01563 
      

  6.   

    没用过这个数据库。。alter table table_name lock mode row这样么
    http://www.cntxk.com/catanews/56/info8355.html