Java 为什么我的结果集会出现错误?

Java 为什么我的结果集会出现错误?,java,prepared-statement,resultset,Java,Prepared Statement,Resultset,我正在为编程课做一个项目,老师鼓励我使用stackoverflow来获得帮助。我的问题如下:在我的if中,withsResult.next()返回false。我正在尝试从derby数据库中获取一行 我已验证我的productUuid正在获取UUID,preparedstatement处于活动状态。我已经检查了我的查询findAll是否正常工作,它是否正常 拦截器应该返回正在使用的类名 我的问题是: private static final String QUERY_02 =

我正在为编程课做一个项目,老师鼓励我使用stackoverflow来获得帮助。我的问题如下:在我的if中,with
sResult.next()
返回false。我正在尝试从derby数据库中获取一行

我已验证我的productUuid正在获取UUID,preparedstatement处于活动状态。我已经检查了我的查询findAll是否正常工作,它是否正常

拦截器应该返回正在使用的类名

我的问题是:

private static final String QUERY_02 =
            "SELECT oid, product_name, product_desc, product_price, product_sku, product_inv FROM PRODUCT WHERE oid=?";
我的UUIDUtils:

public class UUIDUtils {

    public static UUID asUuid(byte[] bytes) {
        final ByteBuffer bb = ByteBuffer.wrap(bytes);
        final long firstLong = bb.getLong();
        final long secondLong = bb.getLong();

        return new UUID(firstLong, secondLong);
    }

    public static byte[] asBytes(UUID uuid) {
        final ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
        bb.putLong(uuid.getMostSignificantBits());
        bb.putLong(uuid.getLeastSignificantBits());

        return bb.array();
    }
我的产品:

public ProductDTO singleProduct(UUID productUuid) throws MyStoreException {
        log().trace("Entered singleProduct()");
         ProductDTO sProduct = null;


          try (final Connection connection = datasource.getConnection();
                     final PreparedStatement sPre = connection.prepareStatement(QUERY_02);) {  


              sPre.setBytes(1, UUIDUtils.asBytes(productUuid));
                  log().trace("PreparedStatment connection is active: {}", !sPre.isClosed());
              log().trace("productUuid passed through ProductQueryImpl: {}" , productUuid);
              ResultSet sResult = sPre.executeQuery();

              if(sResult.next()) { 

             sProduct = new ProductDTO(productUuid,
                        sResult.getString("product_name"),
                        sResult.getString("product_desc"),
                        sResult.getDouble("product_price"),
                        sResult.getString("product_sku"),
                        sResult.getInt("product_inv"));


                }else {
                    log().error("Product not found");
                }
                return sProduct;


            }catch(final SQLException ex2) {
            log().error(ex2.getMessage(), ex2);
            throw new MyStoreException(ex2.getMessage());
            }




          }
我的控制台:

00:05:04,092 TRACE [ca.sait.mystore.mvc.model.ProductModel] (default task-1) Entered postConstruct()
00:05:04,094 TRACE [ca.sait.mystore.interceptors.LogInterceptors] (default task-1) Entered logInterceptor(context)
00:05:04,094 DEBUG [ca.sait.mystore.interceptors.LogInterceptors] (default task-1) Method Name: singleProduct
00:05:04,094 TRACE [ca.sait.mystore.dao.ProductQueryImpl] (default task-1) Entered singleProduct()
00:05:04,096 TRACE [ca.sait.mystore.dao.ProductQueryImpl] (default task-1) PreparedStatment connection is active: true
00:05:04,096 TRACE [ca.sait.mystore.dao.ProductQueryImpl] (default task-1) productUuid passed through ProductQueryImpl: 00b6d373-af18-54ed-f8c9-7f9d986a834a
00:05:04,097 ERROR [ca.sait.mystore.dao.ProductQueryImpl] (default task-1) Product not found
00:05:04,098 DEBUG [ca.sait.mystore.interceptors.LogInterceptors] (default task-1) Returning Null
00:05:04,098 TRACE [ca.sait.mystore.interceptors.LogInterceptors] (default task-1) Exited logInterceptor(context)
00:05:04,099 TRACE [ca.sait.mystore.mvc.model.ProductModel] (default task-1) Following UUID passed through Model:  00b6d373-af18-54ed-f8c9-7f9d986a834a
00:05:04,099 TRACE [ca.sait.mystore.mvc.model.ProductModel] (default task-1) Exited postConstruct()

“false”是什么意思?是指
sResult.next()
返回false吗?如果是这种情况,那么SQL没有找到匹配的行。您是否尝试过将
sPre.setBytes(…)
更改为
sPre.setString(…)
并将UUID作为字符串传递?在[derby]数据库表产品中,列OID的数据类型是什么?是否确实为
productUuid
提供了正确的值?
sResult.next()
显示为false,很抱歉没有正确澄清。derby中OID的数据类型是char 16位数据。我正在使用btyeBuffer包装uuid。在我看来,在您发布的这行代码中-
sPre.setBytes(1,UUIDUtils.asBytes(productUuid))-生成的值在数据库中不存在。有什么方法可以验证这一点吗?什么是“false”?是指
sResult.next()
返回false?如果是这种情况,那么SQL没有找到匹配的行。您是否尝试过将
sPre.setBytes(…)
更改为
sPre.setString(…)
并将UUID作为字符串传递?在[derby]数据库表产品中,列OID的数据类型是什么?是否确实为
productUuid
提供了正确的值?
sResult.next()
显示为false,很抱歉没有正确澄清。derby中OID的数据类型是char 16位数据。我正在使用btyeBuffer包装uuid。在我看来,在您发布的这行代码中-
sPre.setBytes(1,UUIDUtils.asBytes(productUuid))-生成的值在数据库中不存在。有什么方法可以验证这一点吗?