RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / user-252649

YuriiS's questions

Martin Hope
YuriiS
Asked: 2022-09-06 05:17:56 +0000 UTC

排序失败

  • 0

我有这个任务:

我得到一个书名列表作为输入。分发书籍,使每个书架上的书籍数量大致相同。书籍应按字母顺序从第一个书架到最后一个书架排序。架子的数量是恒定的 5 件。归还整理在书架上的书籍

private static List<ArrayList<Book>> getShelvesOfBooks(List<Book> books){

        List<Book> sortedBooks = books.stream()
                                .sorted(Comparator.comparing(Book::getName))
                                .collect(Collectors.toList());

        List<ArrayList<Book>> shelves = new ArrayList<>();
        ArrayList<Book> shelf1 = new ArrayList<>();
        ArrayList<Book> shelf2 = new ArrayList<>();
        ArrayList<Book> shelf3 = new ArrayList<>();
        ArrayList<Book> shelf4 = new ArrayList<>();
        ArrayList<Book> shelf5 = new ArrayList<>();

        for (int i = 0; i < sortedBooks.size(); i++) {
            if (i % 5 == 0){
                shelf1.add(sortedBooks.get(i));
            }
            if (i % 5 == 1){
                shelf2.add(sortedBooks.get(i));

            }
            if (i % 5 == 2){
                shelf3.add(sortedBooks.get(i));

            }
            if (i % 5 == 3){
                shelf4.add(sortedBooks.get(i));

            }
            if (i % 5 == 4){
                shelf5.add(sortedBooks.get(i));

            }
        }

        shelves.add(shelf1);
        shelves.add(shelf2);
        shelves.add(shelf3);
        shelves.add(shelf4);
        shelves.add(shelf5);

        return shelves;
    }

在这种情况下,书籍按字母顺序排序,但最终以错误的顺序出现在书架上。

shelf1 = [Book[name='Java в действии'], Book[name='Повесть о настоящем человеке']]
shelf2 = [Book[name='Аэропорт'], Book[name='Сказки']]
shelf3 = [Book[name='Война и мир'], Book[name='Собака Баскервилей']]
shelf4 = [Book[name='Игра престолов'], Book[name='Том Сойер']]
shelf5 = [Book[name='Мастер и Маргарита'], Book[name='Цитадель']]

排序后如何下订单

shelf1 = [Book[name='Java в действии'], [name='Аэропорт']]
shelf2 = [Book[name='Война и мир'], Book[name='Игра престолов']]
shelf3 = [Book[name='Мастер и Маргарита'], Book[name='Повесть о настоящем человеке']]
...

动作的算法会有所不同。可能有必要在将书插入书架之前进行动态分类。我只是不知道如何做到这一点,而且每个书架上仍然有大约相同数量的书籍。当书的数量不是 5 的倍数时,必须从第一个书架开始添加。也就是说,如果有 7 本书,那么第一层和第二层书架上会有两本书,其他书架上有一本。

java сортировка
  • 3 个回答
  • 81 Views
Martin Hope
YuriiS
Asked: 2022-05-10 16:48:18 +0000 UTC

仅从字符串中获取唯一元素

  • 0

任务是从字符串中仅获取唯一元素,必须删除所有重复元素。例子:

Input:
String line = "Однажды в стране и однажды в мире";
Output:
"стране и мире"

首先我得到一个单词数组

String[] words = str.replaceAll("[^\\da-zA-Za-яёА-ЯЁ ]", "").toLowerCase().split(" ");

然后我需要遍历这个数组并将第一个元素与后续元素进行比较,如果发现重复,则获取下一个元素,如果不重复,则将其放入List<String> uniqueWords = new ArrayList<>() 我写的列表中:

for (int i = 0; i < words.length; i++) {
    String temp = words[i];
    for (int j = 0; j < uniqueWords.size(); j++) {
        if (uniqueWords.get(j).equals(temp)){
            break;
        } else {
             uniqueWords.add(temp);
           }
      }
  }

for(String cell : uniqueWords){
    result.append(cell).append(" ");
 }
System.out.println(result);

但它不起作用。我遗漏了一些东西并且做错了,但我无法弄清楚。我想在不使用Map I ask for help in this matter 的情况下做到这一点。

java
  • 3 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2022-08-28 19:03:34 +0000 UTC

找到最接近给定数字的三个数组元素的总和

  • 0

给你一个由n 个数字组成的数组(数字可以是正数也可以是负数)和一个数字t。有必要找到最接近t的数组的三个元素的总和。例如 n = [-1, 2, 1, -4]; t = 1; 总和= -1 + 2 + 1 = 2;

我不知道如何遍历数组以获取所有可能选项的三个元素的总和。帮助我理解

java
  • 2 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-05-23 14:14:51 +0000 UTC

为什么交叉连接在使用 count() 函数的查询中起作用?

  • 1

我正在spring mvc使用Oracle. hibernate当我对数据库进行查询并选择所有数据时,得到一个对象列表,然后我获取这个列表的大小,然后一切正常。但是从数据库中提取所有数据是不好的。我需要发出一个请求,该请求将返回满足传递给请求的参数的行数。为此,我正在尝试使用Criteria. 我创建了一个构建器、一个谓词并执行了一个查询,但结果不是我所期望的。查询中的 Hibernate 进行交叉连接,然后将表中的所有行乘以包含所需参数的行。表中只有7条记录,其中只有4条满足参数,查询结果是28条,而不是预期的4条。下面是代码片段。实体类:

@Entity(name = "Relationship")
@Table(name = "RELATIONSHIP")
public class Relationship extends IdEntity{
    private Long id;
    private User userFrom;
    private User userTo;
    private Date acceptedFriends;
    private RelationshipStatusType statusType;
    private Set<User> users = new HashSet<>();

    public Relationship() {
    }

