关于jni的一个问题

Joyyu 2004-09-23 04:59:51
碰到一问题:
我的java程序里是访问数据库的静态方法,java程序调试已经通过了,测试数据也正确
在c程序中调用java程序时,使用的是GetStaticMethodID调用的:

java部分代码:
class.forname("oracle.lite.poljdbc.POLJDBCDriver");//这一句已经过了
System.out.println("test ---------1");
conn=DriverManager.getConnection("jdbc:polite:polite","system","manager");//这句就过不了
System.out.println("test ---------2");

jni打印如下:
test ---------1
[Dynamic-linking native method java.sql.DriverManager.getCallerClassLoader ... JNI]
[Dynamic-linking native method java.lang.Throwable.fillInStackTrace ... JNI]
....//后面就是我其他的返回了


不知道哪位大侠能够帮我解决一下问题,非常感谢!!
...全文
244 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
Joyyu 2004-09-24
  • 打赏
  • 举报
回复
我用的是oracle lite的数据库,我看看把里面的包都导进来试试看
cpunion 2004-09-24
  • 打赏
  • 举报
回复
这是我把包路径去掉以后的输出:

[Dynamic-linking native method java.lang.Package.getSystemPackage0 ... JNI]
[Dynamic-linking native method java.util.jar.JarFile.getMetaInfEntryNames ... JNI]

我把我的jdbc import进来好像没有影响。你的出错信息跟我的不一样。我这边的oracle数据库好像没有你这个驱动。
cpuni0n 2004-09-24
  • 打赏
  • 举报
回复
getConnection输出内容比较多,我这里是这样的:

[Dynamic-linking native method java.sql.DriverManager.getCallerClassLoader ... JNI]
[Dynamic-linking native method java.net.InetAddress.init ... JNI]
[Dynamic-linking native method java.io.FileInputStream.available ... JNI]
[Dynamic-linking native method java.net.InetAddressImplFactory.isIPv6Supported ... JNI]
[Dynamic-linking native method java.net.Inet4Address.init ... JNI]
[Dynamic-linking native method java.net.PlainSocketImpl.initProto ... JNI]
[Dynamic-linking native method java.net.PlainSocketImpl.socketCreate ... JNI]
[Dynamic-linking native method java.net.PlainSocketImpl.socketBind ... JNI]
[Dynamic-linking native method java.net.PlainSocketImpl.socketConnect ... JNI]
[Dynamic-linking native method java.net.PlainSocketImpl.socketSetOption ... JNI]
[Dynamic-linking native method java.net.SocketInputStream.init ... JNI]
[Dynamic-linking native method java.net.SocketOutputStream.init ... JNI]
[Dynamic-linking native method java.net.SocketOutputStream.socketWrite0 ... JNI]
[Dynamic-linking native method java.net.SocketInputStream.socketRead0 ... JNI]

如果你没有这么多我想可能是找不到包吧。

F:\\OraHome1\\Mobile\\classes\\OLITE40.JAR这个路径是正确的吗?
cpuni0n 2004-09-24
  • 打赏
  • 举报
回复
啊哟。兄弟我找到原因了,是你的classpath问题。

options[3].optionString = "-Xbootclasspath:C:\\soft\\j2sdk1.4.2_04\\jre\\lib\\rt.jar;C:\\soft\\j2sdk1.4.2_04\\jre\\lib\\ext\\pg74.1jdbc3.jar";

我这一行是后来修改的,我把pgsql的jdbc包加上就可以了。
cpuni0n 2004-09-24
  • 打赏
  • 举报
回复
哎。。。测试结果跟你一样,一到DriverManager.getConnection就没了,没有异常。。。
cpunion 2004-09-24
  • 打赏
  • 举报
回复
另外,你这一行java代码:
import oracle.lite.poljdbc.POLJDBCDriver;

我记得大多数数据库的jdbc驱动文档都说明了,不要这么直接调用,而只要在Class.forName中加载就可以了。你去掉这一行看看。
cpunion 2004-09-24
  • 打赏
  • 举报
回复
我连接到我的postgreSQL上测试一下看看。
cpunion 2004-09-24
  • 打赏
  • 举报
回复
我测试的情况下,没有什么问题。你的delete函数返回的是int,你使用CallStaticBooleanMethod来调用也没有问题,我都测试通过了。很奇怪的问题。
cpunion 2004-09-24
  • 打赏
  • 举报
回复
不是吧。。。。不过我没有oracle lite数据库,没法测试了。
Joyyu 2004-09-24
  • 打赏
  • 举报
回复
还是不行,把其他的jar包导入后,到
[Dynamic-linking native method java.sql.DriverManager.getCallerClassLoader ... JNI]
的时候就跳出来了
Joyyu 2004-09-23
  • 打赏
  • 举报
回复
好吧,谢谢你了,我郁闷了两天了,逐渐解决了一些问题,这是最后一个了
Joyyu 2004-09-23
  • 打赏
  • 举报
回复
咔咔,不知道呢,可能copy了,不过编译过去了呢,delete 的最后的执行结果也过了呀
cpunion 2004-09-23
  • 打赏
  • 举报
回复
不知道这个会不会有问题,按理说从Java的int转到C的的boolean(实际上也是int)应该没什么问题,不过最好把这些小地方都改掉,我今天没时间了,要下班,明天有空帮你测试一下。
cpunion 2004-09-23
  • 打赏
  • 举报
回复
mid = (*env)->GetStaticMethodID(env, cls, "delete", "(I)I");
printf("delete = %d\n",mid);
if(mid !=0)
{
not = (*env)->CallStaticBooleanMethod(env, cls, mid, 1);
printf("Result of delete: %d\n", not);
}

你这里调用的是CallStaticBooleanMethod,只有在函数返回值是boolean时,才调用这个,而你的delete返回的是int。
Joyyu 2004-09-23
  • 打赏
  • 举报
回复
delete 方法有的

public static int delete(int i){
System.out.println("TestDB.delete");
return 11;
}

我的东西太多了,删多了,不好意思
cpunion 2004-09-23
  • 打赏
  • 举报
回复
不对呀,你的delete方法根本没看到啊??调用的是哪个?你加个空的public static int delete 进去看看。
cpunion 2004-09-23
  • 打赏
  • 举报
回复
Checked JNI functions are being used to validate JNI usage

这一句提示了好多次,搜索一下是什么错误才提示这个。
Joyyu 2004-09-23
  • 打赏
  • 举报
回复
我的java类调用到了,只是不知道
Connection conn = DriverManager.getConnection("jdbc:polite:polite", "system", "manager");为什么执行出错,
这个[Dynamic-linking native method java.lang.Throwable.fillInStackTrace ... JNI]提示信息怎么解决
cpunion 2004-09-23
  • 打赏
  • 举报
回复
奇怪。看不出有什么错误,delete已经执行了,insert执行了一半就结束了,没有异常。。。。
cpunion 2004-09-23
  • 打赏
  • 举报
回复
不过那里讲的方法中,要访问static方法好像也只有GetStaticMethodID可用。
加载更多回复(12)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