【问题标题】:MySql Query: How can one execute two queries at the same time using mysql and java?MySql 查询:如何使用 mysql 和 java 同时执行两个查询?
【发布时间】:2019-07-12 00:45:54
【问题描述】:

如何使用mysql和java同时执行两个查询? 我创建的这个登录名遇到了问题。登录名工作得很好。但是当它在网络中工作时,如果两个不同的用途尝试在同一个实例上登录,它就不起作用。用户可以单独登录。有没有特定的方法二可以实现这一点?

代码如下

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.security.MessageDigest;
import sun.misc.BASE64Encoder;
//import java.sql.ResultSet;
import java.sql.SQLException;

public class userauthentication {

    public static String getuserauthentication(String x,String y){
String column="123",prio_no="0";
//String encrypted=password.encryptSha(x);
try{
DBFacede d=new DBFacede();
 ResultSet r1 = d.fetch("SELECT a.Password FROM login a WHERE a.user_id='"+y+"'");
            r1.last();
            int rows = r1.getRow();
            r1.beforeFirst();

            for(int i=0;i<rows;i++){

                if(r1.next()){
                                  }

            }
column=r1.getString("Password");
 ResultSet r2 = d.fetch("SELECT a.Priority FROM login a WHERE a.user_id='"+y+"'");
            r2.last();
            int rows1 = r2.getRow();
            r2.beforeFirst();

            for(int i=0;i<rows1;i++){

                if(r2.next()){
                                  }

            }
prio_no=r2.getString("Priority");
System.out.println(column+"**********");
      }

     catch (SQLException s){
        System.out.println("SQL statement is not executed!");
      }
           //System.out.println(column);
if(column.equals(x)){
return prio_no;}
else {
return "0";
}
}

【问题讨论】:

  • 能否请您发布您的登录代码。
  • "如果两个不同的用户尝试在同一个实例上登录,它不会起作用。"需要详细说明,什么实际上不起作用?
  • 简短的回答:是的。 SQL-server 和 Java 都支持同时执行许多 SQL 语句。如果您改写问题或添加一些源代码,我们可能会提供进一步的帮助。 :)
  • ResultSet r1 = d.fetch("SELECT a.Password FROM login a WHERE a.user_id='"+y+"'"); ResultSet r2 = d.fetch("SELECT a.Priority FROM login a WHERE a.user_id='"+y+"'");这些是我使用的两个查询..它将获取传递给方法的用户名,并将获取与 dat 相关的密码,并将检查密码是否与给定密码匹配...如果是,用户可以登录..这是代码如何工作的基本思想
  • 程序在tomcat上运行,blazeds用于remort对象,前端在flex中。只要两个人不尝试同时登录,代码就可以正常工作。一旦两个人尝试这样做,什么都没有发生..

标签: java mysql jdbc


【解决方案1】:

但是当它在网络中工作时,如果两个不同的用户尝试在同一个实例上登录它就不起作用

问题出在其他地方,而不是目前发布的代码(但它本身非常糟糕)。一个可能的原因是您将登录用户分配为在所有客户端之间共享的应用程序范围(静态)变量。这样每次用户登录时,任何以前登录的用户都将被最后登录的用户覆盖。


至于您的代码,它有太多错误,需要重写所有内容。

  • 它不是直接自我记录的。
  • 没有为值使用正确的类型。
  • 它不必要地在同一个表上触发两个查询而不是一个。
  • 结果集不必要地来回移动。
  • 容易受到 SQL 注入攻击。
  • 它正在泄漏数据库资源。
  • 它没有以合理的方式处理异常。

这是一个应该如何完成的启动示例:

public int getPriority(String username, String password) throws SQLException {
    Connection connection = null;
    PreparedStatement statement = null;
    ResultSet resultSet = null;
    int priority = 0;

    try {
        connection = database.getConnection();
        statement = connection.prepareStatement("SELECT priority FROM login WHERE username = ? AND password = ?");
        statement.setString(1, username);
        statement.setString(2, password);
        resultSet = statement.executeQuery();
        if (resultSet.next()) {
            priority = resultSet.getInt("priority");
        }
    } finally {
        if (resultSet != null) try { resultSet.close(); } catch (SQLException logOrIgnore) {}
        if (statement != null) try { statement.close(); } catch (SQLException logOrIgnore) {}
        if (connection != null) try { connection.close(); } catch (SQLException logOrIgnore) {}
    }

    return priority;
}

就是这样。以下是一些我强烈建议您阅读的教程/文章:

【讨论】:

  • 非常感谢您的建议,我是编码新手,所以我的技能很差。在收到有关 sql 注入的警告后,我是如何更改代码的。
猜你喜欢
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-08
  • 1970-01-01
相关资源
最近更新 更多