    @Id
    @SequenceGenerator(name = "R_SHIP_SQ", sequenceName = "RELATIONSHIP_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "R_SHIP_SQ")
    @Column(name = "RELATIONSHIP_ID")
    @Override
    public Long getId() {
        return id;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_USER_FROM")
    public User getUserFrom() {
        return userFrom;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_USER_TO")
    public User getUserTo() {
        return userTo;
    }

    @Enumerated(EnumType.STRING)
    @Column(name = "STATUS_TYPE")
    public RelationshipStatusType getStatusType() {
        return statusType;
    }

    @JsonIgnore
    @ManyToMany(mappedBy = "statuses")
    Set<User> getUsers() {
        return users;
    }

枚举类:

public enum RelationshipStatusType {
    REQUESTED("REQUESTED"),
    CANCELED("CANCELED"),
    DECLINED("DECLINED"),
    DELETED("DELETED"),
    ACCEPTED("ACCEPTED");

    private String value;

    RelationshipStatusType(final String value){
        this.value = value;
    }

    public String getValue(){
        return value;
    }

    @Override
    public String toString(){
        return this.getValue();
    }
}

DAO:

@Repository("relationshipDAO")
@Transactional
public class RelationshipDAO extends GeneralDAO<Relationship> {

    private static final String GET_RELATIONSHIP = "SELECT * FROM RELATIONSHIP WHERE ID_USER_FROM = ? AND ID_USER_TO = ?";

    @SuppressWarnings("unchecked")
    public Relationship getRelationship(Long idUserFrom, Long idUserTo)throws InternalServerError {
        Relationship relationship;
        NativeQuery<Relationship> query = (NativeQuery<Relationship>) getEntityManager().createNativeQuery(GET_RELATIONSHIP, Relationship.class);
        try {
            relationship = query.setParameter(1, idUserFrom).setParameter(2, idUserTo).uniqueResult();
        }catch (NoResultException e){
            System.err.println(e.getMessage());
            throw e;
        }
        return relationship;
    }

    @SuppressWarnings("unchecked")
    public long getQuantityFriends(Long idUser, String status) throws InternalServerError{

        CriteriaBuilder criteriaBuilder = getEntityManager().getCriteriaBuilder();
        CriteriaQuery<Long> criteriaQuery = criteriaBuilder.createQuery(Long.class);
        Root<Relationship> relationshipRoot = criteriaQuery.from(Relationship.class);
        Predicate idUserPredicate = criteriaBuilder.equal(relationshipRoot.get("userTo"), idUser);
        Predicate statusPredicate = criteriaBuilder.equal(relationshipRoot.get("statusType"), RelationshipStatusType.valueOf(status));
        criteriaQuery.select(criteriaBuilder.count(criteriaQuery.from(Relationship.class)))
                .where(criteriaBuilder.and(idUserPredicate, statusPredicate));
        TypedQuery<Long> query = getEntityManager().createQuery(criteriaQuery);
        System.out.println("Quantity rows = " + query.getSingleResult());
        return query.getSingleResult();
    }
}

作为请求的结果,我在控制台中看到了这个:

23-May-2019 01:01:22.049 INFO [http-nio-8080-exec-9] org.hibernate.hql.internal.QueryTranslatorFactoryInitiator.initiateService HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select count(relationsh1_.RELATIONSHIP_ID) as col_0_0_ from RELATIONSHIP relationsh0_ cross join RELATIONSHIP relationsh1_ where relationsh0_.ID_USER_TO=90 and relationsh0_.STATUS_TYPE=?
Quantity rows = 28

为什么会弹出以cross join​​及如何解决?

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-01-16 03:26:38 +0000 UTC

无法从数据库中获取数据

  • 0

我正在尝试制作一个迷你应用程序,类似于公告板。我似乎无法让它通过过滤器进行搜索。我试过了CriteriaBuilder,它没有弄清楚那里有什么以及为什么。然后我决定通过创建对数据库的动态查询来进行过滤。数据库Oracle。实体Ad- 声明:

@Entity
@Table(name = "AD")
public class Ad extends IdEntity{
    private Long id;
    private User user;
    private String name;
    private String description;
    private Integer price;
    private String city;
    private String numberPhone;
    private Date dateFrom;
    private Date dateTo;
    private CurrencyType currencyType;
    private CategoryType categoryType;
    private SubcategoryType subcategoryType;

    public Ad() {
    }

    @Id
    @SequenceGenerator(name = "AD_SQ", sequenceName = "AD_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "AD_SQ")
    @Column(name = "ID_AD")
    @Override
    public Long getId() {
        return id;
    }

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ID_USER")
    public User getUser() {
        return user;
    }

    @Column(name = "AD_NAME", nullable = false)
    public String getName() {
        return name;
    }

    @Column(name = "AD_DESCRIPTION", nullable = false)
    public String getDescription() {
        return description;
    }

    @Column(name = "PRICE", nullable = false)
    public Integer getPrice() {
        return price;
    }

    @Column(name = "CITY", nullable = false)
    public String getCity() {
        return city;
    }

    @Column(name = "NUMBER_PHONE", nullable = false)
    public String getNumberPhone() {
        return numberPhone;
    }

    @Column(name = "DATE_FROM", nullable = false)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy'T'hh:mm")
    public Date getDateFrom() {
        return dateFrom;
    }

    @Column(name = "DATE_TO", nullable = false)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy'T'hh:mm")
    public Date getDateTo() {
        return dateTo;
    }

    @Enumerated(EnumType.STRING)
    @Column(name = "CURRENCY_TYPE", nullable = false)
    public CurrencyType getCurrencyType() {
        return currencyType;
    }

    @Enumerated(EnumType.STRING)
    @Column(name = "CATEGORY_TYPE", nullable = false)
    public CategoryType getCategoryType() {
        return categoryType;
    }

    @Enumerated(EnumType.STRING)
    @Column(name = "SUBCATEGORY_TYPE", nullable = false)
    public SubcategoryType getSubcategoryType() {
        return subcategoryType;
    }

    @JsonCreator
    public static Ad createFromJson(String jsonString){
        ObjectMapper objectMapper = new ObjectMapper();
        Ad ad = null;

        try {
            ad = objectMapper.readValue(jsonString, Ad.class);
        }catch (IOException e){
            e.printStackTrace();
        }
        return ad;
    //getters and setters, equals and hash code 
    //I don’t give this data, but they exist
    }

Filter:

public class Filter {
    private CategoryType categoryType;
    private String city;
    private String description;

    public Filter() {
    }

    public CategoryType getCategoryType() {
        return categoryType;
    }

    public void setCategory(CategoryType categoryType) {
        this.categoryType = categoryType;
    }

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @JsonCreator
    public static Filter createFromJson(String jsonString){
        ObjectMapper objectMapper = new ObjectMapper();
        Filter filter = null;

        try {
            filter = objectMapper.readValue(jsonString, Filter.class);
        }catch (IOException e){
            e.printStackTrace();
        }
        return filter;
    }

    @Override
    public String toString() {
        return new StringJoiner(", ", Filter.class.getSimpleName() + "[", "]")
                .add("categoryType=" + categoryType)
                .add("city='" + city + "'")
                .add("description='" + description + "'")
                .toString();
    }
}

类AdDAO:

@Repository("adDAO")
@Transactional
public class AdDAO extends GeneralDAO<Ad> {

    @SuppressWarnings("SqlResolve")
    private static final String SQL_GET_ADS_BY_CURRENT_DATE = "SELECT * FROM AD WHERE ROWNUM < 101 AND DATE_TO > ? ORDER BY DATE_TO DESC";
    private static final String SQL_GET_ADS_BY_FILTER = "SELECT * FROM AD WHERE ROWNUM < 101 AND DATE_TO > ? AND AD_DESCRIPTION LIKE ?";

    //1. получить текущую дату
    //2. сравнить в запросе текущую дату с датой объекта
    //3. если дата объекта меньше текущей даты то взять этот объект из базы данных
    //4. выводить только 100 последних объектов удовлетворяющих условию по дате
    @SuppressWarnings("unchecked")
    public List<Ad> get100Ad(){
        Date currentDate = new Date();

        NativeQuery<Ad> query = (NativeQuery<Ad>) getEntityManager().createNativeQuery(SQL_GET_ADS_BY_CURRENT_DATE, Ad.class);
        return query.setParameter(1, currentDate, TemporalType.TIMESTAMP).getResultList();
    }

    @SuppressWarnings("unchecked")
    public List<Ad> findAds(Filter filter){
        Date currentDate = new Date();
        String findByWord = filter.getDescription();
        System.out.println("FindByWord " + findByWord);

        NativeQuery<Ad> adQuery = (NativeQuery<Ad>) getEntityManager().createNativeQuery(createQuery(filter), Ad.class);
        adQuery.setParameter(2, "%'" + findByWord + "'%");
        adQuery.setParameter(1, currentDate, TemporalType.TIMESTAMP);

        return adQuery.getResultList();
    }

    private String createQuery(Filter filter){
        StringBuilder stringBuilder = new StringBuilder();

        stringBuilder.append(SQL_GET_ADS_BY_FILTER);

        if (filter.getCategoryType() != null){
            stringBuilder.append(" AND CATEGORY_TYPE = '").append(filter.getCategoryType().toString()).append("'");
        }

        if (filter.getCity() != null){
            stringBuilder.append(" AND CITY = '").append(filter.getCity()).append("'");
        }

        return stringBuilder.append(" ORDER BY DATE_TO DESC").toString();
    }
}

获取最后一百个广告的方法get100Ad(),考虑到日期,工作并返回找到的广告。并且该方法findAds(Filter filter)不断返回一个空列表,尽管数据库中有满足请求的对象。告诉我出了什么事?我的错误或错误是什么?

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-12-07 20:26:59 +0000 UTC

如图所示填充数组(求解 NxN 数组。)

  • -1

在此处输入图像描述

到目前为止,我已经设法只填充i[0] i[1]和j[0] j[1],即只有两行和两列。这是代码:

    private static final int ROWS = 6;
    private static final int COLUMN = 6;

        public static void main(String[] args) {
            show(deepArray1());

        }

        private static int[][] deepArray1(){
            int[][] arrays = new int[ROWS][COLUMN];
            int x = 1;
            int y = 1;

            for (int i = 0; i < ROWS; i++) {
                for (int j = 0; j < COLUMN; j++) {
                    if (i == 0 || j == 0){
                        arrays[i][j] = 1;
                    }
                    if (i == 1){
                        arrays[i][j] = x++;
                    }
                    if (j == 1){
                        arrays[i][j] = y++;
                    }

                }
            }
            return arrays;
        }

private static void show(int[][] arrays){
        for (int i = 0; i < ROWS; i++) {
            for (int j = 0; j < COLUMN; j++) {
                System.out.print(" " + arrays[i][j] + " ");
            }
            System.out.println();
        }
    }

此外,我了解单元格[2] [2]填充了单元格总和获得的值[2][1] + [1][2],随后的单元格根据此原理填充。在这种情况下,数组的长度已经等于(COLUMN / 3) * 2,即原始长度的三分之二。但我不知道如何用代码编写它。请帮我完成这部分任务。

java
  • 3 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-09-30 00:13:46 +0000 UTC

如何将查询到数据库的结果写入变量?

  • 1

我查询String SQL_SUM_FILES_SIZE_IN_STORAGE = "SELECT SUM(SIZE_FILE) FROM FILE_ JOIN STORAGE_ ON FILE_.STORAGE_ID_F = STORAGE_.STORAGE_ID WHERE STORAGE_.STORAGE_ID = :idParam";数据库,使用数据库Oracle,得到列中所有值的总和SIZE_FILE。我正在尝试这样做:

public Integer sumSizeFilesInStorage(Long idStorage){
    Integer amount;

    try (Session session = createSessionFactory().openSession()){
        NativeQuery query = session.createNativeQuery(SQL_SUM_FILES_SIZE_IN_STORAGE);
        query.setParameter("idParam", idStorage);
        amount = (Integer) query.getSingleResult();
    }
    return amount;
}

但我收到一个错误:

Exception in thread "main" java.lang.IllegalArgumentException: Unknown parameter position: 1
    at org.hibernate.query.internal.QueryParameterBindingsImpl.getBinding(QueryParameterBindingsImpl.java:240)
    at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:503)
    at org.hibernate.query.internal.NativeQueryImpl.setParameter(NativeQueryImpl.java:592)
    at org.hibernate.query.internal.NativeQueryImpl.setParameter(NativeQueryImpl.java:56)
    at dz_spring_3.dao.FileDAO.sumSizeFilesInStorage(FileDAO.java:122)
    at dz_spring_3.Demo.main(Demo.java:11)

如果我尝试这样做amount = (Long) query.uniqueResult();,我会收到一个错误:

Exception in thread "main" java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Long
    at dz_spring_3.dao.FileDAO.sumSizeFilesInStorage(FileDAO.java:123)
    at dz_spring_3.Demo.main(Demo.java:11)

但我不知道如何将其转换为正确的类型((

告诉我如何将从请求中收到的金额分配给变量Integer amount?

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-09-18 20:33:49 +0000 UTC

从数据库获取数据并在Oracle数据库中保存对象的问题

  • 4

我需要通过查询file从数据库中获取对象列表。GET有两个类:

File:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.persistence.*;
import java.io.IOException;
import java.util.Objects;

@Entity
@Table(name = "FILE_")
public class File {

    private Long id;
    private Long storageId;
    private String name;
    private String format;
    private Long size;
    private Storage storage;

    public File() {
    }

    @Id
    @SequenceGenerator(name = "F_SQ", sequenceName = "FILE_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "F_SQ")
    @Column(name = "FILE_ID")
    public Long getId() {
        return id;
    }

    @JsonIgnore
    //@JoinColumn(name = "STORAGE_ID_F")
    public Long getStorageId() {
        return storageId;
    }

    @Column(name = "NAME_FILE")
    public String getName() {
        return name;
    }

    @Column(name = "FORMAT_FILE")
    public String getFormat() {
        return format;
    }

    @Column(name = "SIZE_FILE")
    public Long getSize() {
        return size;
    }

    @JsonIgnore
    @ManyToOne(targetEntity = Storage.class, fetch = FetchType.LAZY)
    @JoinColumn(name = "STORAGE_ID_F")
    public Storage getStorage() {
        return storage;
    }

    @JsonCreator
    public static File createFromJson(String jsonString){

        ObjectMapper objectMapper = new ObjectMapper();

        File file = null;
        try {
            file = objectMapper.readValue(jsonString, File.class);
        }catch (IOException e){
            e.printStackTrace();
        }

        return file;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setStorageId(Long storageId) {
        this.storageId = storageId;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setFormat(String format) {
        this.format = format;
    }

    public void setSize(Long size) {
        this.size = size;
    }

    public void setStorage(Storage storage) {
        this.storage = storage;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        File file = (File) o;
        return Objects.equals(storageId, file.storageId) &&
                Objects.equals(name, file.name) &&
                Objects.equals(format, file.format) &&
                Objects.equals(size, file.size) &&
                Objects.equals(storage, file.storage);
    }

    @Override
    public int hashCode() {
        return Objects.hash(storageId, name, format, size, storage);
    }

    @Override
    public String toString() {
        return "File{" +
                "id=" + id +
                " name='" + name + '\'' +
                ", format='" + format + '\'' +
                ", size=" + size +
                ", storage=" + storage.getId() +
                '}';
    }
}

Storage:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.persistence.*;
import java.io.IOException;
import java.util.List;
import java.util.Objects;

@Entity
@Table(name = "STORAGE_")
public class Storage {

    private Long id;
    private String formatsSupported;
    private String storageCountry;
    private Long storageSize;
    private List<File> files;

    public Storage() {
    }

    @Id
    @SequenceGenerator(name = "ST_SQ", sequenceName = "STORAGE_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ST_SQ")
    @Column(name = "STORAGE_ID")
    public Long getId() {
        return id;
    }

    @Column(name = "FORMAT_SUPPORTED")
    public String getFormatsSupported() {
        return formatsSupported;
    }

    @Column(name = "COUNTRY_STORAGE")
    public String getStorageCountry() {
        return storageCountry;
    }

    @Column(name = "SIZE_STORAGE")
    public Long getStorageSize() {
        return storageSize;
    }

    @OneToMany(mappedBy = "storage", fetch = FetchType.LAZY, targetEntity = File.class)
    public List<File> getFiles() {
        return files;
    }

    @JsonCreator
    public static Storage createFromJson(String jsonString){

        ObjectMapper objectMapper = new ObjectMapper();

        Storage storage = null;
        try {
            storage = objectMapper.readValue(jsonString, Storage.class);
        }catch (IOException e){
            e.printStackTrace();
        }

        return storage;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setFormatsSupported(String formatsSupported) {
        this.formatsSupported = formatsSupported;
    }

    public void setStorageCountry(String storageCountry) {
        this.storageCountry = storageCountry;
    }

    public void setStorageSize(Long storageSize) {
        this.storageSize = storageSize;
    }

    public void setFiles(List<File> files) {
        this.files = files;
    }
}

在类Controller中,一个方法请求从数据库中获取对象列表,使用数据库Oracle:

import com.fasterxml.jackson.databind.ObjectMapper;
import dz_spring_3.dao.FileDAO;
import dz_spring_3.dao.StorageDAO;
import dz_spring_3.model.File;
import dz_spring_3.model.Storage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;

@org.springframework.stereotype.Controller
public class Controller {

    @Autowired
    Service service;

    @Autowired
    StorageDAO storageDAO;

    @Autowired
    FileDAO fileDAO;

    @RequestMapping(method = RequestMethod.POST, value = "/saveFile", produces = "text/plain")
    @ResponseBody
    public String saveFile(HttpServletRequest req)throws IOException {

        File file = mappingFile(req);

        if (file.getId() != null)
            return "Storage with id - " + file.getId() + " can`t be saved in DB.";

        file.setStorageId(storageDAO.findById(3L).getId());

        service.saveFile(file);

        return "File with id - " + file.getId() + " saved success.";
    }

    @RequestMapping(method = RequestMethod.GET, value = "/file", produces = "text/plain")
    @ResponseBody
    public String getAllFile(){

        return service.getAllFile().toString();
    }

    private File mappingFile(HttpServletRequest req)throws IOException {

        StringBuilder stringBuilder = new StringBuilder();

        try(BufferedReader reader = req.getReader()) {
            String line;

            while ((line = reader.readLine()) != null){
                System.out.println("Line in wile (mapping) - " + line);
                stringBuilder.append(line);
            }
        }

        ObjectMapper objectMapper = new ObjectMapper();

        String input = objectMapper.writeValueAsString(stringBuilder.toString());

        File file = objectMapper.convertValue(input, File.class);

        return file;
    }

类FileDAO:

import dz_spring_3.model.File;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.NativeQuery;

import javax.persistence.TypedQuery;
import java.util.List;

public class FileDAO extends GeneralDAO<File> {

    private static final String SQL_GET_ALL_FILES = "SELECT * FROM FILE_";
    private static final String SQL_GET_BY_ID_FILE = "SELECT * FROM FILE_ WHERE FILE_ID = ?";

    @SuppressWarnings("unchecked")
    public List<File> getAllFile(){
        List<File> files;

        try(Session session = createSessionFactory().openSession()) {

            NativeQuery query = session.createNativeQuery(SQL_GET_ALL_FILES);
            files = query.addEntity(File.class).list();

        }catch (HibernateException e){
            System.err.println(e.getMessage());
            throw new HibernateException("Operation failed");
        }
        return files;
    }

    public File saveFile(File file) {

        Transaction tr = null;
        try(Session session = createSessionFactory().openSession()) {
            tr = session.getTransaction();
            tr.begin();

            session.save(file);

            tr.commit();
        }catch (HibernateException e){
            System.err.println("Save is failed.");
            System.err.println(e.getMessage());
            if (tr != null)
                tr.rollback();
        }

        return file;
    }

    public void updateFile(File file){

        Transaction transaction = null;
        try(Session session = createSessionFactory().openSession()) {
            transaction = session.getTransaction();
            transaction.begin();

            session.update(file);

            transaction.commit();
        }
        catch (HibernateException e){

            if (transaction != null)
                transaction.rollback();

            System.err.println(e.getMessage());
            throw new HibernateException("Operation failed.");
        }
    }

    public void deleteFile(Long id){

        Transaction transaction = null;
        try(Session session = createSessionFactory().openSession()) {
            transaction = session.getTransaction();
            transaction.begin();

            session.delete(findById(id));

            transaction.commit();
        }
        catch (HibernateException e){

            if (transaction != null)
                transaction.rollback();

            System.err.println(e.getMessage());
            throw new HibernateException("Operation failed.");
        }
    }

    @SuppressWarnings("unchecked")
    public File findById(Long id){

        File file;

        try(Session session = createSessionFactory().openSession()) {

            NativeQuery query = session.createNativeQuery(SQL_GET_BY_ID_FILE);
            if (getSingleResult(query, id) == null){
                file = null;
            }
            else
                file = (File) query.addEntity(File.class).setParameter(1, id).getSingleResult();

        }catch (HibernateException e){
            System.err.println(e.getMessage());
            throw new HibernateException("Operation failed.");
        }
        return file;
    }

    private <T> T getSingleResult(TypedQuery<T> query, Long id){
        query.setMaxResults(1);

        List<T> list = query.setParameter(1, id).getResultList();

        if (list == null || list.isEmpty()){

            return null;
        }
        return list.get(0);
    }
}

在我启动服务器Tomcat并发出请求 http://localhost:8080/file后,出现了几个错误,这是堆栈跟踪:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    Root Cause

    javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
        org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
        org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
        org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423)
        dz_spring_3.dao.FileDAO.getAllFile(FileDAO.java:24)
        dz_spring_3.Service.getAllFile(Service.java:56)
        dz_spring_3.Controller.getAllFile(Controller.java:111)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:498)
        org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    Root Cause

    org.hibernate.exception.GenericJDBCException: could not execute query
        org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)
        org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
        org.hibernate.loader.Loader.doList(Loader.java:2695)
        org.hibernate.loader.Loader.doList(Loader.java:2675)
        org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507)
        org.hibernate.loader.Loader.list(Loader.java:2502)
        org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335)
        org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2161)
        org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016)
        org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152)
        org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
        dz_spring_3.dao.FileDAO.getAllFile(FileDAO.java:24)
        dz_spring_3.Service.getAllFile(Service.java:56)
        dz_spring_3.Controller.getAllFile(Controller.java:111)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:498)
        org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    Root Cause

    java.sql.SQLException: Недопустимое имя столбца
        oracle.jdbc.driver.OracleStatement.getColumnIndex(OracleStatement.java:3965)
        oracle.jdbc.driver.InsensitiveScrollableResultSet.findColumn(InsensitiveScrollableResultSet.java:299)
        oracle.jdbc.driver.GeneratedResultSet.getLong(GeneratedResultSet.java:1361)
        org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$2.doExtract(BigIntTypeDescriptor.java:63)
        org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)
        org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261)
        org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)
        org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247)
        org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:333)
        org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2854)
        org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1747)
        org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1673)
        org.hibernate.loader.Loader.getRow(Loader.java:1562)
        org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:732)
        org.hibernate.loader.Loader.processResultSet(Loader.java:991)
        org.hibernate.loader.Loader.doQuery(Loader.java:949)
        org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
        org.hibernate.loader.Loader.doList(Loader.java:2692)
        org.hibernate.loader.Loader.doList(Loader.java:2675)
        org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2507)
        org.hibernate.loader.Loader.list(Loader.java:2502)
        org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:335)
        org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2161)
        org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016)
        org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152)
        org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
        dz_spring_3.dao.FileDAO.getAllFile(FileDAO.java:24)
        dz_spring_3.Service.getAllFile(Service.java:56)
        dz_spring_3.Controller.getAllFile(Controller.java:111)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:498)
        org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
        org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    Note The full stack trace of the root cause is available in the server logs.

