Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6550430

Accessing Access database via JDBC-ODBC bridge

    • Icon: Bug Bug
    • Resolution: Future Project
    • Icon: P5 P5
    • None
    • 6
    • core-libs

      FULL PRODUCT VERSION :
      java version "1.6.0"
      Java(TM) SE Runtime Environment (build 1.6.0-b105)
      Java HotSpot(TM) Client VM (build 1.6.0-b105, mixed mode, sharing)

      FULL OS VERSION :
      Microsoft Windows XP Professional Version 2002 Service Pack 2

      A DESCRIPTION OF THE PROBLEM :
      I have a class for querying an MS Access database. The database is queryied every one second in a separarate thread, when the user clicks on the "start" button. The program crashes when I call the query method from the run() or the action handler. In other cases works fine.

      THE PROBLEM WAS REPRODUCIBLE WITH -Xint FLAG: Yes

      THE PROBLEM WAS REPRODUCIBLE WITH -server FLAG: Did not try

      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      #
      # An unexpected error has been detected by Java Runtime Environment:
      #
      # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7c911010, pid=3176, tid=1080
      #
      # Java VM: Java HotSpot(TM) Client VM (1.6.0-b105 mixed mode, sharing)
      # Problematic frame:
      # C [ntdll.dll+0x1010]
      #
      # If you would like to submit a bug report, please visit:
      # http://java.sun.com/webapps/bugreport/crash.jsp
      #

      --------------- T H R E A D ---------------

      Current thread (0x07f93c00): JavaThread "Thread-2" [_thread_in_native, id=1080]

      siginfo: ExceptionCode=0xc0000005, reading address 0x00000018

      Registers:
      EAX=0x00000004, EBX=0x269b4e60, ECX=0x7ffd4000, EDX=0x00000004
      ESP=0x0301f908, EBP=0x0301f920, ESI=0x00000000, EDI=0x02e11348
      EIP=0x7c911010, EFLAGS=0x00010246

        Top of Stack: (sp=0x0301f908)
      0x0301f908: 74605a16 00000004 02e1136c 745d139f
      0x0301f918: 02e1136c 02e11348 0301f930 745d2c5d
      0x0301f928: 02e1136c 07f93ce8 0301f944 745d5fa0
      0x0301f938: 02e11348 74600000 00000001 0301f960
      0x0301f948: 745d740e 02e11348 0301f980 00000003
      0x0301f958: 07f91ff8 07f93ce8 0301f978 6d3f124e
      0x0301f968: 02e11348 0301f980 07f93c00 269b4e60
      0x0301f978: 0301f9bc 0091a430 00000000 0301f9d8

      Instructions: (pc=0x7c911010)
      0x7c911000: 90 90 90 90 90 64 8b 0d 18 00 00 00 8b 54 24 04
      0x7c911010: 83 7a 14 00 75 4f f0 ff 42 04 75 19 8b 41 24 89


      Stack: [0x02fd0000,0x03020000), sp=0x0301f908, free space=318k
      Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
      C [ntdll.dll+0x1010]
      C [ODBC32.dll+0x2c5d]
      C [ODBC32.dll+0x5fa0]
      C [ODBC32.dll+0x740e]
      C [JdbcOdbc.dll+0x124e]
      j sun.jdbc.odbc.JdbcOdbc.allocStmt(J[B)J+0
      j sun.jdbc.odbc.JdbcOdbc.SQLAllocStmt(J)J+47
      j sun.jdbc.odbc.JdbcOdbcConnection.createStatement(II)Ljava/sql/Statement;+27
      j sun.jdbc.odbc.JdbcOdbcConnection.createStatement()Ljava/sql/Statement;+7
      j Log.getErrorStatus()I+6
      j ThreadApp.run()V+30
      j java.lang.Thread.run()V+11
      v ~StubRoutines::call_stub

      Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
      j sun.jdbc.odbc.JdbcOdbc.allocStmt(J[B)J+0
      j sun.jdbc.odbc.JdbcOdbc.SQLAllocStmt(J)J+47
      j sun.jdbc.odbc.JdbcOdbcConnection.createStatement(II)Ljava/sql/Statement;+27
      j sun.jdbc.odbc.JdbcOdbcConnection.createStatement()Ljava/sql/Statement;+7
      j Log.getErrorStatus()I+6
      j ThreadApp.run()V+30
      j java.lang.Thread.run()V+11
      v ~StubRoutines::call_stub

      --------------- P R O C E S S ---------------

      Java Threads: ( => current thread )
      =>0x07f93c00 JavaThread "Thread-2" [_thread_in_native, id=1080]
        0x00296000 JavaThread "DestroyJavaVM" [_thread_blocked, id=2340]
        0x02b18800 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=4056]
        0x02b10800 JavaThread "AWT-Windows" daemon [_thread_in_native, id=2624]
        0x02b0fc00 JavaThread "AWT-Shutdown" [_thread_blocked, id=2648]
        0x02b0d400 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=2444]
        0x02a5cc00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=4020]
        0x02a57c00 JavaThread "CompilerThread0" daemon [_thread_blocked, id=3136]
        0x02a56800 JavaThread "Attach Listener" daemon [_thread_blocked, id=1624]
        0x02a55c00 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2744]
        0x02a51400 JavaThread "Finalizer" daemon [_thread_blocked, id=1644]
        0x02a4d000 JavaThread "Reference Handler" daemon [_thread_blocked, id=632]

      Other Threads:
        0x02a43c00 VMThread [id=944]
        0x02a77400 WatcherThread [id=2260]

      VM state:not at safepoint (normal execution)

      VM Mutex/Monitor currently owned by a thread: None

      Heap
       def new generation total 960K, used 292K [0x22990000, 0x22a90000, 0x22e70000)
        eden space 896K, 25% used [0x22990000, 0x229c91d8, 0x22a70000)
        from space 64K, 100% used [0x22a80000, 0x22a90000, 0x22a90000)
        to space 64K, 0% used [0x22a70000, 0x22a70000, 0x22a80000)
       tenured generation total 4096K, used 341K [0x22e70000, 0x23270000, 0x26990000)
         the space 4096K, 8% used [0x22e70000, 0x22ec5770, 0x22ec5800, 0x23270000)
       compacting perm gen total 12288K, used 607K [0x26990000, 0x27590000, 0x2a990000)
         the space 12288K, 4% used [0x26990000, 0x26a27d10, 0x26a27e00, 0x27590000)
          ro space 8192K, 62% used [0x2a990000, 0x2ae8b9c8, 0x2ae8ba00, 0x2b190000)
          rw space 12288K, 52% used [0x2b190000, 0x2b7ce348, 0x2b7ce400, 0x2bd90000)

      Dynamic libraries:
      0x00400000 - 0x00423000 C:\WINXP\system32\java.exe
      0x7c910000 - 0x7c9c7000 C:\WINXP\system32\ntdll.dll
      0x7c800000 - 0x7c906000 C:\WINXP\system32\kernel32.dll
      0x77da0000 - 0x77e4a000 C:\WINXP\system32\ADVAPI32.dll
      0x77e50000 - 0x77ee1000 C:\WINXP\system32\RPCRT4.dll
      0x7c340000 - 0x7c396000 C:\Programme\Java\jre1.6.0\bin\msvcr71.dll
      0x6d7c0000 - 0x6da07000 C:\Programme\Java\jre1.6.0\bin\client\jvm.dll
      0x77d10000 - 0x77da0000 C:\WINXP\system32\USER32.dll
      0x77ef0000 - 0x77f37000 C:\WINXP\system32\GDI32.dll
      0x76af0000 - 0x76b1e000 C:\WINXP\system32\WINMM.dll
      0x76330000 - 0x7634d000 C:\WINXP\system32\IMM32.DLL
      0x6d310000 - 0x6d318000 C:\Programme\Java\jre1.6.0\bin\hpi.dll
      0x76bb0000 - 0x76bbb000 C:\WINXP\system32\PSAPI.DLL
      0x6d770000 - 0x6d77c000 C:\Programme\Java\jre1.6.0\bin\verify.dll
      0x6d3b0000 - 0x6d3cf000 C:\Programme\Java\jre1.6.0\bin\java.dll
      0x6d7b0000 - 0x6d7bf000 C:\Programme\Java\jre1.6.0\bin\zip.dll
      0x6d000000 - 0x6d1c3000 C:\Programme\Java\jre1.6.0\bin\awt.dll
      0x72f70000 - 0x72f96000 C:\WINXP\system32\WINSPOOL.DRV
      0x77be0000 - 0x77c38000 C:\WINXP\system32\msvcrt.dll
      0x774b0000 - 0x775ed000 C:\WINXP\system32\ole32.dll
      0x6d3f0000 - 0x6d3fd000 C:\Programme\Java\jre1.6.0\bin\JdbcOdbc.dll
      0x745d0000 - 0x7460d000 C:\WINXP\system32\ODBC32.dll
      0x5d450000 - 0x5d4ea000 C:\WINXP\system32\COMCTL32.dll
      0x7c9d0000 - 0x7d1ef000 C:\WINXP\system32\SHELL32.dll
      0x77f40000 - 0x77fb6000 C:\WINXP\system32\SHLWAPI.dll
      0x76350000 - 0x7639a000 C:\WINXP\system32\comdlg32.dll
      0x773a0000 - 0x774a3000 C:\WINXP\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll
      0x20000000 - 0x20019000 C:\WINXP\system32\odbcint.dll
      0x77fc0000 - 0x77fd1000 C:\WINXP\system32\Secur32.dll
      0x5b0f0000 - 0x5b128000 C:\WINXP\system32\uxtheme.dll
      0x736d0000 - 0x73719000 C:\WINXP\system32\ddraw.dll
      0x73b30000 - 0x73b36000 C:\WINXP\system32\DCIMAN32.dll
      0x6d2b0000 - 0x6d303000 C:\Programme\Java\jre1.6.0\bin\fontmanager.dll
      0x746a0000 - 0x746eb000 C:\WINXP\system32\MSCTF.dll
      0x75250000 - 0x7527e000 C:\WINXP\system32\msctfime.ime
      0x6d570000 - 0x6d583000 C:\Programme\Java\jre1.6.0\bin\net.dll
      0x71a10000 - 0x71a27000 C:\WINXP\system32\WS2_32.dll
      0x71a00000 - 0x71a08000 C:\WINXP\system32\WS2HELP.dll
      0x6d590000 - 0x6d599000 C:\Programme\Java\jre1.6.0\bin\nio.dll

      VM Arguments:
      java_command: ThreadApp
      Launcher Type: SUN_STANDARD

      Environment Variables:
      PATH=x:\cPerl\bin;C:\Programme\ActiveState Komodo 3.5\;C:\WINXP\system32;C:\WINXP\HPC\CAPM;C:\WINXP;C:\WINXP\system32\Wbem;C:\WINXP\Tools;C:\Programme\Microsoft SQL Server\80\Tools\Binn\;C:\PROGRA~1\CA\SHARED~1\SCANEN~1;C:\PROGRA~1\CA\ETRUST~1;C:\Programme\Winzip\;C:\Programme\UltraEdit;C:\Programme\PerlIDE\;C:\Programme\Java\jdk1.6.0\bin;C:\Programme\CVSNTUSERNAME=N535835
      OS=Windows_NT
      PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 1, GenuineIntel



      --------------- S Y S T E M ---------------

      OS: Windows XP Build 2600 Service Pack 2

      CPU:total 1 family 15, cmov, cx8, fxsr, mmx, sse, sse2

      Memory: 4k page, physical 1038832k(327720k free), swap 1717436k(998512k free)

      vm_info: Java HotSpot(TM) Client VM (1.6.0-b105) for windows-x86, built on Nov 29 2006 00:48:48 by "java_re" with unknown MS VC++:1310



      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      The main program:
      ================

      import java.awt.event.*;
      import java.awt.*;
      import javax.swing.*;

      class ThreadApp extends JFrame implements ActionListener, Runnable{
          JButton startButton = new JButton("Start");
          JButton stopButton = new JButton("Stop");
          JPanel mainPanel = new JPanel();

          private Thread runner;
          private boolean stopThread;

          Log log;

          public ThreadApp( Log log )
          {
              super("Thread App");

              this.log = log;


              setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              setBounds(300, 300, 150, 65);
              setResizable( false );

              startButton.addActionListener( this );
              stopButton.addActionListener( this );
              stopButton.setEnabled( false );

              mainPanel.add( startButton );
              mainPanel.add( stopButton );
              add( mainPanel );

              setVisible(true);
          }


          public void actionPerformed(ActionEvent evt)
          {
              Object source = evt.getSource();

              if ( source == startButton ) {
                  startButton.setEnabled( false );
                  stopButton.setEnabled( true );

                  runner = new Thread( this );
                  runner.start();

              } else if ( source == stopButton ) {
                  stopButton.setEnabled( false );
                  startButton.setEnabled( true );
                  stopThread = true;
              }
          }

          public void run(){
              int timeCounter = 0;
              int errorStatus = 0;

              stopThread = false;

              while ( !stopThread && errorStatus == 0 ) {
                  try{

                      Thread.sleep( 1000 );
                      errorStatus = log.getErrorStatus();

                  } catch (InterruptedException ie) {
                      // do nothing
                  }
              }

              if ( errorStatus != 0 ) {
                  JOptionPane.showMessageDialog( this,
                                                "Hiba!",
                                                "ThreadApp",
                                                JOptionPane.ERROR_MESSAGE
                                               );
              }

              stopThread = false;
          }

          public static void main(String[] arguments)
          {
             Log log = new Log();
             ThreadApp tanulo = new ThreadApp( log );
             log.done();
          }
      }



      The class for accessing the database:
      ==============================

      import java.sql.*;

      public class Log
      {
          Connection conn;

          public Log() {
              try {
                 Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                 conn = DriverManager.getConnection( "jdbc:odbc:Log", "", "");
              } catch ( ClassNotFoundException s ) {
                     System.out.println( "Class not found: " + s.toString() );
              } catch ( SQLException s ){
                     System.out.println( "SQL Error: " + s.toString() + " "
                                         + s.getErrorCode() + " " + s.getSQLState());
              }
          }

          public int getErrorStatus() {
             int status = 1;

             try {
                Statement st = conn.createStatement();
                System.out.println( "eddig" );
                ResultSet rec = st.executeQuery( "SELECT error FROM log" );
                while ( rec.next() ){
                    status = rec.getInt( 1 );
                }
             } catch (SQLException s) {
                   System.out.println( "SQL Error: "
                                       + s.toString()
                                       + " "
                                       + s.getErrorCode() + " " + s.getSQLState());
             }

             return status;
          }

          public void done() {
              try {
                  conn.close();
              } catch ( SQLException s ){
                  System.out.println( "SQL Error: " + s.toString() + " "
                                      + s.getErrorCode() + " " + s.getSQLState());
              }
          }

      /* public static void main( String[] args ) {
              Log log = new Log();
              System.out.println( log.getErrorStatus() );
              log.done();
          } */

      }


      ---------- END SOURCE ----------

            lancea Lance Andersen
            ryeung Roger Yeung (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: