繁体   English   中英

“DriverManager.getConnection”方法中的 NullPointerException

[英]NullPointerException in "DriverManager.getConnection" method

我在通过 Java/Android 建立与我的 MySql 数据库的连接时遇到问题。 我在 my.network 中的 Windows7 计算机上有一个数据库文件 (MyDatabase.db)。 当我从另一台 Windows7 计算机开发时(该文件可通过 Windows 资源管理器访问,我可以通过 SQLDatabaseExplorer 对数据库进行更改)在 Eclipse 之外,以下代码有效,但在我的 Galaxy Tab 上安装我的应用程序时,“DriverManager. getConnection()”返回 null。

       try {
           String url = "http://192.168.178.21/Users/test/userdata/Database/MyDatabase.db";
           Class.forName ("com.mysql.jdbc.Driver");
           Connection connection = DriverManager.getConnection (url);
           System.out.println ("Database connection established");
       } catch (SQLException e) {
           Log.d("SQLException", "e.toString()");
       }

LogCat中记录的SQLException是:

java.sql.SQLException: path to '//192.168.178.21/Users/test/userdata/Database/MyDatabase.db': '/192.168.178.21' does not exist 

我想我的问题出在 url 字符串上......? 但是我没有想出如何更改它,以便可以建立连接。

感谢您的帮助,提姆

编辑:到目前为止,感谢您的帮助,我昨天已经把这个问题写下来了。 没有看我的代码..,我很抱歉。 因为我混淆了很多东西......它不是 MySql 数据库而是 sqlite 数据库......但我认为这在编码方面没有太大变化。 我正在使用 jdbc sqlite 驱动程序。 在 Java-Eclipse 项目中启动以下行时,一切正常,可以建立连接。 但是在我的设备上我仍然得到了 Nullpointer ...

昨天我更改了我的代码以使其符合您的建议。 但问题仍然存在……为了确保它与某些权限或网络设置无关,我已将 DB-File 复制到我的 Android 设备上,并尝试使用以下代码行直接连接到它:

try {
    Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

Connection conn = DriverManager.getConnection("jdbc:sqlite://mnt/sdcard/MyVideos34.db");

if (conn == null) {
    Log.d("ConnectionError", "Connection is null");
return;
}

但这里 getConnection 也抛出一个 NullPointer,我不知道为什么......有人假设为什么可以从 Eclipse 建立连接并在我的 Android 设备上失败吗? 我可能有一个错误的驱动程序,它在设备上不起作用,但在 Eclipse...?

提前致谢!

MYSQL 连接字符串的 url 格式为

jdbc:mysql://[host][,failoverhost...][:port]/[database] »
[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

如果未指定主机名,则默认为127.0.0.1。 如果不指定端口,则默认为 3306,即 MySQL 服务器的默认端口号。

jdbc:mysql://[host:port],[host:port].../[database] »
[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

这是一个示例连接 URL:

jdbc:mysql://localhost:3306/sakila?profileSQL=true

请相应更改

JDBC 网址的格式为:jdbc:mysql:/// 但请查看重复代码。 您可能不想像这样从移动设备直接连接到数据库,但更喜欢 web 服务包装器来执行此操作。

try {
       String url = "jdbc:mysql://localhost:3306/MyDatabase?user=root&password=root";
       Class.forName ("com.mysql.jdbc.Driver").newInstance();
       Connection connection = DriverManager.getConnection (url);
       System.out.println ("Database connection established");
    } catch (SQLException e) {
       System.out.println("SQLException" + e.toString());
    } catch (ClassNotFoundException e) {
       e.printStackTrace();
    } catch (InstantiationException e) {
       e.printStackTrace();
    } catch (IllegalAccessException e) {
       e.printStackTrace();
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM