比较我的 mysql 数据库中的 VARCHAR 和我的 java 代码中的字符串输入用户

Posted

技术标签:

【中文标题】比较我的 mysql 数据库中的 VARCHAR 和我的 java 代码中的字符串输入用户【英文标题】:Comparing VARCHAR from my mysql DB and a String input user in my java code 【发布时间】:2021-06-14 20:26:50 【问题描述】:

我正在尝试检查我的数据库中是否已经存在数据,并将其与来自我的 java 应用程序的用户输入进行比较。 但是当我使用equals 方法时,我总是得到一个错误的回报......而且我想要一个“真实”的回报。 我不明白为什么它不匹配... 这是我的代码:

   public boolean getTicketWithRegVehicleNumber(String vehicleRegNumber) 
    Connection con = null;
    boolean valueReturn = false;
    try 
        con = dataBaseConfig.getConnection();
        PreparedStatement ps = con.prepareStatement(DBConstants.GET_VEHICLE_REG_NUMBER);
        ps.setString(1, vehicleRegNumber);
        ResultSet rs = ps.executeQuery();

        //TODO trouver comment tester l'egalité entre la db et la saisie user
        String sqlRequestResult = DBConstants.GET_VEHICLE_REG_NUMBER;
        if (sqlRequestResult.equals(vehicleRegNumber))
            valueReturn = true;
        

        dataBaseConfig.closeResultSet(rs);
        dataBaseConfig.closePreparedStatement(ps);
     catch (Exception ex) 
        logger.error("Error fetching next available slot", ex);
     finally 
        dataBaseConfig.closeConnection(con);
    
    return valueReturn;

这是我的 SQL 请求:

 public static final String GET_VEHICLE_REG_NUMBER = "select t.VEHICLE_REG_NUMBER from ticket t where t.VEHICLE_REG_NUMBER = ? ";

总而言之,我有一个布尔变量:returnValue,我希望当我对我的 SQL 选择数据(我放入字符串变量的 VARCHAR 类型)和用户的数据使用 equals 方法时输入是 String ,我的布尔值返回 true。

感谢您的帮助:-)

【问题讨论】:

【参考方案1】:

查看正确的Answer by Dravidian。您的代码忽略了访问您命名为 rsResultSet。因此,您从未从数据库中检索过任何数据。

这是一个使用 H2 Database Engine 的完整示例应用程序。

我们将结果集中显示的查询结果硬编码为单行,单列文本类型,值为Crêpe。请注意我们如何使用循环访问ResultSet,通过调用getString 访问检索到的值。然后我们使用String#equals比较字符串。

另外,请注意此示例代码如何使用try-with-resources 语法自动关闭资源,例如我们的ConnectionStatementResultSet 对象。养成使用 try-with-resources 语法来简化 JDBC 代码(以及类似的文件 i/o 代码等)的习惯。

import org.h2.jdbcx.JdbcDataSource;

import java.sql.*;
import java.time.*;
import java.util.*;

public class App5

    public static void main ( String[] args )
    
        App5 app = new App5();
        app.doIt();
    

    private void doIt ( )
    
        JdbcDataSource dataSource = Objects.requireNonNull( new JdbcDataSource() );  // Implementation of `DataSource` bundled with H2.
        dataSource.setURL( "jdbc:h2:mem:text_match;DB_CLOSE_DELAY=-1" ); // Set `DB_CLOSE_DELAY` to `-1` to keep in-memory database in existence after connection closes.
        dataSource.setUser( "scott" );
        dataSource.setPassword( "tiger" );

        try (
                Connection conn = dataSource.getConnection() ;
        )
        
            String sql = "SELECT 'Crêpe' ;";
            try (
                    Statement stmt = conn.createStatement() ;
                    ResultSet rs = stmt.executeQuery( sql ) ;
            )
            
                while ( rs.next() )
                
                    //Retrieve by column number.
                    String result = rs.getString( 1 );

                    //Display values
                    System.out.println( "result: " + result );
                    System.out.println( "result equals crepe: " + result.equals( "crepe" ) );  // False. Missing the circumflex.
                    System.out.println( "result equals crêpe: " + result.equals( "crêpe" ) );  // False. Lowercase `c` does not match `C`.
                    System.out.println( "result equals Crêpe: " + result.equals( "Crêpe" ) );  // True.
                
            
        
        catch ( SQLException e )
        
            e.printStackTrace();
        
    

运行时。

result: Crêpe
result equals crepe: false
result equals crêpe: false
result equals Crêpe: true

【讨论】:

【参考方案2】:

您将纯 sql 查询字符串 (DBConstants.GET_VEHICLE_REG_NUMBER) 与 vehicleRegNumber 参数进行比较,难怪它们不匹配。

您需要比较的是分配给ResultSet rsps.executeQuery(); 的结果。

阅读 ResultSet javadoc 以了解如何从中提取数据 - https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html

【讨论】:

我正在尝试使用 getString() 方法。 和?如果实际获取任何数据,getString(int columnIndex) 方法应该可以工作。在你的情况下,它将是rs.getString(1)

以上是关于比较我的 mysql 数据库中的 VARCHAR 和我的 java 代码中的字符串输入用户的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:比较两个转换函数的结果

mysql的varchar与text对比

mysql - varchar类型与数字的比较和转换

( 4 )MySQL中的数据类型(字符串类型)

MySQL数据库中varchar类型的数字比较大小

mysql中char,varchar与text类型的区别