据我了解,这个问题是由于字段storageId,当我完全删除它时,会读取数据库中的数据。但是我需要这个字段,以便将对象存储在数据库中以file访问该文件所在id的存储空间。storage好吧,当您尝试file通过请求保存到数据库时Post,也会出现错误:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Unable to release JDBC Connection
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
</pre><p><b>Root Cause</b></p><pre>javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Unable to release JDBC Connection
org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149)
    org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157)
    org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1423)
    org.hibernate.query.Query.getResultList(Query.java:146)
    dz_spring_3.dao.StorageDAO.getSingleResult(StorageDAO.java:119)
    dz_spring_3.dao.StorageDAO.findById(StorageDAO.java:103)
    dz_spring_3.Controller.saveFile(Controller.java:98)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
</pre><p><b>Root Cause</b></p><pre>org.hibernate.exception.JDBCConnectionException: Unable to release JDBC Connection
    org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:115)
    org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42)
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:111)
    org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:97)
    org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.releaseConnection(LogicalConnectionManagedImpl.java:199)
    org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl.afterTransaction(LogicalConnectionManagedImpl.java:162)
    org.hibernate.engine.jdbc.internal.JdbcCoordinatorImpl.afterTransaction(JdbcCoordinatorImpl.java:288)
    org.hibernate.internal.SessionImpl.afterOperation(SessionImpl.java:557)
    org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:2168)
    org.hibernate.internal.AbstractSharedSessionContract.list(AbstractSharedSessionContract.java:1016)
    org.hibernate.query.internal.NativeQueryImpl.doList(NativeQueryImpl.java:152)
    org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1414)
    org.hibernate.query.Query.getResultList(Query.java:146)
    dz_spring_3.dao.StorageDAO.getSingleResult(StorageDAO.java:119)
    dz_spring_3.dao.StorageDAO.findById(StorageDAO.java:103)
    dz_spring_3.Controller.saveFile(Controller.java:98)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:498)
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
</pre><p><b>Root Cause</b></p><pre>java.sql.SQLRecoverableException: Закрытое соединение

