Java 基于参数从mysql数据库中检索特定值

Java 基于参数从mysql数据库中检索特定值,java,mysql,database,Java,Mysql,Database,我想从他们在文本字段中输入的用户名和密码中检索用户名。我想将这些值作为参数传递给方法,然后该方法将标识打印输出的用户名。请帮忙。像这样的 public void getUser(String username, String password)throws SQLException{ String qry = "SELECT UserName From USER...."; Connection con = null; PreparedStatement stmt = null

我想从他们在文本字段中输入的用户名和密码中检索用户名。我想将这些值作为参数传递给方法,然后该方法将标识打印输出的用户名。请帮忙。像这样的

 public void getUser(String username, String password)throws SQLException{
 String qry = "SELECT UserName From USER....";

   Connection con = null;
   PreparedStatement stmt = null;

   try{

con = DriverManager.getConnection("URL");
stmt = con.prepareStatement(qry);
stmt.executeUpdate();

如果不是更新或插入,则不要使用executeUpdate

您必须使用executeQuery

试试这个:

Connection con = null;
PreparedStatement stmt = null;
ResultSet rs = null;
String qry = "SELECT UserName From USER where username=? and password=?";
   try{

         con = DriverManager.getConnection("URL");
         stmt = con.prepareStatement(qry);
         stmt.setString(1, username);
         stmt.setString(2, password);
         rs =  stmt.executeQuery();
         while (rs.next()) {
               System.out.println(rs.getString("UserName"));
         }
        ...

假设您希望从数据库中获取用户的全名,并且您的表结构如下所示:

全名|用户名|密码

您可以执行以下操作:

Connection c = null;
PreparedStatement s = null;
try {
  c = DriverManager.getConnection("URL");
  s = c.prepareStatement("SELECT fullname FROM user WHERE username=? and password=?");
  s.setString(1, username);
  s.setString(2, password);

  ResultSet rs = s.executeQuery();
  if(rs.next()) 
    return rs.getString("fullname");

  return null; // no user found!
} catch(SQLException e) {
  System.err.println(e.getMessage());
} finally {
   // close s and c
}

注意:这假设传递给该方法的密码与存储在db中的密码的形式相同,即纯文本或哈希+盐析

 private boolean validate_login(String id,String password) {

try{           
   Class.forName("org.sqlite.JDBC");  // MySQL database connection
   Connection conn = DriverManager.getConnection("jdbc:sqlite:studentdb.sqlite");     
   PreparedStatement pst = conn.prepareStatement("Select * from student_table where id=? and password=?");
   pst.setString(1, id); 
   pst.setString(2, password);
   ResultSet rs = pst.executeQuery();                        
   if(rs.next())            
       return true;    
   else
       return false;


try{           
   Class.forName("org.sqlite.JDBC");  // MySQL database connection
   Connection conn = DriverManager.getConnection("jdbc:sqlite:studentdb.sqlite");     
   PreparedStatement pst = conn.prepareStatement("Select * from student_table where id=? and password=?");
   pst.setString(1, id); 
   pst.setString(2, password);
   ResultSet rs = pst.executeQuery();                        
   if(rs.next())            
       return true;    
   else
       return false;  
  }
  catch(Exception e){
   e.printStackTrace();
   return false;
  }       
 }

您的方法签名和您的意图完全矛盾。用户名已经在文本字段中,您为什么需要它?返回rs.getStringfullname;这是因为您的方法具有void返回类型。将其更改为返回字符串或直接处理方法中的名称!它仍然需要返回语句吗?这是finally block之后的值吗?它将打印UserRole还是数据库中UserRole中包含的值?您的方法声明为不返回任何内容。所以只需从我的答案中删除返回语句。这完全取决于您希望如何处理数据库中的值。要获取用户角色,请将select语句更改为select userrole。。。然后使用rs.getStringuserrole获取它,您甚至可以同时获取这两个值!可以使用if,但表可以是多行,取决于数据库中的值相同的用户和密码,但角色不同