java.lang.NullPointerException 连接到云 SQL

java.lang.NullPointerException connecting to Cloud SQL

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.*;

public class ConnectionManager {
    private static String URL  = "jdbc:google:mysql://your-project-id:your-instance-name/database";
    private static String DRIVER = "com.mysql.jdbc.GoogleDriver";
    private static String USERNAME = "root";
    private static String PASSWORD = "test";
    private static Connection CON = null;

    public static Connection getConnection() {
        try {
            Class.forName(DRIVER);
            try {
                CON = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            } catch (SQLException se) {
                //Handle errors for JDBC
                se.printStackTrace();
            }
        } catch (Exception ex) {
            //Handle errors for Class.forName
            ex.printStackTrace();
        }

        //return a connection object
        return CON;
    }

}

我在 Android Studio 中创建了上面的 class 来连接到我的 Cloud SQL 实例,但是上面的 class 返回了一个 NULL,这反过来又伤害了其余部分我的代码:

conn = ConnectionManager.getConnection();
stmt = conn.createStatement();
String sql;
sql = "INSERT into messages (message) VALUES('Hello World')";
ResultSet rs = stmt.executeQuery(sql);

我不确定为什么会收到此错误:

Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference

我是不是遗漏了一些进口的东西?

com.mysql.jdbc.GoogleDriver

仅当您的应用在 AppEngine 中为 运行 时才有效,并且记得在 AppEngine 中启用连接器。 如果不只是使用 com.mysql.jdbc.Driver.

指南很简单:https://cloud.google.com/appengine/docs/java/cloud-sql/#enable_connector_j

在这里发现了一些有趣的东西:cloud.google.com/sql/docs/external

因此,您可以使用普通的 MySQL 连接器进行连接,而无需 App Engine。您可以在此处获取 jar 文件:http://dev.mysql.com/downloads/connector/j/

解决1:

Authorize the IP or range of IPs from which you will be connecting

你需要获取你的ip。如果你使用普通的 dsl,你可能会得到一个动态 ip,所以你必须经常在 Cloud SQL.

的管理控制台中更改它

这可能是以下两种情况之一的原因:

1) 缺少权限。尝试在清单中添加这些,

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.access_wifi_state" />

2) 添加 "jtds-1.3.1.jar" 文件到 app/lib forlder