введите сюда описание изображения

文件hibernate.cfg.xml:

hibernate.cfg.xml

<code>Postman</code>

Что-то делаю не правильно, а вот что именно не могу понять. Прошу подсказать или объяснить, как мне получить список объектов и сохранять объекты file в базу данных.

java
  • 2 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-07-06 16:49:36 +0000 UTC

未从 POST 请求映射的对象

  • 0

我的任务是创建post запрос一个对象,从中获取一个对象Item并将其保存到数据库Oracle中。为了模拟一个请求,我在其中使用Postmen并创建了一个这样的请求: 在此处输入图像描述

我使用该库来处理jackson:

<dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.6.3</version>
    </dependency>

实体类:

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "ITEM")
public class Item {
    private Long id;
    private String name;
    private Date dateCreated;
    private Date lastUpdateDate;
    private String description;

    public Item() {
    }

    public Item(String name, Date dateCreated, Date lastUpdateDate, String description) {
        this.name = name;
        this.dateCreated = dateCreated;
        this.lastUpdateDate = lastUpdateDate;
        this.description = description;
    }

    @Id
    @SequenceGenerator(name = "IT_SQ", sequenceName = "ITEM_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IT_SQ")
    public Long getId() {
        return id;
    }

    @Column(name = "NAME")
    public String getName() {
        return name;
    }

