Java 使用Google App Engine端点连接到云SQL
我正在尝试将我的后端端点代码连接到google cloud sql数据库。我已经成功地使用MySQL workbench创建了数据库和表。当我尝试在用户表中插入新用户时,执行查询时会得到java.lang.NullPointerException。请参阅下面的代码:Java 使用Google App Engine端点连接到云SQL,java,mysql,database,google-app-engine,endpoint,Java,Mysql,Database,Google App Engine,Endpoint,我正在尝试将我的后端端点代码连接到google cloud sql数据库。我已经成功地使用MySQL workbench创建了数据库和表。当我尝试在用户表中插入新用户时,执行查询时会得到java.lang.NullPointerException。请参阅下面的代码: @ApiMethod(name="registerUser") public User addUser(@Named("name") String name, @Named("email") String email, @Named
@ApiMethod(name="registerUser")
public User addUser(@Named("name") String name, @Named("email") String email, @Named("rotation") double rotation,
@Named("p1email") String p1email, @Named("p2email") String p2email, @Named("password") String password) throws NotFoundException {
//Check if already exists
Connection conn = dbConnection.getConnection();
User u = null;
try {
String query = "SELECT * FROM users WHERE email = '"+email+"'";
java.sql.ResultSet rs = conn.createStatement().executeQuery(query);
if(rs != null){
throw new NotFoundException("User email is already used");
}else{
java.sql.PreparedStatement statement = conn.prepareStatement("INSERT INTO users (name,email,p1email,p2email,password,rotation) VALUES ( ?, ?, ?, ?, ?, ?)");
statement.setString(1, name);
statement.setString(2, email);
statement.setString(3, p1email);
statement.setString(4, p2email);
statement.setString(5, password);
statement.setDouble(6, rotation);
statement.execute();
}
String query2 = "SELECT * FROM users WHERE email = '"+email+"'";
java.sql.ResultSet rs2 = conn.createStatement().executeQuery(query2);
if(rs2 != null){
while(rs2.next()){
u = new User(rs2.getInt("id"), name, email, p1email, p2email, password, rotation);
}
}
}catch (SQLException e){
throw new NotFoundException(e);
}
return u;
}
连接到数据库的代码是:
public java.sql.Connection getConnection(){
try{
Connection conn = DriverManager.getConnection(
"jdbc:google:mysql://your-project-id:your-instance-name/database",
"user", "password");
}catch(Exception e){
conn = null;
}
return conn;
}
我在第一个代码片段中得到了这句话中的java.lang.NullPointerException:
java.sql.ResultSet rs = conn.createStatement().executeQuery(query);
问题是当你到达这一行时,“conn”肯定是空的。原因是DriverManager.getConnection引发了异常,getConnection显式返回了“null” 现在的问题是为什么DriverManager.getConnection抛出异常?由于您正在接受所有异常,并且没有记录任何内容,因此只能尝试猜测。一般而言: 吞下所有的例外是不好的。你应该只抓住那些 您打算处理的异常。 如果捕获到异常,通常应将其记录下来。在这种情况下 您需要知道DriverManager.getConnection引发异常的原因 首先。
因此,下一步是重构代码,使其更易于调试,从日志中获取异常详细信息,并从那里开始工作。如果原因不明显,请随时用新信息更新问题。这是部署在GAE上还是在本地机器上运行devserver时发生的?它发生在本地和GAE上