在一个工程中,使用了jdbc加上oracle的jdbc驱动完成了访问oracle(8或者9)数据库的部分,由于需要保露c++、c的接口所以业务逻辑采用从c++编写。
在经历了一番摸索后,还是有一个很苦恼的问题的困扰我,还是先把代码粘上来,
1.5 JDK
java:public int ChangeConnection(String IPString, String PortString, String DBName, String UserName, String Pwd)
{
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
thin_con = DriverManager.getConnection(connectionString, UserName, Pwd);
///OUT
stmt = thin_con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
rel_stmt = thin_con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
list_stmt = thin_con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
upDate_stmt = thin_con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
connectionString = recorder;

return 1;
} catch (Exception e) {
err = e.toString();
System.out.println(err);
return -1;

}c++:
获取jni,或者attach一个jni,然后调用以上的方法。出现的问题就是,在vc中完全编译后,启动会成功过去,但是去bin目录下面,启动生成的exe文件就会有可能出现访问冲突的错误,直接退出程序,而且有时候是直接在bin目录中启动exe就是正常的,启动几次后会出现同样的错误,但是只要在vc中启动,只要第一次是正确的,就永远是正确的,无论多少次,而且,当bin/exe启动失败后,vc的也将永远的启动失败,即使是debug模式也错误,只有重新的完全编译,而且完全编译后的bin/exe也不能保证会正确,或者永远正确,有个幸运的版本可以永远正确,可是当拷贝给同事的时候又出现同样的错误了。
后来验证是在java代码中的OUT前的那条语句出错的。之间都是好好的。
具体的错误如下(有点长),敬请专家指教:
#
# An unexpected error has been detected by HotSpot Virtual Machine:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d6c8b19, pid=1188, tid=848
#
# Java VM: Java HotSpot(TM) Client VM (1.5.0_01-b08 mixed mode, sharing)
# Problematic frame:
# V  [jvm.dll+0x88b19]
#---------------  T H R E A D  ---------------Current thread (0x00a13580):  JavaThread "main" [_thread_in_vm, id=848]siginfo: ExceptionCode=0xc0000005, reading address 0x0099f000Registers:
EAX=0x00000006, EBX=0x0012f630, ECX=0x0099f000, EDX=0x2b416138
ESP=0x0012f368, EBP=0x0012f37c, ESI=0x00000052, EDI=0x00a13580
EIP=0x6d6c8b19, EFLAGS=0x00010246Top of Stack: (sp=0x0012f368)
0x0012f368:   0000048c 00a1363c 0099f000 0012f384
0x0012f378:   0012f384 0012f5e0 6d4c5973 00a13580
0x0012f388:   0099f000 00000052 0012f630 00a13580
0x0012f398:   2ad4cfe0 2b641e50 0012f618 0012f538
0x0012f3a8:   00a13580 00a13140 00a14c00 00a14c3c
0x0012f3b8:   00a14ff4 0012fc20 0012f540 01457510
0x0012f3c8:   0012f40c 6d71481d 0000000b 00000000
0x0012f3d8:   0012f474 00000000 00a14c20 00a13580 Instructions: (pc=0x6d6c8b19)
0x6d6c8b09:   7d 08 e8 96 7a fb ff 8b 4d 0c 8b 75 10 8b 5d 14
0x6d6c8b19:   8b 01 c1 ee 02 83 3d d8 69 7a 6d 00 8b 50 04 74 
Stack: [0x00030000,0x00130000),  sp=0x0012f368,  free space=1020k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [jvm.dll+0x88b19]
C  [net.dll+0x5973]
j  java.net.PlainSocketImpl.socketConnect(Ljava/net/InetAddress;II)V+0
j  java.net.PlainSocketImpl.doConnect(Ljava/net/InetAddress;II)V+10
j  java.net.PlainSocketImpl.connectToAddress(Ljava/net/InetAddress;II)V+23
j  java.net.PlainSocketImpl.connect(Ljava/net/SocketAddress;I)V+71
j  java.net.SocksSocketImpl.connect(Ljava/net/SocketAddress;I)V+332
j  java.net.Socket.connect(Ljava/net/SocketAddress;I)V+165
j  java.net.Socket.connect(Ljava/net/SocketAddress;)V+3
j  java.net.Socket.<init>(Ljava/net/SocketAddress;Ljava/net/SocketAddress;Z)V+95
j  java.net.Socket.<init>(Ljava/lang/String;I)V+38
j  oracle.net.nt.TcpNTAdapter.connect()V+13
j  oracle.net.nt.ConnOption.connect()V+12
j  oracle.net.nt.ConnStrategy.execute()Loracle/net/nt/ConnOption;+24
j  oracle.net.resolver.AddrResolution.resolveAndExecute(Ljava/lang/String;)Loracle/net/nt/ConnOption;+91
j  oracle.net.ns.NSProtocol.establishConnection(Ljava/lang/String;)Loracle/net/ns/SessionAtts;+9
j  oracle.net.ns.NSProtocol.connect(Ljava/lang/String;Ljava/util/Properties;)V+127
j  oracle.jdbc.ttc7.TTC7Protocol.connect(Ljava/lang/String;Ljava/util/Properties;)V+31
j  oracle.jdbc.ttc7.TTC7Protocol.logon(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)Loracle/jdbc/dbaccess/DBConversion;+58
j  oracle.jdbc.driver.OracleConnection.<init>(Loracle/jdbc/dbaccess/DBAccess;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V+246
j  oracle.jdbc.driver.OracleDriver.getConnectionInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+352
j  oracle.jdbc.driver.OracleDriver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+522
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/util/Properties;Ljava/lang/ClassLoader;)Ljava/sql/Connection;+165
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;+41
j  DiscoverUser.ChangeConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I+289
v  ~StubRoutines::call_stub
V  [jvm.dll+0x8176e]
V  [jvm.dll+0xd481d]
V  [jvm.dll+0x8163f]
V  [jvm.dll+0x86429]
C  [discover.dll+0x2ee3a]
C  [discover.dll+0x2e6ce]
C  [discover.dll+0x4a8c]
C  [DiscoverSTest.exe+0x109a]
C  [DiscoverSTest.exe+0x1d59]Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  java.net.PlainSocketImpl.socketConnect(Ljava/net/InetAddress;II)V+0
j  java.net.PlainSocketImpl.doConnect(Ljava/net/InetAddress;II)V+10
j  java.net.PlainSocketImpl.connectToAddress(Ljava/net/InetAddress;II)V+23
j  java.net.PlainSocketImpl.connect(Ljava/net/SocketAddress;I)V+71
j  java.net.SocksSocketImpl.connect(Ljava/net/SocketAddress;I)V+332
j  java.net.Socket.connect(Ljava/net/SocketAddress;I)V+165
j  java.net.Socket.connect(Ljava/net/SocketAddress;)V+3
j  java.net.Socket.<init>(Ljava/net/SocketAddress;Ljava/net/SocketAddress;Z)V+95
j  java.net.Socket.<init>(Ljava/lang/String;I)V+38
j  oracle.net.nt.TcpNTAdapter.connect()V+13
j  oracle.net.nt.ConnOption.connect()V+12
j  oracle.net.nt.ConnStrategy.execute()Loracle/net/nt/ConnOption;+24
j  oracle.net.resolver.AddrResolution.resolveAndExecute(Ljava/lang/String;)Loracle/net/nt/ConnOption;+91
j  oracle.net.ns.NSProtocol.establishConnection(Ljava/lang/String;)Loracle/net/ns/SessionAtts;+9
j  oracle.net.ns.NSProtocol.connect(Ljava/lang/String;Ljava/util/Properties;)V+127
j  oracle.jdbc.ttc7.TTC7Protocol.connect(Ljava/lang/String;Ljava/util/Properties;)V+31
j  oracle.jdbc.ttc7.TTC7Protocol.logon(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)Loracle/jdbc/dbaccess/DBConversion;+58
j  oracle.jdbc.driver.OracleConnection.<init>(Loracle/jdbc/dbaccess/DBAccess;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)V+246
j  oracle.jdbc.driver.OracleDriver.getConnectionInstance(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+352
j  oracle.jdbc.driver.OracleDriver.connect(Ljava/lang/String;Ljava/util/Properties;)Ljava/sql/Connection;+522
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/util/Properties;Ljava/lang/ClassLoader;)Ljava/sql/Connection;+165
j  java.sql.DriverManager.getConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/sql/Connection;+41
j  DiscoverUser.ChangeConnection(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I+289
v  ~StubRoutines::call_stub

解决方案 »

  1.   

    补充错误信息:---------------  P R O C E S S  ---------------Java Threads: ( => current thread )
      0x00a21b70 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=3244]
      0x00a1f310 JavaThread "CompilerThread0" daemon [_thread_blocked, id=4076]
      0x00a1e170 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=3544]
      0x00a1d4c0 JavaThread "Finalizer" daemon [_thread_blocked, id=3296]
      0x00a1c1b0 JavaThread "Reference Handler" daemon [_thread_blocked, id=3284]
    =>0x00a13580 JavaThread "main" [_thread_in_vm, id=848]Other Threads:
      0x00a1b370 VMThread [id=1000]
      0x00a226a0 WatcherThread [id=804]VM state:not at safepoint (normal execution)VM Mutex/Monitor currently owned by a thread: NoneHeap
     def new generation   total 576K, used 544K [0x22bd0000, 0x22c70000, 0x230b0000)
      eden space 512K,  93% used [0x22bd0000, 0x22c48320, 0x22c50000)
      from space 64K, 100% used [0x22c60000, 0x22c70000, 0x22c70000)
      to   space 64K,   0% used [0x22c50000, 0x22c50000, 0x22c60000)
     tenured generation   total 1408K, used 71K [0x230b0000, 0x23210000, 0x26bd0000)
       the space 1408K,   5% used [0x230b0000, 0x230c1dc0, 0x230c1e00, 0x23210000)
     compacting perm gen  total 8192K, used 963K [0x26bd0000, 0x273d0000, 0x2abd0000)
       the space 8192K,  11% used [0x26bd0000, 0x26cc0d88, 0x26cc0e00, 0x273d0000)
        ro space 8192K,  62% used [0x2abd0000, 0x2b0d7d30, 0x2b0d7e00, 0x2b3d0000)
        rw space 12288K,  46% used [0x2b3d0000, 0x2b95c8a0, 0x2b95ca00, 0x2bfd0000)Dynamic libraries:
    0x00400000 - 0x0042b000  F:\Discovery1.0\ServiceDiscover_ForSys20070831\bin\DiscoverSTest.exe
    0x7c920000 - 0x7c9b4000  C:\WINDOWS\system32\ntdll.dll
    0x7c800000 - 0x7c91c000  C:\WINDOWS\system32\kernel32.dll
    0x10000000 - 0x10094000  F:\Discovery1.0\ServiceDiscover_ForSys20070831\bin\discover.dll
    0x00370000 - 0x003a3000  F:\Discovery1.0\ServiceDiscover_ForSys20070831\bin\ArrayDLL.dll
    0x6d640000 - 0x6d7c5000  C:\Program Files\Java\jre1.5.0_01\bin\client\jvm.dll
    0x77d10000 - 0x77d9f000  C:\WINDOWS\system32\USER32.dll
    0x77ef0000 - 0x77f36000  C:\WINDOWS\system32\GDI32.dll
    0x77da0000 - 0x77e49000  C:\WINDOWS\system32\ADVAPI32.dll
    0x77e50000 - 0x77ee1000  C:\WINDOWS\system32\RPCRT4.dll
    0x76b10000 - 0x76b3a000  C:\WINDOWS\system32\WINMM.dll
    0x77be0000 - 0x77c38000  C:\WINDOWS\system32\MSVCRT.dll
    0x76990000 - 0x76acc000  C:\WINDOWS\system32\ole32.dll
    0x770f0000 - 0x7717c000  C:\WINDOWS\system32\OLEAUT32.dll
    0x71a20000 - 0x71a37000  C:\WINDOWS\system32\WS2_32.dll
    0x71a10000 - 0x71a18000  C:\WINDOWS\system32\WS2HELP.dll
    0x76300000 - 0x7631d000  C:\WINDOWS\system32\IMM32.DLL
    0x62c20000 - 0x62c29000  C:\WINDOWS\system32\LPK.DLL
    0x73fa0000 - 0x7400b000  C:\WINDOWS\system32\USP10.dll
    0x5adc0000 - 0x5adf7000  C:\WINDOWS\system32\uxtheme.dll
    0x74680000 - 0x746cb000  C:\WINDOWS\system32\MSCTF.dll
    0x71a90000 - 0x71aa2000  C:\WINDOWS\system32\mpr.dll
    0x61410000 - 0x61534000  C:\WINDOWS\system32\urlmon.dll
    0x77f40000 - 0x77fb6000  C:\WINDOWS\system32\SHLWAPI.dll
    0x5dca0000 - 0x5dce5000  C:\WINDOWS\system32\iertutil.dll
    0x77180000 - 0x77282000  C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
    0x00e00000 - 0x00ece000  C:\WINDOWS\system32\wininet.dll
    0x00dc0000 - 0x00dc9000  C:\WINDOWS\system32\Normaliz.dll
    0x6d280000 - 0x6d288000  C:\Program Files\Java\jre1.5.0_01\bin\hpi.dll
    0x76bc0000 - 0x76bcb000  C:\WINDOWS\system32\PSAPI.DLL
    0x6d610000 - 0x6d61c000  C:\Program Files\Java\jre1.5.0_01\bin\verify.dll
    0x6d300000 - 0x6d31d000  C:\Program Files\Java\jre1.5.0_01\bin\java.dll
    0x6d630000 - 0x6d63f000  C:\Program Files\Java\jre1.5.0_01\bin\zip.dll
    0x6d4c0000 - 0x6d4d3000  C:\Program Files\Java\jre1.5.0_01\bin\net.dll
    0x03d60000 - 0x03d66000  C:\Program Files\Baidu\Disk Search\DiskSearchServiceStub.dll
    0x77fc0000 - 0x77fd1000  C:\WINDOWS\system32\Secur32.dll
    0x719c0000 - 0x719fe000  C:\WINDOWS\system32\mswsock.dll
    0x60fd0000 - 0x61025000  C:\WINDOWS\system32\hnetcfg.dll
    0x71a00000 - 0x71a08000  C:\WINDOWS\System32\wshtcpip.dll
    0x76ef0000 - 0x76f17000  C:\WINDOWS\system32\DNSAPI.dll
    0x03db0000 - 0x03dc8000  C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 7.0\dnsq.dll
    0x76d30000 - 0x76d48000  C:\WINDOWS\system32\iphlpapi.dll
    0x76f80000 - 0x76f88000  C:\WINDOWS\System32\winrnr.dll
    0x76f30000 - 0x76f5c000  C:\WINDOWS\system32\WLDAP32.dll
    0x03e10000 - 0x03e27000  C:\Program Files\Kaspersky Lab\Kaspersky Internet Security 7.0\miscr3.dll
    0x76f90000 - 0x76f96000  C:\WINDOWS\system32\rasadhlp.dll
    0x773a0000 - 0x77b91000  C:\WINDOWS\system32\SHELL32.dll
    0x5d170000 - 0x5d207000  C:\WINDOWS\system32\comctl32.dllVM Arguments:
    jvm_args: -Djavacompiler = NONE
    java_command: <unknown>Environment Variables:
    JAVA_HOME=C:\Program Files\Java\jdk1.5.0_01
    CLASSPATH=C:\mule133\lib\boot\mule-module-boot.jar;C:\mule133\lib\user;
    PATH=E:\oracle\ora81\bin;C:\Program Files\Oracle\jre\1.1.7\bin;C:\Program Files\Java\jdk1.5.0_01\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Rational\common;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\mule133\bin;C:\maven-2.0.6\bin;D:\ZHXT\GISII\bin;<DEFAULTINSTALLPATH>\BIN;C:\Program Files\Java\jre1.5.0_01\bin\client;D:\internet28\tool\SysinternalsSuite;C:\Program Files\Java\jdk1.5.0_01\bin;C:\Program Files\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files\Microsoft Visual Studio\Common\Tools;C:\Program Files\Microsoft Visual Studio\VC98\bin;D:\Program Files\BCGSoft\BCGControlBarPro\Bin;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin;C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;C:\mule133\bin;D:\ZHXT\GISII\bin;D:\ZHXT\MGSII\bin
    USERNAME=lrq-506
    OS=Windows_NT
    PROCESSOR_IDENTIFIER=x86 Family 15 Model 3 Stepping 4, GenuineIntel
    ---------------  S Y S T E M  ---------------OS: Windows XP Build 2600 Service Pack 2CPU:total 2 family 15, cmov, cx8, fxsr, mmx, sse, sse2, htMemory: 4k page, physical 1048008k(267868k free), swap 4093808k(3109212k free)vm_info: Java HotSpot(TM) Client VM (1.5.0_01-b08) for windows-x86, built on Dec  6 2004 19:51:00 by "java_re" with MS VC++ 6.0
      

  2.   

    想问问 : 如果改用其它方式调用JAVA对你的项目影响大吗?
      

  3.   


    问题是目前已经是采用了java的数据访问,同时上层需要提供c/c++的接口,那还有什么其他的调用方式?