    @Column(name = "DATE_CREATED")
    public Date getDateCreated() {
        return dateCreated;
    }

    @Column(name = "LAST_UPDATE_DATE")
    public Date getLastUpdateDate() {
        return lastUpdateDate;
    }

    @Column(name = "DESCRIPTION")
    public String getDescription() {
        return description;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDateCreated(Date dateCreated) {
        this.dateCreated = dateCreated;
    }

    public void setLastUpdateDate(Date lastUpdateDate) {
        this.lastUpdateDate = lastUpdateDate;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Item{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", dateCreated=" + dateCreated +
                ", lastUpdateDate=" + lastUpdateDate +
                ", description='" + description + '\'' +
                '}';
    }
}

方法doPost:

import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;

@WebServlet(urlPatterns = "/test")
public class MyServlet extends HttpServlet {

    private ItemDAO itemDAO = new ItemDAO();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws IOException {
        //передать параметр из строки браузера в метод
        //найти по параметру объект в базе
        //вернуть объект в строковом представлении в браузер

        //String id = req.getParameter("param");

        //long idItem = Long.parseLong(id);

        //ItemDAO itemDAO = new ItemDAO();

        //itemDAO.findById(Long.parseLong(req.getParameter("param")));

        resp.getWriter().println(itemDAO.findById(Long.parseLong(req.getParameter("param"))).toString());

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{
        //считать данные из запроса
        //по ключам промапить объект
        //сделать валидацию, проверить есть ли объект с таким айди в базе
        //сохранить объект в базу
        StringBuilder stringBuilder = new StringBuilder();
        String line = null;

        BufferedReader reader = req.getReader();
        while ((line = reader.readLine()) != null){
            stringBuilder.append(line);
        }

        String json = stringBuilder.toString();

        System.out.println("Input string - " + json);

        ObjectMapper objectMapper = new ObjectMapper();
        Item item = objectMapper.convertValue(json, Item.class);

        System.out.println("Object after mapping: " + item);


    }

我运行它来检查对象是如何映射的,我得到一个错误:

06-Jul-2018 11:35:38.841 SEVERE [http-nio-8080-exec-5] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [MyServlet] in context with path [] threw exception
 java.lang.IllegalArgumentException: Can not instantiate value of type [simple type, class Item] from String value ('{    "name":"Item1",    "dateCreated":"04.07.2018",    "lastUpdateDate":"05.07.2018",    "description":"description1"}'); no single-String constructor/factory method
 at [Source: N/A; line: -1, column: -1]
    at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3459)
    at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:3378)
    at MyServlet.doPost(MyServlet.java:53)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:412)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1385)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class Item] from String value ('{    "name":"Item1",    "dateCreated":"04.07.2018",    "lastUpdateDate":"05.07.2018",    "description":"description1"}'); no single-String constructor/factory method
 at [Source: N/A; line: -1, column: -1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
    at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:878)
    at com.fasterxml.jackson.databind.deser.ValueInstantiator._createFromStringFallbacks(ValueInstantiator.java:281)
    at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:284)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1176)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:145)
    at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
    at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:3454)
    ... 26 more

