Uploaded image for project: 'Torque'
  1. Torque
  2. TORQUE-53

Inserting wrong data if data type is Double and 0(zero) is the last digit

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.2
    • 3.3-RC3
    • Runtime, Village
    • None
    • Windows NT

    Description

      Problem: Torque is inserting wrong data in the database for Double type.

      Database description
      ~~~~~~~~~~~~~~~~~
      Database: Oracle 10g
      Oracle JDBC version: 10.2.0.1.0
      Table Name: Bank_Account
      Column Name: Current_Balance
      Column dataType: NUMBER(15,4)

      When I am trying to enter a value new Double(1234567890) it insert/update 12.3456 in the database. This happens only if the number of digits are more than 7 and last digit is 0(zero).

      I have tried updating using directly PreparedStatement and it just worked fine. Problem comes only with Torque.

      Following is the program I have used for varification:
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      <Code>
      ............
      public static void main(String argv[]) {
      TorqueInitializer.init();
      Connection db_connection = null;

      db_connection = Common.getConnection();

      if (db_connection == null)

      { System.out.println("Unable to get dbConnection"); }

      try {
      BankAccount bankAccount = showCurrentBalance(db_connection);
      long value = 12345l;
      for (int i = 5; i < 11; i++, value = ((value * 10) + i))

      { System.out.println("Value=" + value); System.out.print("<Before update> "); bankAccount = showCurrentBalance(db_connection); if (updateUsingPrepStat) updateCurrentBalanceUsingPStat(db_connection, new Double( value * 10)); else updateCurrentBalanceUsingTorque(bankAccount, db_connection, new Double(value * 10)); System.out.print("<After update> "); bankAccount = showCurrentBalance(db_connection); }

      } catch (Exception e)

      { e.printStackTrace(); } finally {

      if (db_connection != null)
      try { db_connection.close(); } catch (SQLException e) { e.printStackTrace(); }
      }
      }

      public static BankAccount showCurrentBalance(Connection db_connection) {
      try { Criteria c = new Criteria(); c.add(BankAccountPeer.BANK_ACCOUNT_ID, new Long(1523764)); List list = BankAccountPeer.doSelect(c, db_connection); BankAccount bankAccount = (BankAccount) list.get(0); System.out.println("Current account balance: " + bankAccount.getCurrentBalance()); return bankAccount; } catch (TorqueException e) { e.printStackTrace(); }

      return null;
      }

      public static void updateCurrentBalanceUsingTorque(BankAccount bankAccount,
      Connection db_connection, Double value) throws Exception

      { bankAccount.setCurrentBalance(value); bankAccount.save(db_connection, "ibdv70"); }

      ............
      </Code

      Attachments

        Activity

          People

            monroe CG Monroe
            spandey1982 Sudhakar Pandey
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: