3.出错的代码:出错的行数我用//error标出.(完整的代在下面)
也就是这一行: stmt = m_objCon.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
后来我以为是参数的问题就把这行换成了  stmt = m_objCon.createStatement();  可是仍然出同样的错误.错误信息在2里(上面),错误信息是在weblogic上显示出的错误.public int insertARecordEx(DBData objDBData)
throws SQLException
{
//setLastReturnCount(DBERR_SYSTEM);
//setLastException(null); //
//  define some variables used in this function
//
int             iResult = DBERR_NORMAL;
StringBuffer    strSql = new StringBuffer("");
String          strTableName = objDBData.getTableName();
ColumnInfo      objColumnInfo = null;
PreparedStatement pstmt;
Statement stmt; //  if the name of table is not exist then return error code
if (strTableName == null) return iResult; //  if no data return false
if (objDBData.m_iColIDs == null) return iResult; int iLength = objDBData.m_iColIDs.length; //  if no data return false
if (iLength <= 0 ) return iResult; //  check the data in the DBData
if (objDBData.checkValue(CHECK_INSERT_ERROR) != DBERR_SUCCESS) return DBERR_NORMAL; //
//  construct the sql string
//
strSql.append("INSERT INTO ");
strSql.append(m_objSchema.getSchema(strTableName));
strSql.append(strTableName);
strSql.append("(");
                for (int i = 0;i < iLength;i++)
{
                   if(objDBData.m_bIsNull[i] !=true) {
                     objDBData.m_bMask[i] = true;
                   }
                }
//  construct the first part of the sql string including table name
//  example : insert into customer (customerName,customerFax) values
for (int i = 0;i < iLength;i++)
{ //  if the column is masked
if (objDBData.m_bMask[i] == true)
{ objColumnInfo = DataDict.getColumnInfo(objDBData.getTableID(),objDBData.m_iColIDs[i]); strSql.append(objColumnInfo.m_strColName); if (i == getLastPos(objDBData.m_bMask))
{
strSql.append(") VALUES(");
}
else
{
strSql.append(",");
}
}// end of < if (objDBData.m_bMask[i] == true) >
} boolean bHasLOB = false; //  construct the whole sql string
for (int i = 0;i < iLength;i++)
{ //  if the column is masked
if (objDBData.m_bMask[i] == true)
{ //  if the column value is not null
if (objDBData.m_bIsNull[i] == false)
{
if (objDBData.m_strValue[i] != null || objDBData.m_lobValue[i] != null)
{
objColumnInfo = DataDict.getColumnInfo(objDBData.getTableID(),objDBData.m_iColIDs[i]); switch (objColumnInfo.m_iType ) {
case DBTYPE_SMALLINT :
case DBTYPE_TINYINT :
case DBTYPE_INTEGER :
case DBTYPE_BIGINT :
case DBTYPE_DECIMAL :
case DBTYPE_NUMERIC :
case DBTYPE_FLOAT :
case DBTYPE_REAL :
case DBTYPE_DOUBLE :
strSql.append(objDBData.m_strValue[i]);
break;
case DBTYPE_CHAR :
case DBTYPE_VARCHAR :
case DBTYPE_DATE :
case DBTYPE_TIME :
strSql.append("'");
strSql.append(objDBData.m_strValue[i]);
strSql.append("'");
break;
case DBTYPE_TIMESTAMP :
if ( objDBData.m_strValue[i] == DB_TIMESTAMP ) {
// For System TimeStamp
strSql.append(DB_TIMESTAMP_CONTENT);
// End for System TimeStamp
} else {
strSql.append("'");
strSql.append(objDBData.m_strValue[i]);
strSql.append("'");
}
break;
case DBTYPE_LONGVARCHAR :
case DBTYPE_LONGVARBINARY :
strSql.append("?");
bHasLOB = true;
break;
default :
break;
}
}
else
strSql.append("NULL");
}
else
{
strSql.append("NULL");
}// end of < if (objDBData.m_bIsNull[i] == false) > //  if this is the last element of array
if (i == getLastPos(objDBData.m_bMask))
{
strSql.append(") ");
}
else
{
strSql.append(",");
}
}// end of < if (objDBData.m_bMask[i] == true) >
} //  execute the sql string
int iDBResult;
String strTemp = strSql.toString();
Log.printSQLStartln(this,strTemp);
if ( bHasLOB ) {
pstmt = m_objCon.prepareStatement(strSql.toString()); // provide values for prepared statement and execute update int iColNo = 1;
for (int i = 0;i < iLength;i++)
{
//  if the column is masked
if (objDBData.m_bMask[i] == true)
{
//  if the column value is not null
if (objDBData.m_bIsNull[i] == false)
{
objColumnInfo = DataDict.getColumnInfo(objDBData.getTableID(),objDBData.m_iColIDs[i]); if ( objColumnInfo.m_iType ==  DBTYPE_LONGVARCHAR
|| objColumnInfo.m_iType ==  DBTYPE_LONGVARBINARY ) {
pstmt.setBinaryStream (iColNo, objDBData.getInputStreamValueByColNo(i), objColumnInfo.m_iLength);
                                                                iColNo ++;
}
}
} } iDBResult = pstmt.executeUpdate();
pstmt.close();
} else {
stmt = m_objCon.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  //error
//stmt = m_objCon.createStatement();  
//m_objVector.addElement(stmt);
iDBResult = stmt.executeUpdate(strSql.toString()); stmt.close(); setLastReturnCount(iDBResult);
setLastException(null);
}
            Log.printSQLEndln(this); m_iCurrentAffectRecordNum = iDBResult;
if (m_iCurrentAffectRecordNum == 0)
{
return DBERR_AFFECT_ZERO;
}
     return DBERR_SUCCESS;
}

解决方案 »

  1.   

    太长,只看了一下错误信息,觉得你的SQL语句不对。
    INSERT INTO PRODUCT005(PRODID,SERIAL,PRODNAME,PURCHASE,AREA) VALUES(3,'fe'
    f',23,'wef');
    是不是应该这样
    INSERT INTO PRODUCT005(PRODID,SERIAL,PRODNAME,PURCHASE,AREA) VALUES(3,'fe','
    f',23,'wef');
    f前少了一个'和,!
      

  2.   

    SQL语句没有错,我用原来自己写的ConnectionPool时,一切正常,当然也包括这句SQL语句,只要一换成Weblogic自己的DataSource和ConnectionPool就出错了.
      

  3.   

    我用的是DataSource 是:Tx Data Source,应该是事务的吧,可ConnectionPool怎么区分是事务池还是普通池呢?是不是根据数据源?还是在ConnectionPool中有设置??