告诉我我做错了什么以及如何修复我的错误以便创建一个对象Item。

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-06-27 01:01:46 +0000 UTC

尝试从数据库中删除时未在休眠中定义的实体

  • 0

我无法弄清楚为什么Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: java.lang.Long在运行 delete 方法时会发生错误(Long id)。这些方法save(Item item), update(Item item) and findById(Long id可以正常工作。请告诉我可能出了什么问题。类Item:

import javax.persistence.*;
import java.util.Date;

@Entity
@Table(name = "ITEM")
public class Item {
    private Long id;
    private String name;
    private Date dateCreated;
    private Date lastUpdateDate;
    private String description;

    public Item() {
    }

    public Item(String name, Date dateCreated, Date lastUpdateDate, String description) {
        this.name = name;
        this.dateCreated = dateCreated;
        this.lastUpdateDate = lastUpdateDate;
        this.description = description;
    }

    @Id
    @SequenceGenerator(name = "IT_SQ", sequenceName = "ITEM_SEQ", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "IT_SQ")
    public Long getId() {
        return id;
    }

    @Column(name = "NAME")
    public String getName() {
        return name;
    }

    @Column(name = "DATE_CREATED")
    public Date getDateCreated() {
        return dateCreated;
    }

    @Column(name = "LAST_UPDATE_DATE")
    public Date getLastUpdateDate() {
        return lastUpdateDate;
    }

    @Column(name = "DESCRIPTION")
    public String getDescription() {
        return description;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setDateCreated(Date dateCreated) {
        this.dateCreated = dateCreated;
    }

    public void setLastUpdateDate(Date lastUpdateDate) {
        this.lastUpdateDate = lastUpdateDate;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Override
    public String toString() {
        return "Item{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", dateCreated=" + dateCreated +
                ", lastUpdateDate=" + lastUpdateDate +
                ", description='" + description + '\'' +
                '}';
    }
}

类ItemDAO:

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.NativeQuery;

public class ItemDAO {

    private static SessionFactory sessionFactory;

    private static final String SQL_GET_ITEM_BY_ID = "SELECT * FROM ITEM WHERE ID = ?";

    public Item save(Item item){

        Transaction transaction = null;
        try(Session session = createSessionFactory().openSession()) {
            transaction = session.getTransaction();
            transaction.begin();

            session.save(item);

            transaction.commit();
            System.out.println("Saved successfully");
        }catch (HibernateException e){
            System.err.println("Saved is failed");
            System.err.println(e.getMessage());
            if (transaction != null)
                transaction.rollback();
        }
        return item;
    }

    public void update(Item item){

        Transaction transaction = null;
        try (Session session = createSessionFactory().openSession()){
            transaction = session.getTransaction();
            transaction.begin();

            session.update(item);

            System.out.println("Update was successful");

            transaction.commit();
        }catch (HibernateException e){
            System.err.println("Save is failed");
            System.err.println(e.getMessage());
            if (transaction != null)
                transaction.rollback();
        }
    }

    public void delete(Long id){

        Transaction transaction = null;
        try (Session session = createSessionFactory().openSession()){
            transaction = session.getTransaction();
            transaction.begin();

            session.delete(id);

            System.out.println("Recording deleted successfully");

            transaction.commit();
        }catch (HibernateException e){
            System.err.println("Save is failed");
            System.err.println(e.getMessage());
            if (transaction != null)
                transaction.rollback();
        }
    }

    @SuppressWarnings("unchecked")
    public Item findById(Long id){

        Item item;

        try (Session session = createSessionFactory().openSession()){

            NativeQuery query = session.createNativeQuery(SQL_GET_ITEM_BY_ID);
            item = (Item) query.addEntity(Item.class).setParameter(1, id).getSingleResult();

        }catch (HibernateException e){
            System.err.println("Save is failed");
            System.err.println(e.getMessage());
            throw e;
        }
        System.out.println("Save is done");

        return item;
    }

    private static SessionFactory createSessionFactory(){
        if (sessionFactory == null){
            sessionFactory = new Configuration().configure().buildSessionFactory();
        }
        return sessionFactory;
    }
}

Pom file:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>crud-servlet</groupId>
    <artifactId>crud-servlet</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0-b07</version>
            <!--<scope>provided</scope>-->
        </dependency>

        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc7</artifactId>
            <version>12.1.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.2.16.Final</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.6.3</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

文件hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@gromcode-lesson.cjqbbseqr63c.eu-central-1.rds.amazonaws.com:1521:ORCL</property>
        <property name="hibernate.connection.username">main</property>
        <property name="hibernate.connection.password">ifgjrkzr</property>

        <property name="show_sql">true</property>
        <mapping class="Item"></mapping>
    </session-factory>

    <!--<open_tag params>value</open_tag>-->
</hibernate-configuration>

实际的堆栈跟踪有错误:

    июн 26, 2018 7:35:33 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {5.2.16.Final}
июн 26, 2018 7:35:33 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
июн 26, 2018 7:35:33 PM org.hibernate.boot.jaxb.internal.stax.LocalXmlResourceResolver resolveEntity
WARN: HHH90000012: Recognized obsolete hibernate namespace http://hibernate.sourceforge.net/hibernate-configuration. Use namespace http://www.hibernate.org/dtd/hibernate-configuration instead.  Support for obsolete DTD/XSD namespaces may be removed at any time.
июн 26, 2018 7:35:34 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
июн 26, 2018 7:35:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
июн 26, 2018 7:35:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [oracle.jdbc.driver.OracleDriver] at URL [jdbc:oracle:thin:@gromcode-lesson.cjqbbseqr63c.eu-central-1.rds.amazonaws.com:1521:ORCL]
июн 26, 2018 7:35:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {user=main, password=****}
июн 26, 2018 7:35:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
июн 26, 2018 7:35:34 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
июн 26, 2018 7:35:35 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.Oracle10gDialect
Exception in thread "main" java.lang.IllegalArgumentException: Unknown entity: java.lang.Long
    at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:1000)
    at org.hibernate.internal.SessionImpl.delete(SessionImpl.java:929)
    at ItemDAO.delete(ItemDAO.java:61)
    at Demo.main(Demo.java:23)
Caused by: org.hibernate.MappingException: Unknown entity: java.lang.Long
    at org.hibernate.metamodel.internal.MetamodelImpl.entityPersister(MetamodelImpl.java:620)
    at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1635)
    at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:82)
    at org.hibernate.event.internal.DefaultDeleteEventListener.onDelete(DefaultDeleteEventListener.java:56)
    at org.hibernate.internal.SessionImpl.fireDelete(SessionImpl.java:993)
    ... 3 more

