在一个抽象类类中有这么一句话protected String[] msg = null;
public AbstractService(String msg) {
this.msg = msg.split(Param.SPACE);//以空格为分隔符进行分割成数组
}
没有为msg这个String数组赋值,然后有一个子类继承这个抽象类其中有这么几句话
/** 登陆账号密码核对 */
private static final String SQL_LOGIN = "SELECT * FROM USERLOGIN WHERE USERID = '?' AND PASSWORD = '?';";
* @param msg 的格式是:用户ID+密码+IP+端口+状态 */
public LoginService(String msg) {
//调用父类(AbstractService)的构造方法
super(msg);
}
String SQL = SQL_LOGIN.replaceFirst("\?", msg[0]);
SQL = SQL.replaceFirst("\?", msg[1]);
rs = stat.executeQuery(SQL);
程序怎么判断msg[0],msg[1] 分别是ID和密码呢
这个应该没法判断, 只能在存入数据库的时候,确保第一列为ID, 第二列为密码.这样从数据库中读取到数据, 调用AbstractService分割字符串才能保证
msg[0] 为id, msg[1]为密码
这个应该是传值的时候按照一定的顺序进行了字符串的拼接,然后分割成数组之后就是按照拼接的顺序来分割。
这个只能在存储数据库的时候,存储形式为 (id空格密码),才能通过字符串拆分开来,为什么不分开存储id和密码呢 ??
你的SQL_LOGIN初始化的时候,第一个问号处不就ID,第二个问好不就密码么,然后下面就用replaceFist把问好代替了啊
调用LoginService时传入的参数需要根据LoginService中定义的规则,所以至于怎么判断,完全看你LoginService怎么制定规则,
比如按你现在的代码传入的参数只要约定必须是“用户ID 密码 IP 端口 状态”,则msg[0],msg[1] 分别是ID和密码。如果不想使用空格分割,
则在LoginService中重新按照新规则分割
public LoginService(String msg) {
this.msg = msg.split("新分割符");//以新分隔符进行分割成数组
}