Problem with Updateable ResultSet

Hi,
I'm having a problem updating an updateable resultset. When I query the database using anything other than the LIKE clause, I can update the resultset just fine. As soon as I add the LIKE clause to my select query and then try to update one of the records in the resultset I get an "Error in row". The database I am using is MS Access (yes I know, not a good choice), and I am using the driver that comes built into Java. I am also running JDK 1.5_06.
I've looked to see if maybe this is a known bug, but haven't found anything related to this. Has anyone else seen this same problem? Or know of a way to get around it?
Thank you in advance.

I'm confused then... Why would I be able to update
the resultset when I select that resultset not using
the LIKE clause, but when I use the LIKE clause to
get the resultset and then try to update it in some
way, I get an error. Because the database isn't giving you an updatable cursor if you use a like apparently. It just isn't. Don't know why.
Obviously the resultset is
updateable, Obviously not.
and I have selected the right cursor type
for each parameter (TYPE_SCROLL_INSENSITIVE and
CONCUR_UPDATABALE). I am sure you are but what you ask for is not always what you get.
I understand that it is not
required for the database and/or driver to fulfill my
wishes, but it seems odd Yes it does seem a bit odd but that doesn't make it less true. To be frank with you I can't remember the last time I used an updatable result set.
It's one of these things that seem all nifty at first but it's all very quirky and resource intensive and in almost all cases was better handled by an INSERT, UPDATE or DELETE statement in the first place.
that it I am able to update
the resultset when I have not used the LIKE clause to
create it, but am unable to update it when having
created it using the LIKE clause. :shrug: Because. I couldn't tell you why it does it this way. I am sure it has something to do with how it builds the cursor... generally in MS database stuff there are dynamic and static (or fixed I can't remember the names) "keysets" for a given result set. I am mangling the terminolgy here but it doesn't really matter... the point is with MS databases the way you search combined with any clauses combined with what fields you select all effect the ending cursor types you can have. This is true for most databases really... and to make a long story short I guess that a LIKE is just making the backing keyset or whatever non updatable.
I'll try your tip
of listing all of the columns instead of using * to
see if that makes a difference.It might but don't get your hopes up.
This is a general tip you can use to try and get an updatable cursor but honestly in your case I am not sure it will help. It seems to me that you are going to have to not use LIKE.
Which means you can either give up the updatable cursor OR the like. If you have to have an updatable cursor AND the LIKE then you are going to have to do this in two steps.
Query 1 - Select the keys by LIKE
Query 2 - Select updatable cursor using the keys from query 1
But that seems terribly painful.

