Java读取数据进行equals比较不相等

今天写Java应用的时候从sql2008数据库读取数据进行equals比较,rs.getString(1).equals("abc")返回false,明明读取到的是abc,却偏偏返回false,非常郁闷。折腾了半天才发现这并不是代码问题,而是sql2008数据库里的nchar数据类型是固定长度的,当数据长度不足时将会自动在数据后面加上空格以达到规定的长度,因此当读取数据库的数据直接进行比较时,实际上该数据后面可能带有空格,自然无法得到我们希望的结果啦。

解决办法:

方法1、对rs.getString(1)进行处理,在后面加上trim()方法:rs.getString(1).trim()

方法2、对sql语句进行处理,slelect ltrim(rtrim(username)) from users(注意sql中没有trim())

方法3、修改数据库里数据类型,将char/nchar修改为varchar/nvarchar

您好,要进行每一行数据比较,可以在读取 Excel 表格数据时,将每一行的数据存储在一个对象中,然后对比两个表格中对应的对象是否相等。下面是一个简单的示例代码: ```java import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; public class ExcelReader { public static void main(String[] args) throws IOException { // 读取第一个 Excel 表格 FileInputStream fis1 = new FileInputStream("excel1.xlsx"); Workbook workbook1 = WorkbookFactory.create(fis1); Sheet sheet1 = workbook1.getSheetAt(0); Iterator<Row> rowIterator1 = sheet1.iterator(); // 读取第二个 Excel 表格 FileInputStream fis2 = new FileInputStream("excel2.xlsx"); Workbook workbook2 = WorkbookFactory.create(fis2); Sheet sheet2 = workbook2.getSheetAt(0); Iterator<Row> rowIterator2 = sheet2.iterator(); List<RowData> rowDataList1 = new ArrayList<>(); List<RowData> rowDataList2 = new ArrayList<>(); // 将两个表格数据存储到对象列表中 while (rowIterator1.hasNext()) { Row row = rowIterator1.next(); Iterator<Cell> cellIterator = row.cellIterator(); RowData rowData = new RowData(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); rowData.addData(cell.toString()); } rowDataList1.add(rowData); } while (rowIterator2.hasNext()) { Row row = rowIterator2.next(); Iterator<Cell> cellIterator = row.cellIterator(); RowData rowData = new RowData(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); rowData.addData(cell.toString()); } rowDataList2.add(rowData); } // 比较两个表格中每一行的数据 for (int i = 0; i < rowDataList1.size(); i++) { RowData rowData1 = rowDataList1.get(i); RowData rowData2 = rowDataList2.get(i); if (!rowData1.equals(rowData2)) { System.out.println("第 " + (i + 1) + " 行数据相等:"); System.out.println("表格1:" + rowData1); System.out.println("表格2:" + rowData2); } } // 关闭 Excel 文件 workbook1.close(); fis1.close(); workbook2.close(); fis2.close(); } /** * 表格数据对象 */ private static class RowData { private List<String> data = new ArrayList<>(); /** * 添加一列数据 */ public void addData(String value) { data.add(value); } /** * 判断两个行数据是否相等 */ @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } RowData rowData = (RowData) o; return data.equals(rowData.data); } @Override public String toString() { return "RowData{" + "data=" + data + '}'; } } } ``` 上述代码中,我们定义了一个 `RowData` 类来存储每一行的数据,通过 `addData()` 方法将每一列的数据添加到列表中,然后通过重写 `equals()` 方法来比较两个行数据是否相等。在读取 Excel 数据时,将每一行的数据存储在 `RowData` 对象中,然后将对象存储在列表中。最后,遍历两个列表,比较每一行的数据是否相等。如果不相等,则输出不相等的行数据。 需要注意的是,本示例代码只是一个简单的实现,实际应用中可能需要针对具体需求进行修改和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值