どちらかあなたのUSERNAME1はnullまたは空または何か他のもの とありますパスワードも正しいかもしれません。 コード内にユーザ名が表示されていない状態で何もしていません。 rs.getString( "")はnull
を返します。 あなたはただそれを無効にしています。 select * from whatever
のような選択は使用しないでください。これは悪いことです。特に大きなテーブルでは特にそうですが、あなたが選択しているものは実際には見えません。
しかし、あなたは のアドバイスに従い、テクニックを使用するか、またはいくつかの良い ORMのような休止状態か、おそらく良い古いspringjdbcを使用する必要があります。 SQLはすでに事前行くように:)すべての
まず私は強く、より良い方法で データベースのリソースを活用すべきであるだけでなく、SQLインジェクションを避けるために、それはまたあなたを助けるかもしれないプリペアドステートメント http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html を使用することをお勧めしますdbにコンパイルされます。
ここにいくつかのライブ例があります。
static public void setParameters(PreparedStatement preparedStatement, Object[] params)
throws SQLException
{
if (params != null)
{
for (int i = 0; i < params.length; i++)
{
if (params[i] == null)
{
preparedStatement.setNull(i + 1, Types.INTEGER);
continue;
}
String className = params[i].getClass().getName();
if (className.compareTo("java.lang.String") == 0)
{
preparedStatement.setString(i + 1, (String) params[i]);
}
else if (className.compareTo("java.lang.Integer") == 0)
{
preparedStatement.setInt(i + 1, ((Integer) params[i]).intValue());
}
...............///your types go here
}
}
}
public static ResultSet sqlSelect(Connection con, String sql, Object[] params) throws SQLException
{
ResultSet rs = null;
PreparedStatement preparedStatement = con.prepareStatement(sql);
try
{
setParameters(preparedStatement, params);///your parameters
rs = preparedStatement.executeQuery();
logger.info(rs.toString());
}
catch (SQLException e)
{
//TODO log.error("select failed: " + preparedStatement.toString());
throw e;
}
return rs;
}
public static UserInfo getUser(String username,String pass)
{
UserInfo user=null;
Connection con=null;
//// logger.info("user: "+username+" pass: "+pass); if you want to
String query = "SELECT id,username,password,email,name,company,description,enabled" +
" FROM users WHERE username=? and password=? and enabled=true;";
try{
con = DBManager.getConnection();
ResultSet rs = DBManager.sqlSelect(con,query,new String[]{username,pass});
while(rs != null && rs.next())
{
user = new UserInfo();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setEmail(rs.getString(4));
user.setFullName(rs.getString(5));
user.setCompany(rs.getString(6));
user.setDescription(rs.getString(7));
user.setEnabled(rs.getBoolean(8));
logger.info("user written");
}
}catch(SQLException sqle){logger.info(sqle.getMessage());}
finally
{
if(con != null)
DBManager.freeConnection(con);
}
return user; }
方法は、お使いの設定でユーザーを返した場合、ユーザは有効です。 は、 (id、user_id、permission_id)またはgroup_idを持つようにしたい場合は、users_permissionsやusers_groupsのような多対多テーブルを作成する必要があります。 これらの2つのテーブルのユーザに参加し、この多対多テーブルを使用します。
select u.user_id,p.permission from
users u
inner join user_permissions up
on u.user_id=up.user_id
inner join permissions p
on up.permission_id=p.permission_id
where u.user=? and u.password=? and u.enabled=1
を、あなたはあなたの選択とのgetUser()メソッドを調整します。この
select u.user_id,p.permission from
users u,user_permissions up,permissions p
where u.user_id=up.user_id and up.permission_id=p.permission_id
and u.user=? and u.password=? and u.enabled=1
または使用のような 何かが参加します。
のようなのUserInfo POJO何か:
public class UserInfo {
private int id;
private String username;
private String password;
private String email;
private String fullName;
private String company;
private String description;
private List<Integer or String> permissions;
//getters//setters
}
は、abitのに役立ちます願っています。
これは完全に私を投げ捨てます。私はこれについていくつかの研究をする必要があると思う。 –
@Limpepはいサー。私は編集後にもっと説明をしています。 –