连接到Cloud SQL的java.lang.NullPointerException

时间:2015-06-19 16:20:55

标签: java jdbc google-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中的我的Cloud SQL实例,但是上面的类返回了一个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

我错过了一些进口商品吗?

3 个答案:

答案 0 :(得分:2)

SELECT 
  [Measures].[ReplaceWithActualMeasure] ON COLUMNS, 
  NON EMPTY
      [Account].[Account Number].ALLMEMBERS*
      {[simulationDate].[day].&[10010101]}*
      {[statisticPeriod].[period].&[201201]}*
      {[region].[code].&[SO]} ON ROWS
FROM [myWH];

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

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

答案 1 :(得分:0)

在这里找到一些有趣的东西:cloud.google.com/sql/docs/external

因此,您可以使用普通的MySQL连接器连接,而无需App Engine。你在这里得到了jar文件:http://dev.mysql.com/downloads/connector/j/

解决1:

  

授权您将要连接的IP或IP范围

你需要获得你的IP。如果您使用正常的dsl,则可能会获得动态IP,因此您必须经常在Cloud SQL的管理控制台中对其进行更改。

答案 2 :(得分:0)

这可能是两件事之一的原因:

1)缺少许可。尝试在Manifest中添加这些,

<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