Locking & updating table in one transaction

I have a method in legacy code which generates unique ID for application.Everytime it generates 40-50 numbers depeding on blocksize and updates the DB with the last id generated.
try{
   DataSource ds = serviceLocator.getDataSource("java:MYDB");
   con = ds.getConnection();
   //1. add conn.setAutoCommit(false);
   ps = con.prepareStatement("LOCK TABLE  IDGEN IN EXCLUSIVE   MODE");
   ps.execute();
   st = con.createStatement();
   rs = st.executeQuery("SELECT ID FROM IDGEN");
   if (rs.next()) {
           startid = rs.getInt(1);
           endid =  startid + blocksize;
   // set last number for next call
   ps = con.prepareStatement("UPDATE IDGEN SET ID = ?);
   ps.setLong(1,endid);
   ps.executeUpdate();          
   // 2. add  con.commit();
  //3. add conn.setAutoCommit(true);
}catch (SQLException e){
    //log message
  }finally {
       //  close rs , stmt, conn
      // returns startid   which will be used to genearte next set of  numbers.
  }I think we need to add autocommit statements here. (1,2,3)
since autocommit is "true" by default , thread 1 locks table, this lock is released after ps.execute(); so "SELECT ID FROM IDGEN" and rest of the queries are not really executed on locked table.
Am I correct?
Thanks in advance.

DataSource ds = serviceLocator.getDataSource("foo");
Connection conn = null;
PreparedStatement stmtSelect = null;
PreparedStatement stmtUpdate = null;
ResultSet resultsSelect = null;
try {
  conn = ds.getConnection();
  conn.setAutoCommit(false);  // IMO, this should always be done
  // FOR UPDATE clause will lock the table
  stmtSelect = conn.prepareStatement("SELECT id FROM idgen FOR UPDATE");
  resultsSelect = stmtSelect.executeQuery();
  int maxValue = results.next() ? results.getInt(1) + 1 : 1;
  stmtUpdate = conn.prepareStatement("UPDATE idgen SET id = ?");
  stmtUpdate.setInt(1, maxValue);
  stmtUpdate.executeUpdate();
  conn.commit();  // must be done to release lock (rollback will also do so)
catch (SQLException e) {
   if (conn != null) try { conn.rollback(); } catch (SQLException fatal) { fatal.printStackTrace(); }
   throw new RuntimeException("Error fetching next sequence", e);
finally {
  // also close the prepared statements and result sets here
   if (conn != null) {
      try { conn.close(); } catch (SQLException e) { e.printStackTrace() };

Similar Messages

  • Saving data into two tables "in one transaction"

    Hello everybody!
    My scenario is the following: SAP PI receives message containing some data (header and MULTIPLE details data in one message) and has to transfere this data to a database.
    In the database there are two tables for storing the data contained in the message: one for HEADER data and one for DETAILS data. I need to save all the data (header and MULTIPLE details data) into these two tables "in one transaction" and roll back saving of HEADER data and DETAILS data if saving of some DETAILS data has failed.
    I am going to use receiver JDBC adapter for this purpose.
    My questions are:
    1. How can I save all the data "in one transaction"? Will it work if I transform the source message into the target message which looks something like this?
    <root>
      <StatementName1>
        <dbTableName action=u201CUPDATE_INSERTu201D>
        <table>HEADER_table</table>
        <access>
        <col1>val1</col1>
        <col2>val2</col2>
        </access>
        <key1>
        <col1>val1</col1>
        </key1>
        </dbTableName>
      </StatementName1>
      <StatementName2>
        <dbTableName action=u201CUPDATE_INSERTu201D>
        <table>DETAILS_table</table>
        <access>
        <col1>val1</col1>
        <col2>val3</col2>
        </access>
        <key1>
        <col1>val1</col1>
        </key1>
        </dbTableName>
      </StatementName2>
      <StatementName3>
        <dbTableName action=u201CUPDATE_INSERTu201D>
        <table>DETAILS_table</table>
        <access>
        <col1>val1</col1>
        <col2>val4</col2>
        </access>
        <key1>
        <col1>val1</col1>
        </key1>
        </dbTableName>
      </StatementName3>
    </root>
    2. How to roll back saving of HEADER data in the case of saving of DETAILS data has failed?
    3. What will be the response structure returned by database look like in the case of success?
    Thanks,
    Vika

    I guess the response in my case will be something as following?
    <response>
    <Statement1_response>
    <row>
    <update_count>1</update_count>
    <insert_count>0</insert_count>
    </row>
    </Statement1_response>
    <Statement2_response>
    <row>
    <update_count>0</update_count>
    <insert_count>1</insert_count>
    </row>
    <row>
    <update_count>0</update_count>
    <insert_count>1</insert_count>
    </row>
    </Statement2_response>
    </response>
    Vika

  • Master & detail table in one transaction

    Experts,
    I am useing 11g 11.1.1.4 and ADF BC, I have thought about this question quite for a while.
    I have a master & detail constructure in one page, master as af:form and detail as af: table.
    The master is 'booking' table (booking_id, create_date, create_user, user_contact) ,
    and detail is 'booking_line' table ( booking_id, booking_det_id, booking_weight, booking_volume, booking_type)
    According to my customer, user have to enter the master and detail data in one transaction and once user clicked the 'Submit booking' (actually is 'commit' operation),
    the system need to check at least one detail line have been entered by user, otherwise the error message issued and return back to the current page. how this one can be done? Thanks!

    Thanks a lot M.Jabr!
    I have used your suggestion as follwoing:
    public String cb3_action() {
    BindingContext bindingctx = BindingContext.getCurrent();
    BindingContainer bindings = null;
    bindings = bindingctx.getCurrentBindingsEntry();
    DCBindingContainer bindingsImpl = (DCBindingContainer) bindings;
    DCIteratorBinding dciter = null;
    //access the iterator by its ID value in the PageDef file.
    dciter = bindingsImpl.findIteratorBinding("BookingDetOlVO1Iterator");
    ViewObject vo= dciter.getViewObject();
    long rowsCount= vo.getEstimatedRowCount();
    if (rowsCount > 0) {
    OperationBinding operationBinding = (OperationBinding)bindings.getOperationBinding("Commit");
    Object result = operationBinding.execute();
    if (!operationBinding.getErrors().isEmpty())
    return null;
    return "BookingDone";
    } else {
    FacesContext context = FacesContext.getCurrentInstance();
    FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, null, "Please enter at least one Booking Detail line");
    context.addMessage(null, msg);
    return null;
    but there is another propblem after testing, I found if user just click the 'createInsert' operation in detail table. but without enter any values for some required fields, then can still - return "BookingDone"; that's means the required validation are skipped. any suggestion?

  • Insert data into two related tables in one transaction

    Hi all,
    I’ve got problem with developing functionality.
    Background:
    I’ve got two tables: OFFER_HEADER and OFFER_CONTENT
    For now, user has to insert and commit the OFFER_HEADER(single-row view), then content becomes reachable and OFFER_CONTENT(multi-row view) can be filled. It is being done by choosing record from PRODUCTS form and inserting values into OFFER_CONTENT. Product data can be modified on the CONTENT form canvas.
    My goal:
    I know that is not convenient way to implement the functionality. I want to insert all the data(header and content) in one transaction. What is the best way to do it?
    Thanks in advance,
    Best Regards,
    Bartek

    1. User is on the OFFER_CONTENT canvasOk
    2. User presses ‘+’ buttonOk
    3. On the screen is displayer PRODUCT list
    4. User set focus on desired product
    5. Using popup menu user choose ‘Add’ option
    6. PRODUCT list is being closedSo, the functionlatity is like a LoV?
    7. OFFER_CONTENT is being shown with set of information from the productOk, you would either take the values directly from the fields of the PRODUCT-list and copy them into the OFFER_CONTENT-fields, or you just get something like the PRODUCT-ID from your PRODUCT-list and use a SELECT to read the product-details into the OFFER_CONTENT-block
    8. User can then manually change desired elements of the recordOk.
    So, where do you have the need to do an INSERT in your scenario?

  • Is there any function module to lock t024 table

    is there lock object for t024 table?otherwise any fm for locking t024 table?

    Hi Naren,
    <b>Good ... check out the following documentation
    Lock objects are used to lock the database table while making the modifications on the database table.
    you can create your own lock objects using SE11.
    if you create lock objects on any table system will create two function modules.
    1.ENQUEUE....
    2.DEQUEUE.....
    first one is used to lock the table
    second one used to removing lock on the table.
    lock Table
    CALL FUNCTION 'ENQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    EXCEPTIONS
    foreign_lock = 1
    system_failure = 2
    OTHERS = 3.
    Unlock Table
    CALL FUNCTION 'DEQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    check this link :
    http://help.sap.com/saphelp_40b/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    _SCOPE = 1: The lock is not sent to the update program. The lock is removed when the transaction is ended.
    _SCOPE = 2: The lock is sent to the update program. The update program is responsible for removing the lock. The dialog program which requested the lock no longer has an influence on the lock behavior. This is the standard setting for the ENQUEUE function module.
    _SCOPE = 3: The lock
    Re: lock objects
    Managingin lock entries
    http://help.sap.com/saphelp_nw04/helpdata/en/37/a2e3ae344411d3acb00000e83539c3/frameset.htm
    http://help.sap.com/saphelp_nw04/helpdata/en/7b/f9813712f7434be10000009b38f8cf/frameset.htm
    http://help.sap.com/saphelp_nw04/helpdata/en/cb/168237d30d974be10000009b38f8cf/frameset.htm</b>
    Good Luck and thanks
    AK

  • FM to lock the Table

    Could anybody check and tell me whether Function Module ENQUEUE_E_TABLE
    and DEQUEUE_E_TABLE are working fine and if it is so let me know the Parameters used for it.
    Full reward points for issue solver.
    Regards,
    Amol

    hi..
    check out the following documentation
    Lock objects are used to lock the database table while making the modifications on the database table.
    you can create your own lock objects using SE11.
    if you create lock objects on any table system will create two function modules.
    1.ENQUEUE....
    2.DEQUEUE.....
    first one is used to lock the table
    second one used to removing lock on the table.
    lock Table
    CALL FUNCTION 'ENQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    EXCEPTIONS
    foreign_lock = 1
    system_failure = 2
    OTHERS = 3.
    Unlock Table
    CALL FUNCTION 'DEQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    check this link :
    http://help.sap.com/saphelp_40b/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    _SCOPE = 1: The lock is not sent to the update program. The lock is removed when the transaction is ended.
    _SCOPE = 2: The lock is sent to the update program. The update program is responsible for removing the lock. The dialog program which requested the lock no longer has an influence on the lock behavior. This is the standard setting for the ENQUEUE function module.
    _SCOPE = 3: The lock
    Re: lock objects
    Managingin lock entries
    http://help.sap.com/saphelp_nw04/helpdata/en/37/a2e3ae344411d3acb00000e83539c3/frameset.htm
    http://help.sap.com/saphelp_nw04/helpdata/en/7b/f9813712f7434be10000009b38f8cf/frameset.htm
    http://help.sap.com/saphelp_nw04/helpdata/en/cb/168237d30d974be10000009b38f8cf/frameset.htm
    <b>Reward points if useful</b>
    Regards
    Ashu

  • How can we lock the table?? how can we lock the record

    Hi
    how can we lock the complete table?? how can we lock the record ?/
    Thanks
    Rama

    Lock objects are used to lock the database table while making the modifications on the database table.
    you can create your own lock objects using SE11.
    if you create lock objects on any table system will create two function modules.
    1.ENQUEUE....
    2.DEQUEUE.....
    first one is used to lock the table
    second one used to removing lock on the table.
    lock Table
    CALL FUNCTION 'ENQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    EXCEPTIONS
    foreign_lock = 1
    system_failure = 2
    OTHERS = 3.
    Unlock Table
    CALL FUNCTION 'DEQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    check this link :
    http://help.sap.com/saphelp_40b/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    _SCOPE = 1: The lock is not sent to the update program. The lock is removed when the transaction is ended.
    _SCOPE = 2: The lock is sent to the update program. The update program is responsible for removing the lock. The dialog program which requested the lock no longer has an influence on the lock behavior. This is the standard setting for the ENQUEUE function module.
    _SCOPE = 3: The lock
    Re: lock objects
    Reward if this helps.

  • Lock custom tables

    Hi,
    I am writing program to upload data from excel to custom tables.
    Here i add/ update/delete records from the table based on entries from excel sheet.
    While i run this program, how do i maintain locks on the table, so that any other user is not modifying the tables at the same time.
    Points will be awarded immediately.
    Thanks

    <b>Lock objects</b> are used to lock the database table while making the modifications on the database table.
    you can create your own lock objects using SE11.
    if you create lock objects on any table system will create two function modules.
    <b>1.ENQUEUE....
    2.DEQUEUE.....</b>
    first one is used to lock the table
    second one used to removing lock on the table.
    <b>This lock object</b> facilitates synchronous process. That is suppose if you are changing the table entries, and simultaneously there might be several programs running in the background or by anything else which also does changes to the same table. In this case you can lock the table so that other program will not able to update/insert/ do any other operation unless or until your program executes successfully.
    You can create lock objects for this purpose in transaction SE11. SAP by default create 2 function modules. One for locking ( Enqueue) and other for unlocking ( Dequeue ). You can call these function module in appropriate places in your program.
    ex...
    lock Table
    CALL FUNCTION 'ENQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    EXCEPTIONS
    foreign_lock = 1
    system_failure = 2
    OTHERS = 3.
    Unlock Table
    CALL FUNCTION 'DEQUEUE_E_TABLE'
    EXPORTING
    tabname = table_name
    <b><u>check the below links:</u></b>
    http://help.sap.com/saphelp_40b/helpdata/en/cf/21eea5446011d189700000e8322d00/content.htm
    Re: lock objects
    Regards,
    Moqeeth.

  • Error Updating Table with "Get Active UnitOfWork" Checked

    Hi everyone.
    I call invoke the a DB Adapter twice to update table in one BPEL, and so I have checked "Get Active UnitOfWork" so that each update can be persisted. I am seeing inconsistent results. What could be causing this?

    Hi, Have you checked the .jca source to make sure this value is indeed checked? Sometimes even when you check this option in the wizard it doesn't reflect in the source when you also perform a select operation: http://docs.oracle.com/cd/E12839_01/relnotes.1111/e10133/adapter.htm. Also are you using the xADataSource driver in the data source and the xADataSourceName ConnectionFactory property?
    21.1.5.1 The Value Of the Active Unit Of Work Property Is Not Saved for Outbound SELECT Operation
    While configuring an outbound Oracle Database Adapter to perform a SELECT operation, if you select Get Active Unit of Work in the Adapter Configuration Wizard - Advanced Option page, then the value of the GetActiveUnitofWork property is not saved in the .jca file.
    The workaround for this issue is to manually add this property in the .jca file of the Oracle Database Adapter, as shown in the following example:
    <property name="GetActiveUnitOfWork" value="true"/>

  • How we can lock No more than one user can use the table  at a single time

    Hi Abapers,
    0)  which  function modules to lock & unlock a table.
    1) When you execute the program, we can check if there is any lock on this table. If yes, the user should be able to only view the table contents and not modify.
    2) If there is no lock, then lock the table and go into change mode.
    3) On exiting from the program, unlock the table using the function module.
    4) more than one user can't modify the table just display.
    Note: If there is any lock, display message saying table is locked.
    Plz help me for this requirement.
    Thanks
    Nani

    Hello Nani
    Have a look at the lock object EMMARAE (<i>Lock MARA and MARM/MAKT exclusively</i>) in transaction SE11.
    Inspect the F1 help for field <b>Lock mode</b>:
    DE ENQMODE
    Short Text
         Lock mode
    Definition
         Defines how to synchronize table record access by several users.
    The following modes exist:
         Exclusive lock
             The locked data can be read or processed by one user only. A request
             for another exclusive lock or for a shared lock is rejected.
         Shared lock
             Several users can read the same data at the same time, but as soon
             as a user edits the data, a second user can no longer access this
             data. Requests for further shared locks are accepted, even if they
             are issued by different users, but exclusive locks are rejected.
         Exclusive but not cumulative lock
             Exclusive locks can be requested by the same transaction more than
             once and handled successively, but an exclusive but not cumulative
             lock can only be requested once by a given transaction. All other
             lock requests are rejected.
    If you want to lock a standard table search whether the table is used in lock objects (<i>Where-Used-List</i>). If it is a customer table you have to create your own lock object (including two function modules: one for enqueuing and the other for dequeuing).
    The lock modules can be found in menu <b>GoTo -> Lock Modules</b>.
    Given these lock modules the logic should be quite clear after starting the program:
    1. Request lock -> if successful, continue in Change mode; -> if failed, continue in Display mode
    2. Before leaving the report remove lock (note: no problem if no lock has been set in the beginning).
    Regards
      Uwe

  • Help on locking MySQL tables (many can read, but only one can write) Java

    Hi there,
    I have a question regarding locking of tables so that only one person can write to the file, but many are able to read the files (or tables entities).
    I am not sure if I need to lock the tables in my Java code or do I lock the tables within the MySQL syntax. I'm just a little confused on the matter.
    This java code is a working prototype of inserting a customer data into the database and that works fine. I just don't know how to implement it so that only one person can update the table at a time.
    Here is the Customer.java code that I have written.
    Help would be greatly appreciated, thanks so much.
    package business;
    //~--- non-JDK imports --------------------------------------------------------
    import shared.info.CustomerInfo;
    //~--- JDK imports ------------------------------------------------------------
    import java.sql.*;
    * @author
    public class Customer {
        static Connection    con  = DBConnection.getConnection();
        private CustomerInfo info = new CustomerInfo();
        private String               customerID;
        private String               firstName;
        private String               lastName;
        private String               email;
        private String               addressID;
        private String               homePhone;
        private String               workPhone;
        private String               unitNum;
        private String               streetNum;
        private String               streetName;
        private String               city;
        private String               provinceState;
        private String               country;
        private String               zipPostalCode;
        public Customer(String id) {
            try {
                PreparedStatement pstmt = con.prepareStatement("SELECT * FROM " +
                        "Customer NATURAL JOIN Address WHERE CustomerID = ?");
                pstmt.setString(1, id);
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                    customerID    = rs.getString("CustomerID");
                    firstName     = rs.getString("FirstName");
                    lastName      = rs.getString("LastName");
                    homePhone     = rs.getString("HomePhone");
                    workPhone     = rs.getString("WorkPhone");
                    email         = rs.getString("Email");
                    city          = rs.getString("City");
                    provinceState = rs.getString("ProvinceState");
                    country       = rs.getString("Country");
                    zipPostalCode = rs.getString("ZipPostalCode");
                    unitNum       = rs.getString("UnitNum");
                    streetNum     = rs.getString("StreetNum");
                    streetName    = rs.getString("StreetName");
                    addressID     = rs.getString("AddressId");
            } catch (SQLException e) {
                e.printStackTrace();
            info.setCustomerID(customerID);
            info.setFirstName(firstName);
            info.setLastName(lastName);
            info.setHomePhone(homePhone);
            info.setWorkPhone(workPhone);
            info.setEmail(email);
            info.setCity(city);
            info.setProvinceState(provinceState);
            info.setCountry(country);
            info.setZipPostalCode(zipPostalCode);
            info.setUnitNum(unitNum);
            info.setStreetNum(streetNum);
            info.setStreetName(streetName);
            info.setAddressID(addressID);
        public static void addCustomer(CustomerInfo cust) {
            try {
                int id = -1;
                PreparedStatement pstmt = con.prepareStatement("INSERT INTO Address" +
                        "(UnitNum, StreetNum, StreetName, City, ProvinceState, Country," +
                        " ZipPostalCode) VALUES(?, ?, ?, ?, ?, ?, ?)");
                pstmt.setString(1, cust.getUnitNum());
                pstmt.setString(2, cust.getStreetNum());
                pstmt.setString(3, cust.getStreetName());
                pstmt.setString(4, cust.getCity());
                pstmt.setString(5, cust.getProvinceState());
                pstmt.setString(6, cust.getCountry());
                pstmt.setString(7, cust.getZipPostalCode());
                pstmt.executeUpdate();
                ResultSet rs = pstmt.getGeneratedKeys();
                rs.next();
                id = rs.getInt(1);
                pstmt = con.prepareStatement("INSERT INTO Customer" +
                        "(FirstName, LastName, HomePhone, WorkPhone, Email, AddressID)"
                        + "VALUES(?, ?, ?, ?, ?, ?)");
                pstmt.setString(1, cust.getFirstName());
                pstmt.setString(2, cust.getLastName());
                pstmt.setString(3, cust.getHomePhone());
                pstmt.setString(4, cust.getWorkPhone());
                pstmt.setString(5, cust.getEmail());
                pstmt.setInt(6, id);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
        public void setFirstName(String newName) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET FirstName = ? WHERE CustomerID = ?");
                pstmt.setString(1, newName);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            firstName = newName;
        public void setLastName(String newName) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET LastName = ? WHERE CustomerID = ?");
                pstmt.setString(1, newName);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            lastName = newName;
        public String getFirstName() {
            return firstName;
        public String getLastName() {
            return lastName;
        public void setHomePhone(String number) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET HomePhone = ? WHERE CustomerID = ?");
                pstmt.setString(1, number);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            homePhone = number;
        public String getHomePhone() {
            return homePhone;
        public void setWorkPhone(String number) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer"
                                              + " SET WorkPhone = ? WHERE CustomerID = ?");
                pstmt.setString(1, number);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            workPhone = number;
        public String getWorkPhone() {
            return workPhone;
        public void setEmail(String email) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Customer" + " SET Email = ? WHERE CustomerID = ?");
                pstmt.setString(1, email);
                pstmt.setString(2, customerID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            this.email = email;
        public String getEmail() {
            return email;
        public void setUnitNum(String num) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET UnitNum = ? WHERE AddressId = ?");
                pstmt.setString(1, num);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            unitNum = num;
        public String getUnitNum() {
            return unitNum;
        public void setCity(String city) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET City = ? WHERE AddressId = ?");
                pstmt.setString(1, city);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            this.city = city;
        public String getCity() {
            return city;
        public void setStreetNum(String num) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address" + " SET StreetNum = ? WHERE AddressId = ?");
                pstmt.setString(1, num);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            streetNum = num;
        public String getStreetNum() {
            return streetNum;
        public void setStreetName(String name) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address"
                                              + " SET StreetName = ? WHERE AddressId = ?");
                pstmt.setString(1, name);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            streetName = name;
        public String getStreetName() {
            return streetName;
        public void setZipPostalCode(String code) {
            try {
                PreparedStatement pstmt = con.prepareStatement("UPDATE Address"
                                              + " SET ZipPostalCode = ? WHERE AddressId = ?");
                pstmt.setString(1, code);
                pstmt.setString(2, addressID);
                pstmt.executeUpdate();
            } catch (SQLException e) {
                e.printStackTrace();
            zipPostalCode = code;
        public String getZipPostalCode() {
            return zipPostalCode;
        public CustomerInfo getInfo(){
            return info;
        static void deleteCustomer(String customerId) {
            try{
                PreparedStatement pstmt = con.prepareStatement("DELETE FROM Customer" +
                        " WHERE CustomerId = ?");
                pstmt.setString(1, customerId);
                pstmt.executeUpdate();
            }catch(SQLException e){
                e.printStackTrace();
        static void updateCustomer(CustomerInfo custInf) {
            try{
                PreparedStatement pstmt = con.prepareStatement("UPDATE customer" +
                        " SET firstName = ?, SET lastName = ?," +
                        " SET homePhone = ?, SET workPhone = ?, SET email = ?" +
                        " WHERE CustomerId = ?");
                pstmt.setString(1, custInf.getFirstName());
                pstmt.setString(2, custInf.getLastName());
                pstmt.setString(3, custInf.getHomePhone());
                pstmt.setString(4, custInf.getWorkPhone());
                pstmt.setString(5, custInf.getEmail());
                pstmt.setString(6, custInf.getCustomerID());
                pstmt.executeUpdate();
                pstmt = con.prepareStatement("UPDATE address" +
                        " SET unitNum = ?, SET StreetNum = ?, SET StreetName = ?," +
                        " SET city = ?,SET Province = ?,SET country = ?,SET ZipPostalCode = ?" +
                        " WHERE AddressId = ?");
                pstmt.setString(1, custInf.getUnitNum());
                pstmt.setString(2, custInf.getStreetNum());
                pstmt.setString(3, custInf.getStreetName());
                pstmt.setString(4, custInf.getCity());
                pstmt.setString(5, custInf.getProvinceState());
                pstmt.setString(6, custInf.getCountry());
                pstmt.setString(7, custInf.getZipPostalCode());
                pstmt.setString(8, custInf.getAddressID());
                pstmt.executeUpdate();
            }catch(SQLException e){
                e.printStackTrace();
    }In addition, here is my customer sql table.
    -- Table structure for table `customer`
    DROP TABLE IF EXISTS `customer`;
    CREATE TABLE `customer` (
    `CustomerID` mediumint(9) NOT NULL auto_increment,
    `FirstName` varchar(20) NOT NULL,
    `LastName` varchar(20) NOT NULL,
    `HomePhone` varchar(11) NOT NULL,
    `WorkPhone` varchar(11) default NULL,
    `Email` varchar(20) NOT NULL,
    `AddressID` mediumint(9) default NULL,
    PRIMARY KEY (`CustomerID`),
    KEY `AddressID` (`AddressID`),
    CONSTRAINT `customer_ibfk_1` FOREIGN KEY (`AddressID`) REFERENCES `address` (`AddressID`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    -- Dumping data for table `customer`
    LOCK TABLES `customer` WRITE;
    /*!40000 ALTER TABLE `customer` DISABLE KEYS */;
    /*!40000 ALTER TABLE `customer` ENABLE KEYS */;
    UNLOCK TABLES;

    to the best of my knowledge, this is something related to the database and not the programming. If you'd want to be the only user to read and edit the table, speicify only one user with that privilege and make it password protected. User must enter the password to write to the tables.

  • Deadlock when updating different rows on a single table with one clustered index

    Deadlock when updating different rows on a single table with one clustered index. Can anyone explain why?
    <event name="xml_deadlock_report" package="sqlserver" timestamp="2014-07-30T06:12:17.839Z">
      <data name="xml_report">
        <value>
          <deadlock>
            <victim-list>
              <victimProcess id="process1209f498" />
            </victim-list>
            <process-list>
              <process id="process1209f498" taskpriority="0" logused="1260" waitresource="KEY: 8:72057654588604416 (8ceb12026762)" waittime="1396" ownerId="1145783115" transactionname="implicit_transaction"
    lasttranstarted="2014-07-30T02:12:16.430" XDES="0x3a2daa538" lockMode="X" schedulerid="46" kpid="7868" status="suspended" spid="262" sbid="0" ecid="0" priority="0"
    trancount="2" lastbatchstarted="2014-07-30T02:12:16.440" lastbatchcompleted="2014-07-30T02:12:16.437" lastattention="1900-01-01T00:00:00.437" clientapp="Internet Information Services" hostname="CHTWEB-CH2-11P"
    hostpid="12776" loginname="chatuser" isolationlevel="read uncommitted (1)" xactid="1145783115" currentdb="8" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058">
               <inputbuf>
    UPDATE analyst_monitor SET cam_status = N'4', cam_event_data = N'sales1', cam_event_time = current_timestamp , cam_modified_time = current_timestamp , cam_room = '' WHERE cam_analyst_name=N'ABCD' AND cam_window= 2   </inputbuf>
              </process>
              <process id="process9cba188" taskpriority="0" logused="2084" waitresource="KEY: 8:72057654588604416 (2280b457674a)" waittime="1397" ownerId="1145783104" transactionname="implicit_transaction"
    lasttranstarted="2014-07-30T02:12:16.427" XDES="0x909616d28" lockMode="X" schedulerid="23" kpid="8704" status="suspended" spid="155" sbid="0" ecid="0" priority="0"
    trancount="2" lastbatchstarted="2014-07-30T02:12:16.440" lastbatchcompleted="2014-07-30T02:12:16.437" lastattention="1900-01-01T00:00:00.437" clientapp="Internet Information Services" hostname="CHTWEB-CH2-11P"
    hostpid="12776" loginname="chatuser" isolationlevel="read uncommitted (1)" xactid="1145783104" currentdb="8" lockTimeout="4294967295" clientoption1="671088672" clientoption2="128058">
                <inputbuf>
    UPDATE analyst_monitor SET cam_status = N'4', cam_event_data = N'sales2', cam_event_time = current_timestamp , cam_modified_time = current_timestamp , cam_room = '' WHERE cam_analyst_name=N'12345' AND cam_window= 1   </inputbuf>
              </process>
            </process-list>
            <resource-list>
              <keylock hobtid="72057654588604416" dbid="8" objectname="CHAT.dbo.analyst_monitor" indexname="IX_Clust_scam_an_name_window" id="lock4befe1100" mode="X" associatedObjectId="72057654588604416">
                <owner-list>
                  <owner id="process9cba188" mode="X" />
                </owner-list>
                <waiter-list>
                  <waiter id="process1209f498" mode="X" requestType="wait" />
                </waiter-list>
              </keylock>
              <keylock hobtid="72057654588604416" dbid="8" objectname="CHAT.dbo.analyst_monitor" indexname="IX_Clust_scam_an_name_window" id="lock18ee1ab00" mode="X" associatedObjectId="72057654588604416">
                <owner-list>
                  <owner id="process1209f498" mode="X" />
                </owner-list>
                <waiter-list>
                  <waiter id="process9cba188" mode="X" requestType="wait" />
                </waiter-list>
              </keylock>
            </resource-list>
          </deadlock>
        </value>
      </data>
    </event>

    To be honest, I don't think the transaction is necessary, but the developers put it there anyway. The select statement will put the result cam_status
    into a variable, and then depends on its value, it will decide whether to execute the second update statement or not. I still can't upload the screen-shot, because it says it needs to verify my account at first. No clue at all. But it is very simple, just
    like:
    Clustered Index Update
    [analyst_monitor].[IX_Clust_scam_an_name_window]
    cost: 100%
    By the way, for some reason, I can't find the object based on the associatedObjectId listed in the XML
    <keylock hobtid="72057654588604416" dbid="8" objectname="CHAT.dbo.analyst_monitor"
    indexname="IX_Clust_scam_an_name_window" id="lock4befe1100" mode="X" associatedObjectId="72057654588604416">
    For example: 
    SELECT * FROM sys.partition WHERE hobt_id = 72057654588604416
    This return nothing. Not sure why.

  • URGENT:Update multiple rows of a table as a transaction

    Hi,
    I am trying to update mutliple rows in one table as a transaction, but only update on the last row is commited to database. Updates on the previous rows is not committed.
    I must be missing some thing which is obvious. Has any got a clueeeeeeeeeee?
    code:
    for (int i = 0; i < selectedFaultNumbers.length; i++) {
    String nationalFaultNumber = selectedFaultNumbers;
    String fault = nationalFaultNumber.substring(0,13);
    national_faultsRowSet2.setCommand("SELECT national_faults.national_fault_number, national_faults.status_id, national_faults.master_fault_number FROM national_faults WHERE national_faults.national_fault_number= '"+fault+"'");
    national_faultsRowSet2.execute();
    if (national_faultsRowSet2.next()) {
    national_faultsRowSet2.updateInt("status_id", FAULT_STATUS_ASSOCIATED);
    national_faultsRowSet2.updateString("master_fault_number",nationalfltno);
    national_faultsRowSet2.updateRow();
    national_faultsRowSet2.execute();
    Any help wil be GREATLY appreciated.
    Cheers
    kush

    Hi Giri,
    Thanks for getting back to me.
    If I understood correct, sample example updates a rowset which is bound to datatable and changes are committed to database using datatablemodel.
    In my case rowset is not bound to a datatable and user is not updating the rowset.
    PageBean has to update few rows in a table when a new row is inserted in to that table.
    Please correct me if I got it wrong. Is there any other solution ???
    Thanks very much
    kush

  • How to get which tables are being updated by running any transaction code

    Hi experts,
    please tell me how to find which system table are being updated after running any transaction code .
    please tell me the procedure to find that.
    Thanks & Regards,
    Yogesh

    Hi yogesh patil,
    for the dbtable..
    goto technical settings and activate the log...
    it will tells u..
    transaction...Table history (SCU3)
    Log data changes
    The logging flag defines whether changes to the data records of a table
    should be logged. If logging is activated, every change (with UPDATE,
    DELETE) to an existing data record by a user or an application program
    is recorded in a log table in the database.
    Note: Activating logging slows down accesses that change the table.
    First of all, a record must be written in the log table for each change.
    Secondly, many users access this log table in parallel. This could cause
    lock situations even though the users are working with different
    application tables.
    Dependencies
    Logging only takes place if parameter rec/client in the system profile
    is set correctly. Setting the flag on its own does not cause the table
    changes to be logged.
    The existing logs can be displayed with Transaction Table history (SCU3)
    Reward points if helpful

  • Urgent : update of table QALS  through transaction QA12 after save

    Hello Experts ,
      I need to update the table field SELHERST of standard table QALS through transaction QA12 after the save button is clicked  .
    I have implemented the exit QEVA0010 which is triggered after clicking the save button , and have put the update command there , followed by commit work statement .
    But it is not updating the table QALS .
    Thanks in advance ....

    When the SAVE button is pressed, SAP execute some checks and launch the update task, if you want that your changes are not overwritten by SAP you need to submit those for execution during update task.
    So you need to use instructions like
    - PERFORM ON COMMIT
    - CALL FUNCTION IN UPDATE TASK
    and execute the update in one of these. (Reference [Updates in the R/3 System (BC-CST-UP)|http://help.sap.com/printdocu/core/Print46c/en/data/pdf/BCCSTUP/BCCSTUP_PT.pdf])
    You may also try to force the update in the main program, declaring a pointer (field symbol) in the calling program data '(SAPMQEVA)QALS'  (But that's not very correct)
    Regards

Maybe you are looking for

  • Unable to close Safari pages. Have to hold power button to close out.

    This has happend 3 times now within the last week or so. Everytime it has happend, I was on "Myspace" and had other pages open. The red close button and the Home button are faded when this occours. The only way to close out is to hold the power butto

  • Barcode using flash - Denes, Pavel's examples use SVG, not flash

    Has anyone tried creating barcode using flash charts available in Apex ? I came across 2 examples, which are given below. These examples use SVG, but SVG is being retired by Adobe Denes Kubicek: Barcode ??? Pavel MAREK: Re: Barcodes in HTMLDB - solve

  • A700: 8gb of memory installed, only 4gb are being used

    The a700 that I purchased from lenovo.com was the top model (40244JU) in the a700 series and came with 8gb of memory installed.  The os system screen properly shows the 8gb of memory installed.  The bios screen shows only 4gb of memory installed, thu

  • Home Hub 5 problems with other router connected.

    So here's a bit of a strange one... I've had the HH5 connected as just a simple router (disabled both WiFi radios 2.4 and 5GHz) for about 4 or 5 months, with the HH5 plugged into my DIR-655 which I use for WiFi. Randomly on Friday my internet connect

  • Why are all my contacts gone

    my sister backed up her phone in icloud and now all my contacts are changed to hers. how do i get all my contacts back?