Почему мой набор результатов будет ложным? - PullRequest
1 голос
/ 24 апреля 2019

Я работаю над проектом для своего класса по программированию, и учитель рекомендует использовать стековый поток для помощи. Моя проблема заключается в следующем: по моему, если с sResult.next() возвращается false. Я пытаюсь получить одну строку из моей базы данных дерби.

Я подтвердил, что мой продуктUuid получает UUID, подготовленное заявление активно. Я проверил, что мой 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()
...