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
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