比较来自我的 mysql 数据库的 VARCHAR 和我的 java 代码中的字符串输入用户
Comparing VARCHAR from my mysql DB and a String input user in my java code
我正在尝试检查数据是否已存在于我的数据库中,并将其与来自我的 java 应用程序的用户输入进行比较。
但是当我使用 equals
方法时,我总是得到一个错误的 return... 我想要一个“正确的”return。
我不明白为什么它不匹配...
这是我的代码:
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 选定数据使用 equals 方法时我想要它(我放入 String 变量的 VARCHAR 类型)和用户输入的 String ,我的布尔值 return true.
感谢您的帮助:-)
您正在将纯 sql 查询字符串 (DBConstants.GET_VEHICLE_REG_NUMBER) 与 vehicleRegNumber 参数进行比较,难怪它们不匹配。
您需要比较的是您的 ps.executeQuery();
分配给 ResultSet rs
的结果。
阅读 ResultSet javadoc 以了解如何从中提取数据 - https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html。
见正确 。您的代码忽略了访问您命名为 rs
的 ResultSet
。所以你从来没有从数据库中检索过任何数据。
这是一个使用 H2 Database Engine.
的完整示例应用程序
我们将结果集中显示的查询结果硬编码为文本类型的单行单列,值为 Crêpe
。请注意我们如何使用循环访问 ResultSet
,通过调用 getString
访问检索到的值。然后我们使用 String#equals
.
比较字符串
此外,请注意此示例代码如何使用 try-with-resources 语法来自动关闭资源,例如我们的 Connection
、Statement
和 ResultSet
对象。养成使用 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
我正在尝试检查数据是否已存在于我的数据库中,并将其与来自我的 java 应用程序的用户输入进行比较。
但是当我使用 equals
方法时,我总是得到一个错误的 return... 我想要一个“正确的”return。
我不明白为什么它不匹配...
这是我的代码:
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 选定数据使用 equals 方法时我想要它(我放入 String 变量的 VARCHAR 类型)和用户输入的 String ,我的布尔值 return true.
感谢您的帮助:-)
您正在将纯 sql 查询字符串 (DBConstants.GET_VEHICLE_REG_NUMBER) 与 vehicleRegNumber 参数进行比较,难怪它们不匹配。
您需要比较的是您的 ps.executeQuery();
分配给 ResultSet rs
的结果。
阅读 ResultSet javadoc 以了解如何从中提取数据 - https://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html。
见正确 rs
的 ResultSet
。所以你从来没有从数据库中检索过任何数据。
这是一个使用 H2 Database Engine.
的完整示例应用程序我们将结果集中显示的查询结果硬编码为文本类型的单行单列,值为 Crêpe
。请注意我们如何使用循环访问 ResultSet
,通过调用 getString
访问检索到的值。然后我们使用 String#equals
.
此外,请注意此示例代码如何使用 try-with-resources 语法来自动关闭资源,例如我们的 Connection
、Statement
和 ResultSet
对象。养成使用 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