Process finished with exit code -1

一切似乎都是正确的,但某处缺少某些东西......

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-05-29 14:31:26 +0000 UTC

如何访问类字段

  • 0

请帮助我理解这个艰难的时刻。我有两个实体类User,Hotel它们有字段long id和吸气剂。一对UserDAO继承HotelDAO自其中一个通用GeneralDAO<T>方法的类public T save(T t)。该方法的逻辑如下,如果id等于则保存对象0,即if(t.getId() == 0)我将对象保存到数据库中。您能否解释一下如何访问类字段User并Hotel在其中使用它们GeneralDAO<T>?

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-04-10 21:48:52 +0000 UTC

检查一个数组的元素是否与另一个数组的元素匹配

  • 0

我有两个数组,其中包含格式作为字符串。例如:

formatsStorage [png, txt, doc]
formatsFile [jpg, txt, doc]

数组元素可以按任何顺序排列。例子:

formatsStorage [doc, png, txt]
formatsFile [txt, jpg, doc]

我需要创建一个方法来检查 , 中formatsFile的所有格式是否与formatsStorage. true如果数组中的每种格式formatsFile都在数组中formatsStorage,则该方法应返回,false如果数组formatsFile包含不在数组中的格式,则返回formatsStorage。

这是我到目前为止所做的,但它不能正常工作:

public boolean checkFormatAll(List<File> filesFrom, Storage storageTo) throws Exception {
    if (filesFrom == null || storageTo == null)
        throw new Exception("Incoming data contains an error");

    String[] formatsStorage = storageTo.getFormatSupported().split(",");

    Set<String> strings = new HashSet<>();

    for (File file : filesFrom) {
        strings.add(file.getFormat());
    }

    String[] formatsFile = strings.toArray(new String[strings.size()]);

    System.out.println("Formats in Storage " + Arrays.toString(formatsStorage));
    System.out.println("Formats in file " + Arrays.toString(formatsFile));

    boolean format = true;
    int countStorage = 0;
    int countFile = 0;

    /*if (formatsFile.length == 1){
        for (String fileFormat : formatsFile){
            for (String storageFormat : formatsStorage){
                if (fileFormat != null && storageFormat != null && fileFormat.equals(storageFormat.trim())){
                    return true;
                }
                else format = false;
            }
        }
    }*/  //Не знаю, оставлять это в отдельном ифе или всё делать в одном ?

    for (String fileFormat : formatsFile) {
        if (fileFormat != null) {
            for (String storageFormat : formatsStorage) {
                if (storageFormat != null && fileFormat.equals(storageFormat.trim()) && formatsFile.length == 1) {
                    return true;
                } else format = false;

                if (storageFormat != null && !fileFormat.equals(storageFormat.trim()) && formatsFile.length != 1) {
                    continue;
                } else format = false;

                if (storageFormat != null && !fileFormat.equals(storageFormat.trim()) && formatsFile.length - 1 != countFile) {
                    continue;
                }

                if (storageFormat != null && fileFormat.equals(storageFormat.trim())) {
                    format = true;
                    break;
                }

                System.out.println("Format in box storage - " + storageFormat + "; Line array Storage - " + countStorage);
                System.out.println("Format in box file - " + fileFormat + "; Line array File - " + countFile);

                countStorage++;
            }
            countFile++;
        }
    }
    return format;
}

我知道您需要将数组的每个元素与数组formatsFile的元素进行比较formatsStorage。为此,我通过 elements 进行双循环formatsStorage,但显然我在比较条件中犯了错误。请帮助修复错误。

java
  • 2 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-04-03 20:41:28 +0000 UTC

如何从列表中删除具有相同字段值的元素?

  • 0

有一堂课

public class File {

            private String format;
        }
//создаю список и помещаю в него объекты
List<File> filesFrom = new ArrayList<>();
        filesFrom.add(file1);
        filesFrom.add(file2);
        filesFrom.add(file3);
        filesFrom.add(file4);
        filesFrom.add(file5);

format某些对象的字段值是相同的。例如:file1 - "txt", file2 - "txt", file3 - "doc", file4 - "jpg",file5 - "txt" 我需要删除具有重复字段值的对象,以便最终只保留具有不同格式的对象。也就是说,对象file1, file3,file4

我正在尝试执行以下操作

for (int i = filesFrom.size() - 1; i > -1 ; i--) {
        if (filesFrom.get(0).getFormat().equals(filesFrom.get(i).getFormat())){
            filesFrom.remove(i);
        }
    }

事实证明,列表开头和结尾的所有文件都被删除,只有格式doc和jpg. 请告诉我如何达到预期的结果。

并且可能通过iterator它会更正确吗?但我不明白如何

java
  • 3 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-03-20 22:59:06 +0000 UTC

帮助在 SQL 查询中显示最大值

  • 0

数据库甲骨文。有三个数据表。我需要显示经理的姓名和他的最大交易量,在某个时间段内,如果这些最大值有几个,则全部显示。到目前为止,只显示了为每个名称汇总的名称和交易金额。这是我的要求

SELECT SALESMAN.NAME, SUM(DEAL.AMOUNTE)
FROM CUSTOMER
JOIN DEAL ON DEAL.CUSTOMER_ID = CUSTOMER.CUSTOMER_ID AND DEAL.DATE_ BETWEEN '01/08/17' AND '31/08/17'
JOIN SALESMAN ON SALESMAN.SALESMAN_ID = CUSTOMER.SALESMAN_ID
GROUP BY SALESMAN.NAME;

表输出

James Hoog  3000
Mc Lion 4500

