2015-06-19 82 views
0
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; 
    } 

} 

我創建的上述類連接到我的Cloud SQL執行Android Studio中,但上面的類返回一個NULL這反過來又傷害了我的代碼的其餘部分:顯示java.lang.NullPointerException連接到雲SQL

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

我不知道爲什麼,雖然我CAM收到此錯誤:

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

我缺少一些進口的東西?

+1

你在這裏做什麼? 'Class.forName(DRIVER);'你不使用那個方法調用的返回值...你在那個方法調用期間是否得到任何'SQLException'或其他任何東西? –

+0

你有沒有添加的依賴庫(JAR)爲[參考](https://cloud.google.com/appengine/docs/java/cloud-sql/) – Madhan

+0

@refer不知道該怎麼做...... – Micro

回答

2
com.mysql.jdbc.GoogleDriver 

只有當你的應用程序在運行的AppEngine,記得要啓用的AppEngine連接器的工作原理。 如果不只是使用com.mysql.jdbc.Driver。

該指南是非常簡單的:https://cloud.google.com/appengine/docs/java/cloud-sql/#enable_connector_j

+0

我明白了。我以爲你可以像訪問其他任何MySQL數據庫一樣訪問雲端SQL。而'com.mysql.jdbc.Driver'只能在localhost上使用no? – Micro

+0

我認爲你可以使用它,我使用本地數據庫來開發,而不是與生產混合使用,但就像它在指南中所說的那樣//另外,使用以下命令連接到Google Cloud SQL實例: // jdbc:mysql: // IP地址 - 的 - 谷歌雲-SQL實例:3306 /留言?user = root ,你只是不能使用GoogleDriver,因爲你沒有它,但你可以有2個實例1用於開發1生產 – isma3l

+0

我試過了// jdbc:mysql:// ip-address-of- google-cloud-sql-instance:3306/guestbook?user = root使用com.mysql.jdbc.Driver並且它不起作用。 – Micro

0

找到一些有趣的東西在這裏: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的管理控制檯中進行更改。

+0

謝謝。儘管如此,我不得不在管理控制檯中將我的IP列入白名單。如果沒有他們也不得不將他們的IP列入白名單,我將無法將該程序提供給其他人。 – Micro

0

這可能是以下兩種情況之一的原因:

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」 文件的應用程序/ lib目錄forlder

相關問題