gpt4 book ai didi

Java无法访问的代码错误

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:48:23 31 4
gpt4 key购买 nike

我正在为 SmartFox 服务器扩展创建一个 Java 类。它正在尝试访问 MySQL 数据库。

我在行 session.setProperty("DatabaseID", dbId);

上收到一个名为 Unreachable Code 的错误
package sfs2x.extension.test.dblogin;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.smartfoxserver.bitswarm.sessions.ISession;
import com.smartfoxserver.v2.core.ISFSEvent;
import com.smartfoxserver.v2.core.SFSEventParam;
import com.smartfoxserver.v2.db.IDBManager;
import com.smartfoxserver.v2.exceptions.SFSErrorCode;
import com.smartfoxserver.v2.exceptions.SFSErrorData;
import com.smartfoxserver.v2.exceptions.SFSException;
import com.smartfoxserver.v2.exceptions.SFSLoginException;
import com.smartfoxserver.v2.extensions.BaseServerEventHandler;

public class LoginEventHandler extends BaseServerEventHandler
{
@Override
public void handleServerEvent(ISFSEvent e) throws SFSException
{
String email = (String)e.getParameter(SFSEventParam.LOGIN_NAME);
String pass = (String)e.getParameter(SFSEventParam.LOGIN_PASSWORD);
ISession session = (ISession)e.getParameter(SFSEventParam.SESSION);

IDBManager dbManager = getParentExtension().getParentZone().getDBManager();
Connection connection = null;

try
{
connection = dbManager.getConnection();

PreparedStatement stmt = connection.prepareStatement("SELECT * FROM users WHERE email=?");
stmt.setString(1, email);

ResultSet res = stmt.executeQuery();

if(!res.first())
{
SFSErrorData errData = new SFSErrorData(SFSErrorCode.LOGIN_BAD_USERNAME);
errData.addParameter(email);

throw new SFSLoginException("Bad user name: "+ email, errData);
}

String dbPword = res.getString("password");
int dbId = res.getInt("id");

if(!getApi().checkSecurePassword(session, dbPword, pass));
{
SFSErrorData errorData = new SFSErrorData(SFSErrorCode.LOGIN_BAD_PASSWORD);
errorData.addParameter(email);

throw new SFSLoginException("Bad password for user: "+ email, errorData);
}

session.setProperty("DatabaseID", dbId);
//UNREACHABLE CODE
//IF I COMMENT THIS OUT, THERE IS NO UNREACHABLE CODE ERROR

}

catch(SQLException eve)
{
SFSErrorData erroData = new SFSErrorData(SFSErrorCode.GENERIC_ERROR);
erroData.addParameter("SQL Error: " + eve.getMessage());

throw new SFSLoginException("A SQL Error occurred: " + eve.getMessage(), erroData);
}

finally
{
try
{
connection.close();
}
catch (SQLException e1)
{

}
}
}

}

最佳答案

您的第二个 if 语句以 ; 终止,这是一个有效的语句。并且您在下一个 block 中抛出异常,这就是错误的原因。

if(!getApi().checkSecurePassword(session, dbPword, pass));

上面的 if 语句以分号结束,这是一个有效的语句,if 语句将作用于它,你的代码的其他部分正在执行,而不管 if 语句,最后抛出异常。

{
SFSErrorData errorData = new SFSErrorData(SFSErrorCode.LOGIN_BAD_PASSWORD);
errorData.addParameter(email);

throw new SFSLoginException("Bad password for user: "+ email, errorData);
}

这就是您收到错误的原因,因为您的行 session.setProperty("DatabaseID", dbId); 永远不会到达。

关于Java无法访问的代码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15024846/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com