为啥 JDBC 代码在 Java 中可以工作,但在 Android 中返回 null?

Posted

技术标签:

【中文标题】为啥 JDBC 代码在 Java 中可以工作,但在 Android 中返回 null?【英文标题】:Why does JDBC code work in Java but return null in Android?为什么 JDBC 代码在 Java 中可以工作,但在 Android 中返回 null? 【发布时间】:2015-11-25 16:32:36 【问题描述】:

堆垛机。我正在使用安卓工作室。如标题所示;我已经设法让 JDBC 在 java 中工作,但不能在 android 上工作。我专门为所有与数据库相关的内容开设了一个课程。我的 Java 代码和我的 android 代码都在同一个文件夹中,并且具有完全相同的代码。

我的数据库类中的一个函数返回一个结果的 ArrayList,获取这个列表在 java 中工作得非常好,但在 android 中,它返回 null,这导致 NullPointerException

我已经对此事进行了一些研究,我正在使用 INTERNET persmission 以及从异步类调用数据库类。

有什么建议吗?

编辑:我的数据库托管在网络服务器上。

【问题讨论】:

你说结果集是空的?如果是这样,应该还有其他问题导致了这一点。如果可能,请发布您的堆栈跟踪。可能您的查询失败或连接失败。一定是发生了其他事情。可能是您处理异常不当,吞下主要原因。因此,围绕您建立连接和执行查询的位置进行调试。 我现在看到异常返回 null。绝对是解决这个问题的关键。我将如何查看堆栈跟踪?我在初始化日志以使用它时遇到了一些问题。 我们开始吧。我收到的例外是; “java.sql.SQLException:没有合适的驱动程序” 可能你使用的驱动不兼容android (dalvik jvm?) 或者库没有正确添加。祝你好运 下定决心。它是根据您的标题返回 null,还是根据您的文本返回 NullPointerException? '有异常返回 null' 是没有意义的。 【参考方案1】:

感谢大家的帮助 - 我找到了问题的根源。在 try/catch 中,我返回 null 而不是在捕获时记录错误。问题在于驱动程序:“java.sql.SQLException:没有合适的驱动程序”。我应该可以从这里拿走它。

【讨论】:

【参考方案2】:

它在 Java 中工作,因为您很可能连接到您自己机器中的数据库(我猜您正在尝试访问 localhost)。

在 Android 中,它不是这样工作的。 android 中的 Localhost 将是您的智能手机,而您可能没有任何数据库。

我的建议:创建某种网络服务来连接到您的数据库并将结果返回到您的 android 应用程序。它充当数据库和应用之间的桥梁。

【讨论】:

感谢您的快速回复。抱歉,这是我应该在我的原始帖子中提到的:我的数据库托管在服务器上。在过去的几个月里,我的服务器/数据库没有任何问题,这方面应该没有任何问题。 这个新信息在某种程度上使我的回答无效。您是否在 AsyncTask 中使用 HttpURLConnection 来访问您的网络服务器?或者检查this 到目前为止,我一直在使用 DriverManager.getConnection()。

以上是关于为啥 JDBC 代码在 Java 中可以工作,但在 Android 中返回 null?的主要内容,如果未能解决你的问题,请参考以下文章

为啥有些 C 程序在 debug 中可以工作,但在 release 中不行?

为啥 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效

调用mysql函数的“调用”在jdbc上工作但在mysql上没有

为啥这段代码在 64 位架构上会出现段错误,但在 32 位上却能正常工作?

为啥在 Windows 上使用 Mechanize 访问 SSL 站点会失败,但在 Mac 上可以工作?

hibernate工作原理及为啥要用