“DriverManager.getConnection”方法中的NullPointerException

时间:2012-04-04 06:51:19

标签: java android mysql windows networking

我在使用Java / Android建立与MySql数据库的连接时遇到问题。我的网络中的Windows7计算机上有一个数据库文件(MyDatabase.db)。当我从另一台Windows7计算机开发(该文件可通过Windows资源管理器访问,我可以通过SQLDatabaseExplorer对数据库进行更改)时,以下代码可以正常工作,但在我的Galaxy选项卡上安装我的应用程序时,“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 String ......?但我没弄清楚如何更改它,以便建立连接。

感谢您的帮助, 添

编辑: 感谢您一直以来的帮助!我昨天写了这个问题,没有查看我的代码...我很抱歉,因为我混淆了很多东西......它不是MySql数据库而是sqlite数据库...但我认为这在编码方面并没有太大变化。我正在使用jdbc sqlite驱动程序。在Java-Eclipse Project中开始下面的行时,一切正常并且可以建立连接。但在我的设备上我仍然有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 ...?

提前致谢!

3 个答案:

答案 0 :(得分:3)

MYSQL conenction字符串的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]...

以下是一个示例连接网址:

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

请相应更改

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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();
    }