Similar Messages

  • Problem with different resultset with same data and same query in Oracle 8.1.7 and 9i

    Hello,
    I have been using this query in oracle 8.1.7
    SELECT
    ID,
    AREA_NO
    FROM MANAGER_AREA MGR
    WHERE COMPANY_ID = :id AND
    (:value < (SELECT COUNT(ROWID)
    FROM MANAGER_WORK MW
    WHERE MW.AREA_ID = MGR.ID AND
    (MW.END_WORK IS NULL OR MW.END_WORK >= SYSDATE)))
    order by AREA_NO;
    In the above query I want to see rows from MANAGER_AREA table depending upon date criteria in the table MANAGER_WORK and also upon the parameter :value i.e if I pass a value as 0 I get to see records for which their is atleast 1 record in MANAGER_WORK with the date criteria and if I pass -1 then I get all the records because minimum value that count(*) would give is 0. The resultset was as expected in 8.1.7.
    A couple of days back I installed PERSONAL 9i to test for testing the basic functionality of our program with the same data. This query fails and irrespective whether I pass -1 or 0 it returns me same dataset which I would have got in case if I pass 0.
    I do not know whether this is a bug that has got introduced in 9i. Can anybody help me with this problem. It would be difficult for me to change the parameter send to this query as the Query is called from many different places.
    Thanks in advance
    Amol.

    I cannot use a Group by and a having statement over here. The problem with 'Group by' and 'having' clause is If I have to make a join between the two tables. When I use join then I get only rows that are linked to each other in the table.
    If I use outer join to solve that problem then I have to take in consideration the other date condition. My previous query use to virtually discard the corelated query result by using -1 as the value. This will not happen in the join query.
    Amol.

  • Problem with scrollable resultset of oracle

    I encountered problom like this:
    when I use
    s=createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
    and getString of a resultset,I get the right data.
    However ,when I use
    s= createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
    and getString of a ResultSet ,
    if the type of the field is Date,then get right data.
    if it is char or varchar2,then i get some thing like
    0x313233,
    all has been found in win2000&solaris
    with oracle 8.1.6
    thanks a lot!

    Hello,
    We've got the same problem.
    It comes from the National Character Set of Oracle Database.
    With WE8ISO8859P1, no problem with using this parameters.
    But with WE8ISO8859P9, we have some hexadecimal return.
    I don't know if it's works with another Character set, but with this, It doesn't work.
    We're trying to find a solution. Because change the character set is not one.
    Good luck.

  • IBM DB2 with Updateable ResultSets

    I'm working on a cross database application that uses updateable resultsets.
    I've run it on mysql and postgres.
    And using JTDS and DataDirect I've got SQL Server functionality working.
    But now I'm trying to deploy it on DB2 using the UDB dirver. But it seems that it doesn't support Updatable ResultSets.
    The driver I'm using came with the DB2 Personal Edition.
    Is there another driver by IBM that supports updatable resultsets, or will I be forced inyo finding a thrid party driver for my work?

    I believe I was using the type 4 one, but I got a SQL Exception simply saying "Driver not Capable" when I ran it.
    The DataDirect one should work, but it is also responsible for connection hijacking.
    What that is that once you register the DB2 Driver, and you use DriverManager to get a connection, it assumes that ALL calls to DriverManager.getConnection() are for DB2 connections, even though I use Postgres connections as well. When I try to get a postgres connection, the DB2 driver throws an exception saying that it can't connect to the datasource!

  • Problem with store ResultSet and show result in table

    Hi, I'm kind of new in ADF, I need to store ResultSet and show result in table-component. I have two problems:
    1) I get my ResultSet by calling callStoredProcedure(...) and this returns actually ref_cursor as ResultSet.
    When I try to println() contains of this result set in this method - it works OK (commented part),
    but when I want to println() somewhere else (eg. in retrieveRefCursor() method) it doesn't work.
    The problem is that the scrollability of the ResultSet is lost - it becomes a TYPE_FORWARD_ONLY ResultSet.
    Is there any way to store data from ref_cursor for a long time?
    2) My second problem is "store any result set and show this data in table". I have tried use method storeNewResultSet() but
    without result (table contains only "No rows yet" and everything seems to be OK - no exception, no warning, no error...).
    I have tried to call this method with ResultSet from select on dbs (without resultSet as ref_cursor ) - no result with createRowFromResultSet(),
    storeNewResultSet(), setUserDataForCollection()...
    I've tried a lot of ways to do this, but it doesn't work. I really don't know how to make it so it can work.
    Thanks for your help.
    ADF BC, JDev 11.1.1.0
    This is my code from ViewObjectImpl
    package tp.model ;
    import com.sun.jmx.mbeanserver.MetaData ;
    import java.sql.CallableStatement ;
    import java.sql.Connection ;
    import java.sql.PreparedStatement ;
    import java.sql.ResultSet ;
    import java.sql.ResultSetMetaData ;
    import java.sql.SQLException ;
    import java.sql.Statement ;
    import java.sql.Types ;
    import oracle.jbo.JboException ;
    import oracle.jbo.server.SQLBuilder ;
    import oracle.jbo.server.ViewObjectImpl ;
    import oracle.jbo.server.ViewRowImpl ;
    import oracle.jbo.server.ViewRowSetImpl ;
    import oracle.jdbc.OracleCallableStatement ;
    import oracle.jdbc.OracleConnection ;
    import oracle.jdbc.OracleTypes ;
    public class Profiles1ViewImpl extends ViewObjectImpl {
        private static final String SQL_STM = "begin Pkg_profile.get_profile_list(?,?,?,?);end;" ;
        public Profiles1ViewImpl () {
        /* 0. */
        protected void create () {
            getViewDef ().setQuery ( null ) ;
            getViewDef ().setSelectClause ( null ) ;
            setQuery ( null ) ;
        public Connection getCurrentConnection () throws SQLException {
            // Note that we never execute this statement, so no commit really happens
            Connection conn = null ;
            PreparedStatement st = getDBTransaction ().createPreparedStatement ( "commit" , 1 ) ;
            conn = st.getConnection () ;
            st.close () ;
            return conn ;
        /* 1. */
        protected void executeQueryForCollection ( Object qc , Object[] params , int numUserParams ) {
            storeNewResultSet ( qc , retrieveRefCursor ( qc , params ) ) ;
            // callStoredProcedure ( qc , SQL_STM ) ;
            super.executeQueryForCollection ( qc , params , numUserParams ) ;
        /* 2. */
        private ResultSet retrieveRefCursor ( Object qc , Object[] params ) {
            ResultSet rs = null ;
            rs = callStoredProcedure ( qc , SQL_STM ) ;
            return rs ;
        /* 3. */
        public ResultSet callStoredProcedure ( Object qc , String stmt ) {
            CallableStatement st = null ;
            ResultSet refCurResultSet = null ;
            try {
                st = getDBTransaction ().createCallableStatement ( stmt , 0 ) ; // call 
                st.setObject ( 1 , 571 ) ; //set id of my record to 571
                st.registerOutParameter ( 2 , OracleTypes.CURSOR ) ; // my ref_cursor
                st.registerOutParameter ( 3 , Types.NUMERIC ) ;
                st.registerOutParameter ( 4 , Types.VARCHAR ) ;
                st.execute () ; //executeUpdate
                System.out.println ( "Numeric " + st.getObject ( 3 ) ) ;
                System.out.println ( "Varchar " + st.getObject ( 4 ) ) ;
                refCurResultSet = ( ResultSet ) st.getObject ( 2 ) ; //set Cursoru to ResultSet
                //   setUserDataForCollection(qc, refCurResultSet); //don't work
                //   createRowFromResultSet ( qc , refCurResultSet ) ; //don't work
                /* this works but only one-time call - so my resultSet(cursor) really have a data
                while ( refCurResultSet.next () ) {
                    String nameProfile = refCurResultSet.getString ( 2 ) ;
                    System.out.println ( "Name profile: " + nameProfile ) ;
                return refCurResultSet ;
            } catch ( SQLException e ) {
                System.out.println ( "sql ex " + e ) ;
                throw new JboException ( e ) ;
            } finally {
                if ( st != null ) {
                    try {
                        st.close () ; // 7. Close the statement
                    } catch ( SQLException e ) {
                        System.out.println ( "sql exx2 " + e ) ;
        /* 4. Store a new result set in the query-collection-private user-data context */
        private void storeNewResultSet ( Object qc , ResultSet rs ) {
            ResultSet existingRs = getResultSet ( qc ) ;
            // If this query collection is getting reused, close out any previous rowset
            if ( existingRs != null ) {
                try {
                   existingRs.close () ;
                } catch ( SQLException s ) {
                    System.out.println ( "sql err " + s ) ;
            setUserDataForCollection ( qc , rs ) ; //should store my result set
            hasNextForCollection ( qc ) ; // Prime the pump with the first row.
        /*  5. Retrieve the result set wrapper from the query-collection user-data      */
        private ResultSet getResultSet ( Object qc ) {
            return ( ResultSet ) getUserDataForCollection ( qc ) ;
        // createRowFromResultSet - overridden for custom java data source support - also doesn't work
       protected ViewRowImpl createRowFromResultSet ( Object qc , ResultSet resultSet ) {
            ViewRowImpl value = super.createRowFromResultSet ( qc , resultSet ) ;
            return value ;
    }

    Hi I have the same problem like you ...
    My SQL Definition:
    CREATE OR REPLACE TYPE RMSPRD.NB_TAB_STOREDATA is table of NB_STOREDATA_REC
    CREATE OR REPLACE TYPE RMSPRD.NB_STOREDATA_REC AS OBJECT (
       v_title            VARCHAR2(100),
       v_store            VARCHAR2(50),
       v_sales            NUMBER(20,4),
       v_cost             NUMBER(20,4),
       v_units            NUMBER(12,4),
       v_margin           NUMBER(6,2),
       v_ly_sales         NUMBER(20,4),
       v_ly_cost          NUMBER(20,4),
       v_ly_units         NUMBER(12,4),
       v_ly_margin        NUMBER(6,2),
       v_sales_variance   NUMBER(6,2)
    CREATE OR REPLACE PACKAGE RMSPRD.NB_SALES_DATA
    AS
    v_sales_format_tab   nb_tab_storedata;
    FUNCTION sales_data_by_format_gen (
          key_value         IN       VARCHAR2,
          l_to_date         IN       DATE DEFAULT SYSDATE-1,
          l_from_date       IN       DATE DEFAULT TRUNC (SYSDATE, 'YYYY')
          RETURN nb_tab_storedata;
    I have a PLSQL function .. that will return table ..
    when i use this in sql developer it is working fine....
    select * from table (NB_SALES_DATA.sales_data_by_format_gen('TSC',
                                        '05-Aug-2012',
                                        '01-Aug-2012') )
    it returning table format record.
    I am not able to call from VO object. ...
    Hope you can help me .. please tell me step by step process...
    protected Object callStoredFunction(int sqlReturnType, String stmt,
    Object[] bindVars) {
    System.out.println("--> 1");
    CallableStatement st = null;
    try {
    st = getDBTransaction().createCallableStatement("begin ? := " +"NB_SALES_DATA.sales_data_by_format_gen('TSC','05-Aug-2012','01-Aug-2012') ; end;", 0);
    System.out.println("--> 2");
    st.executeUpdate();
    System.out.println("--> 3");
    return st.getObject(1);
    catch (SQLException e) {
    e.printStackTrace();
    throw new JboException(e);

  • Problem with retrieve ResultSet.getBytes("columnName");

    Hi....
    Can I specify the encoding with ResultSet.getBytes("columnName") method.
    If not then how can I specify the desired encoding while fetching the values from DB?
    Thanks

    Again, why are you using bytes and not characters?I have tried everything that I could do.
    I have also tested with characters as well.
    For storing character I did the following steps
    STEP-1
    Change the column datatye to NVARCHAR
    STEP-2
    To reterieve I use the following code
    ResultSet.getString("column name"); When I call getString("columnName") on the DB column which is NVARCHAR, it returns null even though a value exists there.
    Is there any driver problem or what? But I dont think so that driver can be the problem...
    What to do next...... ?
    Where am I going wrong...?

  • Problem with a resultset before a delete in a stored procedure

    We have been using the Microsoft provider in the past. However, we now need to use CLOBs, so we would like to move to the Oracle provider. However, we have several stored procedures that select some data out of a table, compile a result set, and then delete those records. This is all done as one transaction.
    So, for instance:
    CREATE OR REPLACE PACKAGE TESTPKG IS
    TYPE t_userid IS TABLE OF INT INDEX BY BINARY_INTEGER;
    END;
    CREATE OR REPLACE PROCEDURE SP_TESTPROC(o_userid OUT EZTESTPKG.t_userid) IS
    counter NUMBER DEFAULT 1;
    CURSOR v_cursor IS
    SELECT userid
    FROM MyTempUsers;
    BEGIN
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    FOR i IN v_cursor LOOP
    o_userid(counter):=i.userid;
    counter:=counter+1;
    END LOOP;
    DELETE FROM MyTempUsers;
    COMMIT;
    END;
    this is called with and ADO CommandText of:
    {call SP_TESTPROC({resultset 200, o_userid})}
    Now, I simplified my example, but a reference cursor will not work because of the delete that would happen after the select. And I know that "resultset" is specific to the Microsoft provider.
    Is there anyway to get these output parameters back to my ADO application in a manner similar to the Microsoft provider? Or in any method? Cursors are great, but in this case, all I would get would be an empty resultset, because of the Delete. Correct?

    1. The reason as you said is the ISOLATION level(Serializable). This creates an exclusive lock on the data that has been selected from the table into the cursor(which is created in memory) and thus you cannot update or delete any of the selected.
    2. You could still use a reference cursor because it resides in memory and does not reperesent any changes made to the table on disk provided that there are no locks in palce(this is true in your case).

  • Problem with JDBC resultset

    Hello everyone:
    I'm using JDBC to connect to SQL Server, normally after executeQuery();, it should return me a opened BaseResultSet in order that i can read datas by stream(next(), getColumn(),etc...) but sometimes it returns a BaseResultSet closed. (I detected it during the debugging by checking the value of the property "closed" in the object returned ), in this case it refused all the following operations with the exceptions "ResultSet has been closed".
    Does that sound normal? How to solve it ?
    Thanks a lot!!!!

    Did you close the underlying Statement or Connection objects? It might come back empty (e.g., next() returns false), but it should not come back already closed.
    - Saish

  • Probem with updateable resultset

    i have large view in database , i want to update virtual columns in this view , i used resultset to update this virtual columns , but there are exception that resultset is readonly .
    my question i want to update these virtual columns with resultset or cashrowset .
    i want these to make some calculation in run time before run report .
    Statement stmt = connection.createStatement(
    ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    ResultSet resultSet = stmt.executeQuery("SELECT * FROM employeedata_view");
    resultSet.first();
    resultSet.updateString("col_string", "join");
    resultSet.updateRow();

    Does your database support update-able views? If not, there's no way it's going to work from Java.

  • Problem with Sensitive ResultSet in SQL Server 2000

    Hi,
    I am trying to use SCROLL_SENSITIVE and CONCUR_UPDATABLE ResultSet accessing SQL Server 2000. I am using JDK 1.3 and supported JDBC driver. When I tried to insert a row, I got the following message:
    sp_cursor: The cursor identifier value provided (0) is not valid
    Is there any setting in SQL Server that I need to configure or do I miss something in my code?
    Thanks,
    Andi Setiyadi
    Here are my codes:
    cs = connection.prepareCall("{call sp_deptInfo (?,?,?)}", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
    cs.setInt(1, 0);
    cs.setString(2, "");
    cs.setString(3, "name/orderbyid");
    rs = cs.executeQuery();
    rs.last();
    int rows = rs.getRow();
    rs.afterLast();
    rs.moveToInsertRow();
    rs.updateInt(1, rows + 1);
    rs.updateInt(2, Integer.parseInt(parentDept));
    rs.updateString(3, newDept);
    rs.updateInt(4, 1);
    rs.insertRow();

    I am getting the resultset by calling a stored procedure. I am not changing the stored procedure itself.Database drivers create 'connections' and 'statements' which match the SQL that you pass it. You are passing it a stored proc. The only information that it has is on a stored proc. It doesn't matter where the stored proc got its info from. The stored proc doesn't return tables and indexes into tables. It returns a result set (that is what your code suggests.) That is all the information that the driver has.
    Consider your stored proc might return this
    select * from mytable where ....
    But it could also do this
    select 'value1', 'value2', ... from dual
    On the java side it isn't not going to know which of the above that you did. Nor should it. And you can't update/insert into that second example.
    Or at least that is how I look at it.
    Your code looks like it is trying to 'update' the result set that a stored proc returned. And I simply don't see how that is possible. Or even why anyone would want to do it.

  • Problem with get ResultSet from rmi jdbc method. Help.

    Hi,
    I am writing a rmi jdbc server. I got all the rmi methods working, but I am trying to get the data from the ResultSet. After the query, I set the fields in the serialiable class and return it back to the client. However, I noticed that it does called init(), but not the setField calls. When it calls the first setField in the serialiable class, the method is never called. Can anyone give some guidance.
    Thanks,
    Rage
    This method is called from the client to set all the data in the Serialiable class and return it to the client.
    public Collection fetchResultSet() throws RemoteException
    System.out.println("Entering fetchResultSet");
    Collection resultSetColl = new ArrayList();
    QueryResultSet recordset;
    try
    int rowCount = 0;
    ResultSetMetaData rsmd = rs.getMetaData(); // Get data dictionary information
    int columnCount = rsmd.getColumnCount();
    System.out.println("got column count");
    System.out.println("" + rowCount + " rows, " +
    columnCount + " columns");
    if (rs == null) System.out.println("rs is null");
    if (rs.next())
    System.out.println("Parsing RS");
    recordset = new QueryResultSet();
    for (int i = 1; i <= columnCount; i++)
    System.out.println("set Fields = "+ rs.getString(i) );
    //recordset.setField(i,rs.getString(i));
    String strValue = rs.getString(i);
    recordset.setField(i,strValue);
    System.out.println("Added recordset" );
    resultSetColl.add(recordset);
    catch (Exception e)
    System.out.println(e.getMessage());
    closeResultSet();
    return resultSetColl;
    Here is my Serializable Class
    import java.io.*;
    import java.sql.*;
    public class QueryResultSet implements Serializable
    private String Field1;
    private String Field2;
    private String Field3;
    private String Field4;
    private String Field5;
    private String Field6;
    private String Field7;
    private String Field8;
    private String Field9;
    private String Field10;
    private String Field11;
    private String Field12;
    private String Field13;
    /** Creates a new instance of QueryResultSet */
    public QueryResultSet()
    init();
    public void init()
    System.out.println("QueryResultSet INIT()");
    Field1 = "";
    Field2 = "";
    Field3 = "";
    Field4 = "";
    Field5 = "";
    Field6 = "";
    Field7 = "";
    Field8 = "";
    Field9 = "";
    Field10 = "";
    Field11 = "";
    Field12 = "";
    Field13 = "";
    public String getField(int nField)
    System.out.println("QueryResultSet getField()");
    System.out.println("getField 1 = " + Field1);
    if (nField ==1)
    return Field1;
    else if (nField == 2)
    return Field2;
    else if (nField == 3)
    return Field3;
    else if (nField == 4)
    return Field4;
    else if (nField == 5)
    return Field5;
    else if (nField == 6)
    return Field6;
    else if (nField == 7)
    return Field7;
    else if (nField == 8)
    return Field8;
    else if (nField == 9)
    return Field9;
    else if (nField == 10)
    return Field10;
    else if (nField == 11)
    return Field11;
    else if (nField == 12)
    return Field12;
    else if (nField == 13)
    return Field13;
    return null;
    public void setField(int nField, String strField)
    System.out.println("QueryResultSet setField()");
    System.out.println("field #" String.valueOf(nField) " = " + strField);
    if (nField == 1)
    Field1 = strField;
    else if (nField == 2)
    Field2 = strField;
    else if (nField == 3)
    Field3 = strField;
    else if (nField == 4)
    Field4 = strField;
    else if (nField == 5)
    Field5 = strField;
    else if (nField == 6)
    Field6 = strField;
    else if (nField == 7)
    Field7 = strField;
    else if (nField == 8)
    Field8 = strField;
    else if (nField == 9)
    Field9 = strField;
    else if (nField == 10)
    Field10 = strField;
    else if (nField == 11)
    Field11 = strField;
    else if (nField == 12)
    Field12 = strField;
    else if (nField == 13)
    Field13 = strField;
    }

    You need to give us some information more. Like what rdbms are you using, what driver and how are you trying to access the resultset from java.
    I do not know what are you using. One thing I can tell you for sure is that the execute method returns a boolean. If you need a resultset you should run executeQuery.
    Kiros

  • Problems with the resultset

    hello
    i have a servlet that connects to a db. Data is passed back in the resultset. But only for one of my columns(if i specify it in my select statement)- i want the resultset to pass back the column that the user has selected(this is via a variable called 'type')!
    But i get an exception of type:
    java.lang.ArrayIndexOutofBoundsException
    Heres my code:
    query = "select '"+type+"' from caravan_charges where..........
    Resultset result = stmt.executeQuery(query);
    int count = 0;
    while(result.next()) {
    count += result.getInt(1);
    can anyone help!!!

    check the variable query and check the SQL statement. But the error relate to an array most probably where the code result.getInt(1);. Check my code below. by getting the column count will surely avoid the outofbounds array error.
    SQLResult = StatementSQL.executeQuery(sql);
    if (!SQLResult.next()) {
         JOptionPane.showMessageDialog(null, "No rows retrieved.\nPlease check SQL script.");
         JTable emptyTable = new JTable(dataVector, headerVector);
         resultTableScroller.setViewportView(emptyTable);
    else {
         ResultSetMetaData mdSQL = SQLResult.getMetaData();
         int colCount = mdSQL.getColumnCount();
         //get column names here
         for (int i = 1; i <= colCount; i++) {
              String colName = mdSQL.getColumnName(i);
              colName.trim();
              headerVector.addElement(colName);
         do {
              Vector rowVector = new Vector();
              for (int i = 1; i <= colCount; i++) {
                   String colName = mdSQL.getColumnName(i);
                   colName.trim();
                   rowVector.addElement(SQLResult.getString(colName));
              dataVector.addElement(rowVector);
         } while (SQLResult.next());

  • Problem with ResultSet in a loop

    hi,
    i have a probleme with ResultSet when, my code is bellow
    ResultSet rs = stmt.executeQuery(sql);
    sql="SELECT NAME FROM prestationtemp";
    rs = stmt.executeQuery(sql);
    String sqlDel="";
    while (rs.next())
    sqlDel="Delete from prestation where NAME="+rs.getString("NAME");
    stmt.executeQuery(sqlDel);
    the problem is that the loop iterate just once like if there is just one record, and if I remove stmt.executeQuery(sqlDel); from the loop it iterate normaly.
    thanks in advance.

    you will need to use 2 Statments e.g.
    Statement stmt1 = connection.createStatement();
    Statement stmt2 = connection.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    sql="SELECT NAME FROM prestationtemp";
    rs = stmt1.executeQuery(sql);
    String sqlDel="";
    while (rs.next())
    sqlDel="Delete from prestation where NAME="+rs.getString("NAME");
    stmt2.executeQuery(sqlDel);
    } When you reuse a Statement, any resultsets previously created are automatically closed.
    Looking at your code, it seems that you only need 1 SQL call:
    Delete from prestation where NAME in (SELECT NAME FROM prestationtemp)
    Much more efficient!

  • Problem with GenericCatalogDAO  JDBC Resultset using parameters not working

    Hello
    I have a problem with Petstore GenericCatalogDAO. java. The problem is the behaviour of the resultset object when retrieving data from the database.Below are two synareos one that
    works (when) hard coded and one that does not work when parameter values passed into the the result set.
    1. The code the WORKS.
    statement = connection.prepareStatement("select a.productid , name, descn from product a, product_details b
    where a.productid = b.productid and locale= 'en_US' and a.catid = 'FISH' order by name"
    ,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    resultSet = statement.executeQuery();
    resultSet.absolute(1);
    String s = resultSet.getString(1);
    The code that gives me a 'exhausted resultset' error which I think means no results
    String[] parameterValues = new String[] { locale.toString(), categoryID };(For example parameters are 'en_US' and 'FISH')
    statement = connection.prepareStatement("select a.productid , name, descn from product a, product_details b
    where a.productid = b.productid and locale=? and a.catid =? order by name"
    ,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    for (int i = 0; i < parameterValues.length; i++) {
    statement.setString(i + 1, parameterValues[i]);
    resultSet = statement.executeQuery();
    resultSet.absolute(1);
    String s = resultSet.getString(1);
    There is obviously a problem using these named parametevalues with these preparedstatement resultset, Does anybody know anything about this and a fix for it????
    Cheers. Roger

    Which version of PetStore are you using?
    -Larry

  • JDBC Resultset Problem with ORACLE 10.1.0.2

    Hello
    I have a problem with Petstore GenericCatalogDAO. java. The problem is the behaviour of the resultset object when retrieving data from the database.Below are two synareos one that
    works (when) hard coded and one that does not work when parameter values passed into the the result set.
    1. The code the WORKS.
    statement = connection.prepareStatement("select name from employee where a.name ='SMITH' order by name"
    ,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    resultSet = statement.executeQuery();
    resultSet.absolute(1);
    String s = resultSet.getString(1);
    The code that gives me a 'exhausted resultset' error which I think means no results
    String[] parameterValues = new String[] { "SMITH" };
    statement = connection.prepareStatement("select name from employee where a.name =? order by name ",
    ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
    for (int i = 0; i < parameterValues.length; i++) {
    statement.setString(i + 1, parameterValues);
    resultSet = statement.executeQuery();
    resultSet.absolute(1);
    String s = resultSet.getString(1);
    There is obviously a problem using these named parametevalues with these preparedstatement resultset, Does anybody know anything about this and a fix for it????
    Cheers. Roger

    Roger,
    It's probably a mistake you made when posting your code, but your query string is incorrect it should be either:
    select name from employee where name = 'SMITH' order by nameor
    select a.name from employee a where a.name = 'SMITH' order by a.nameIn other words you have prefixed a column with a table alias but have not indicated a table alias in the query.
    Also, shouldn't your code be:
    for (int i = 0; i < parameterValues.length; i++) {
        statement.setString(i + 1, parameterValues[ i ]);
    }Or was the "[ i ]" part giving you trouble? (Since "[ i ]" -- without the spaces -- is treated as a text-formatting tag.)
    While I didn't try your specific query, I have no problem using "PreparedStatment"s with parameters.
    What is your environment? Mine is:
    Oracle 10g (10.1.0.4) database on Linux (Red Hat)
    JDK 1.4.2
    ojdbc14.jar JDBC driver (latest version)
    Good Luck,
    Avi.

Maybe you are looking for

  • Creating Non Copyable PDF document in Portal

    Hi, In our portal we save and Print report to PDF. Now business requires that the some of the PDF documents cannot be copyable by the users. Is this technically possible to do and how can achieve it. thanks Bhat

  • Problem in nokia n97 charging

    sridharrb - apart from the fact that your problem has no relationship to this thread, your problem is a symptom of the rubbish handsets that Nokclue build. The only real fix is to replace your phone with a handset from another manufacturer. Nokia N97

  • How do i find my old bookmarks?

    i had my browser update and i cant find my old bookmarks

  • Naming conventions for data types

    In my functional specs I have been given field names Client Number Record Type Customer Name and so on I need to create custom data types for all these and assign them to std values (vbak-kunnr, adrc-name1) I am trying to determine what is the best n

  • Menu text from Photoshop .psd bitmapped on DVD

    Hi, I have edited some footage from DV tape in PP CC, exported sequences and then authored the DVD in Encore with Photoshop .psd files with text layers for menus. PP CC Sequence settings: 720x576 25fps D1/DV PAL Export Settings: Format: MPEG2-DVD Pre