告诉我如何更改查询以使其仅返回数字列中的最大值?我试图按需执行,使用它HAVING,但没有任何反应。语法有错误,或者缺少某些东西……某些东西无法达到预期的结果((

sql
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-03-06 22:10:07 +0000 UTC

SQL查询更新数据

  • 1

该表有四列id、name和。我需要创建一个 void changeDescription() 方法,该方法从描述超过 100 的所有产品的描述中删除最后一句。我制作了该方法,直到最后一句被删除。 descriptionprice

private static void changeDescription(){
        try(Connection connection = DriverManager.getConnection(DB_URL, USER, PASS); Statement statement = connection.createStatement()) {

            String descriptionNew = "";
            try(ResultSet resultSet = statement.executeQuery("SELECT * FROM PRODUCT")){
                while (resultSet.next()){
                    String description = resultSet.getString(3);
                    if (description.length() > 100){
                        String[] arraySentences = description.split("[.]");
                        arraySentences[arraySentences.length - 1] = "";
                        for (String sentence : arraySentences){
                            if (sentence != null && !sentence.isEmpty()){
                                descriptionNew += sentence + ".";
                            }
                        }
                    }
                }
            }

            System.out.println(descriptionNew);
        }catch (SQLException e){
            System.err.println("Something went wrong");
            e.printStackTrace();
        }
    }

但是后来我不知道如何更新表中的数据,在描述列中。如何在更新请求中替换descriptionNew?

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-11-16 04:14:21 +0000 UTC

如何在命令后从控制台将数据写入文件?

  • 0

如何确保在输入某个命令后将输入到控制台的数据写入文件?在我的例子中,我们在控制台中输入了一些数据,在输入“end”之后,之前输入的所有内容都应该写入一个文件。对我来说,只有命令本身会被记录下来,而我在控制台中输入的所有内容都不会被记录下来。这是我的代码:

public static void writeToFileFromConsole(String path){

        InputStreamReader reader = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(reader);

        FileWriter writer = null;
        BufferedWriter bufferedWriter = null;

        System.out.println("Enter file content to write in the file:");

        try {
            String line;
            do {
                line = br.readLine();
                writer = new FileWriter(path, true);
                bufferedWriter = new BufferedWriter(writer);

                bufferedWriter.append("\n");
                bufferedWriter.append(line);
            }
            while (!line.equals("wr"));
        }catch (IOException e){
            System.err.println("Can't write to file with path " + path);
        }
        finally {
            try {
                br.close();
                reader.close();
                if (bufferedWriter != null){
                    bufferedWriter.close();
                }
                if (writer != null){
                    writer.close();
                }
            }catch (IOException e){
                System.err.println("File with path " + path + " not found" );
            }
        }
    }
java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-11-09 05:05:24 +0000 UTC

如何从控制台将数据写入文件

  • 3

我需要创建一个方法,将用户从控制台输入的所有内容写入给定路径的文件,而不覆盖文件的内容。写入文件必须在单独一行输入 wr 命令后完成。我做了这个方法,但由于它的工作,第一个导管立即起作用。调试程序时显示-该进程无法访问该文件,因为该文件已被另一个进程占用。

public static void writeToFileFromConsole(String path){

        InputStreamReader reader = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(reader);

        FileWriter writer = null;
        BufferedWriter bufferedWriter = null;

        System.out.println("Enter file content to write in the file:");

        try {
            String command = "wr";
            String line;
            line = br.readLine();
            if ((line = br.readLine()).equals(command)) {
                writer = new FileWriter(path, true);
                bufferedWriter = new BufferedWriter(writer);

                bufferedWriter.append("\n");
                bufferedWriter.append(line);
            }
        }catch (IOException e){
            System.err.println("Can't write to file with path " + path);
        }
        finally {
            try {
                reader.close();
                br.close();
                if (writer != null){
                    writer.close();
                }
                if (bufferedWriter != null){
                    bufferedWriter.close();
                }
            }catch (IOException e){
                System.err.println("File with path " + path + " not found" );
            }
        }
    }

告诉我我的错误是什么?以及如何修复它,以便将控制台中输入的数据写入文件。

java
  • 1 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-11-06 23:50:06 +0000 UTC

如何确定字符串中字符的顺序

  • 1

有一个由空格分隔的数字组成的字符串,一个数字不能超过100。我需要检查输入的数字是否只用一个空格分隔。如果只有一个空格,我返回真,如果有多个,那么我返回假。我检查了字符串中只有数字和空格,但它不适用于空格数。这是我能写的:

private static boolean checkDigital(String word)throws Exception{
        if (word == null)
            throw new Exception("Not text");

        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            if (!Character.isDigit(c) && c != ' '){
                return false;
            }
        }
        return true;
    }

告诉我如何正确验证数字之间的空格数。

java
  • 2 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-10-31 18:42:56 +0000 UTC

如何填写地图?

  • 1

任务如下:我需要编写一个将一些文本作为输入并返回的方法Map,该方法存储该文本中每个文字字符的重复次数。我把字符串拆分成一个字符数组,存入ArrayList,排序,然后计算每个字符重复了多少次,现在我需要把它Map放入 这是我到目前为止所做的:

public static Map<Character, Integer> countSymbolsNew(String text)throws Exception{
        //сделать отсортированный список
        //посчитать количество повторений каждого символа и занести в переменную
        //результат добавить в мапу
        if (text == null)
            throw new Exception("No text");

    Map<Character, Integer> map = new HashMap<>();
    ArrayList<Character> chars = new ArrayList<>();
    for (int i = 0; i < text.length(); i++) {
        char c = text.toLowerCase().charAt(i);
        if (Character.isLetter(c)){
            chars.add(c);
        }
    }
    Collections.sort(chars);
    System.out.println(chars);
    //надо взять первый элемент массива, пройти им по всему списку и если повторяется то плюсовать счетчик
    //если не повторился то счетчик равен 1
    int maxCount = 0;
    for (Character aChar : chars) {
        int count = 0;
        for (Character ch : chars) {
            if (aChar.equals(ch)){
                count++;
            }
        }
        if (count > maxCount){
            maxCount = count;
        }
        System.out.print(count + " ,");

    }


    return map;
}

理论上,我有点想象元素是如何添加到地图中的,但实际上,我无法做任何进一步的事情。请帮忙解释一下。

java
  • 3 个回答
  • 10 Views
Martin Hope
YuriiS
Asked: 2020-10-27 17:35:34 +0000 UTC

如何将字符串拆分为单词,以便单词中仅保留字母和数字字符?

  • 4

例如,有这样一行: String text = "然后骨灰盒被抬到火化现场几圈,作为游行的最后一站。"

我需要将其分解为单词,删除所有标点符号和特殊字符,并将单词放入列表中。

ArrayList words = new ArrayList<>(); Stringword = text.replaceAll(",", " "); - 这里,据我了解,有必要做正则表达式吗?或者你能去掉标点符号和特殊字符吗?

java
  • 2 个回答
  • 10 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5