0

我正在尋找使用雲端點在Google App Engine上創建API,但我看到的所有教程都是關於如何與雲數據存儲進行交互的。我期待着使用Cloud SQL。雲端點與雲SQL示例代碼

是否有人有云端點類示例代碼(Java),它演示瞭如何連接到雲SQL並執行一些簡單的INSERTSELECT語句?例如

INSERT message INTO messages 
SELECT * FROM messages 
+0

http://meta.stackoverflow.com/questions/251758/why-is-stack-overflow-so-negative-of-late geeezzz傢伙 – Speedy

+0

雲端點本質上是做對Java對象進行序列化/反序列化的工作,並且與您使用的任何數據庫(如果有)相同,所以相同的教程適用於CloudSQL。 – tx802

+0

@ tx802那麼我應該問一下,如何創建一個可寫入雲SQL的Java對象?所以很困惑.... – Speedy

回答

2

以下是更新Cloud SQL的示例Cloud Endpoint類。這個示例假設終點認證

import java.io.IOException; 
import java.util.HashSet; 
import java.util.Set; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

import com.google.api.server.spi.ServiceException; 
import com.google.api.server.spi.config.Api; 
import com.google.api.server.spi.config.ApiMethod; 
import com.google.api.server.spi.config.Named; 
import com.google.api.server.spi.response.ForbiddenException; 
import com.google.api.server.spi.response.InternalServerErrorException; 
import com.google.appengine.api.oauth.OAuthRequestException; 
import com.google.appengine.api.users.User; 

@Api(
    name = "myendpoint", 
    version = "v1", 
    clientIds = {"ddddd.apps.googleusercontent.com"}, 
    audiences = {"xxxx"} 
) 
public class CloudSqlEndpoint { 

    private static final Logger log = Logger.getLogger(CloudSqlEndpoint.class.getName()); 

    private static final String INSERT_ORDER_SQL = "INSERT INTO order (amount, user, status, address) VALUES(? , ? , ? , ?)"; 

/** 
* Insert a row into cloud sql 
* @param order 
* @param user 
* @return 
*/ 
@ApiMethod(name = "order.add") 
public Order addOrder(Order order, User user) throws OAuthRequestException, 
    IOException, ServiceException { 

    this.validateUser(user); 

    log.info("adding order to cloud sql: " + order); 

    try { 
     String url = null; 
     if (SystemProperty.environment.value() == 
       SystemProperty.Environment.Value.Production) { 
      // Load the class that provides the new "jdbc:google:mysql://" prefix. 
      Class.forName("com.mysql.jdbc.GoogleDriver"); 
      url = "jdbc:google:mysql://your-project-id:your-instance-name/guestbook?user=root"; 
     } else { 
      // Local MySQL instance to use during development. 
      Class.forName("com.mysql.jdbc.Driver"); 
      url = "jdbc:mysql://127.0.0.1:3306/guestbook?user=root"; 

      // Alternatively, connect to a Google Cloud SQL instance using: 
      // jdbc:mysql://ip-address-of-google-cloud-sql-instance:3306/guestbook?user=root 
     } 
     try(Connection conn = DriverManager.getConnection(url)) { 

      PreparedStatement stmt = conn.prepareStatement(INSERT_ORDER_SQL); 
      stmt.setString(1, order.getAmount()); 
      stmt.setString(2, order.getUser()); 
      stmt.setString(3, "Open"); 
      stmt.setString(4, order.getAddress()); 

      stmt.executeUpdate(); 

     } 

    } catch(Exception e) { 

     log.log(Level.SEVERE, "Failed to create order", e); 
     throw new InternalServerErrorException(e); 
    } 

    return order; 
} 

/** 
* Validate the current user 
* @param user 
*/ 
private void validateUser(User user) throws OAuthRequestException, ServiceException { 

    // validate the users domain 
    if (user == null) { 
     throw new OAuthRequestException("Invalid user."); 

    } else { 
     String email = user.getEmail().toLowerCase(); 

     // any other validation 
    } 

} 

} 
+0

這太好了。我想知道還有哪些地方可以找到更多樣本? – Speedy

+0

請同時添加一個SELECT * omerio – cfl