GVKun编程网logo

在PostgreSQL中更新数据后不要更改jsp上的数据(jsp更新数据库)

18

在这篇文章中,我们将为您详细介绍在PostgreSQL中更新数据后不要更改jsp上的数据的内容,并且讨论关于jsp更新数据库的相关问题。此外,我们还会涉及一些关于PostgreSQL11.8版是否支持

在这篇文章中,我们将为您详细介绍在PostgreSQL中更新数据后不要更改jsp上的数据的内容,并且讨论关于jsp更新数据库的相关问题。此外,我们还会涉及一些关于PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?、postgresql – 在postgres中更新0行以匹配记录、postgresql – 在PostreSQL中实现数据版本控制的方法、postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作的知识,以帮助您更全面地了解这个主题。

本文目录一览:

在PostgreSQL中更新数据后不要更改jsp上的数据(jsp更新数据库)

在PostgreSQL中更新数据后不要更改jsp上的数据(jsp更新数据库)

我有从db和servlet获取数据的类,用于将该数据发送到jsp。如果我在表中插入或删除行(使用pgAdmin),将更新jsp上的数据(使用新数据),但是如果我更新表中的现有日期,则不会在jsp上更新(仅在重新启动glassfish之后)。用于ORM的类:

package db_classes;@Entitypublic class heading {private Integer id;private String name;private Long themeCount;private Collection<topic> topicsById;@Id@Column(name = "id")public Integer getId() {    return id;}public void setId(Integer id) {    this.id = id;}@Basic@Column(name = "name")public String getName() {    return name;}public void setName(String name) {    this.name = name;}@Basic@Column(name = "theme_count")public Long getThemeCount() {    return themeCount;}public void setThemeCount(Long themeCount) {    this.themeCount = themeCount;}@OneToMany(mappedBy = "headingByIdHeading")public Collection<topic> getTopicsById() {    return topicsById;}public void setTopicsById(Collection<topic> topicsById) {    this.topicsById = topicsById;}}

Servlet:

    package controllers;/** * Created by Otani on 25.02.2015. */@WebServlet(name = "Heading_parser")@Statefulpublic class Heading_parser extends HttpServlet {    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {    }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        Heading_processes heading_processes = new Heading_processes();        getServletContext().setAttribute("headings",heading_processes.getAllHeading());   request.getRequestDispatcher("/WEB-INF/views/index.jsp").forward(request, response);    }    @Override    public void init() throws ServletException {    }    }

用于获取数据的Heading_processes方法:

public List<heading> getAllHeading() {        EntityManager entityManager = entityManagerFactory.createEntityManager();        entityManager.getTransaction().begin();        try {            Query query = entityManager.createQuery("SELECT h FROM heading h");            entityManager.getTransaction().commit();            return query.getResultList();        } catch (Exception e) {            entityManager.getTransaction().rollback();        } finally {            entityManager.close();        }        return null;    }

和index.jsp的片段:

<table>    <tbody>    <c:forEach var = "heading" items = "${headings}">        <tr>            <td><img src="image/message.png" width="32" height="32" alt="theme"></td>            <td><a href="showtopic.jsp?topic?id=${heading.id}" title=${heading.name}>${heading.name}</a></td>            <td>${heading.themeCount} Тем <br> Сообщений:</td>        </tr>    </c:forEach>    </tbody></table>

UPD:添加pesistance.xml:

 <persistence-unit name="forum">        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>        <class>db_classes.heading</class>        <class>db_classes.message</class>        <class>db_classes.topic</class>        <class>db_classes.uncensoredWords</class>        <class>db_classes.users</class>        <properties>            <property name="eclipselink.jdbc.url" value="jdbc:postgresql://localhost:5432/forum"/>            <property name="eclipselink.jdbc.driver" value="org.postgresql.Driver"/>            <property name="eclipselink.jdbc.user" value="****"/>            <property name="eclipselink.jdbc.password" value="*****"/>        </properties>    </persistence-unit></persistence>

答案1

小编典典

这很可能是缓存问题。

请参阅以下文档:

https://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

缺省情况下,EclipseLink使用共享对象缓存,该缓存缓存持久性单元读取和持久保存的所有对象的子集。EclipseLink共享缓存与本地EntityManager缓存不同。
共享缓存在持久性单元(EntityManagerFactory或服务器)的持续时间内存在,并且由所有EntityManager和持久性单元的用户共享
。本地EntityManager缓存不共享,仅在EntityManager或事务期间存在。

共享缓存的好处在于,一旦读取了对象,如果使用查找操作再次读取了该对象,则无需访问数据库。同样,如果通过任何查询读取该对象,则无需重建该对象,也无需重新获取其关系。

共享缓存的局限性在于,如果通过JDBC或其他应用程序或服务器直接更改数据库,则共享缓存中的对象将失效。

您可以通过在JPA配置中添加以下内容并查看问题是否消失来快速验证这一点:

<property name="eclipselink.cache.shared.default" value="false"/>

是否要永久禁用缓存取决于您的用例,即其他应用程序将在现实世界中更新这些实体。

PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?

PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?

您需要还原您的转储文件,因此您应该将其提供给pg_restore

尽管pg_restore将尽最大努力正确地阅读和解释8.4转储,但建议的做法是从v11中使用pg_dump转储8.4数据库。

postgresql – 在postgres中更新0行以匹配记录

postgresql – 在postgres中更新0行以匹配记录

我们试图更新我们数据库中的记录,如下所示,行没有更新.命令promt和日志中都没有显示错误

步骤1:

SELECT yrd_cuttoff FROM yrd_yield_room_details WHERE yrd_yrd_key=1491;  
yrd_cuttoff
________________
 N
(1 row)

第2步:

UPDATE yrd_yield_room_details SET yrd_cuttoff=''NC'' WHERE yrd_yrd_key=1491; 

UPDATE 0

第3步:

SELECT yrd_cuttoff FROM yrd_yield_room_details WHERE yrd_yrd_key=1491;  

yrd_cuttoff
________________
 N
(1 row)

解决方法

检查此表中是否没有规则.见 this和 this.

postgresql – 在PostreSQL中实现数据版本控制的方法

postgresql – 在PostreSQL中实现数据版本控制的方法

你能分享一下你在Postgresql中如何实现数据版本控制的想法. (我已经询问了有关 Cassandra和 MongoDB的类似问题.如果您有任何想法,哪个db更好,请分享)

假设我需要一个简单的通讯录中的版本记录.地址簿记录存储在一个表中,为了简单起见没有关系.我期望的历史:

>将不经常使用
>将一次性使用,以“时间机”的形式呈现
>不会有更多的版本比几百到单个记录.
>历史不会过期.

我正在考虑以下方法:

>创建一个新的对象表以存储具有地址簿表模式副本的记录历史记录,并将时间戳和外键添加到地址簿表中.
>创建一种减少表格以存储地址簿记录的更改.这样的表将包括:AddressBookId,TimeStamp,FieldName,Value.这样我只会将更改存储到记录中,我不必将历史表和地址簿表保持在同步状态.
>创建一个表来存储串行(JSON)地址簿记录或更改地址簿记录.这样的表格将如下所示:AddressBookId,Object(varchar).
再次,这是模式较少,所以我不必保持历史表与地址簿表同步.
(This is modelled after Simple Document Versioning with CouchDB)

我做类似于你的第二种方法:将表与实际的工作集和具有更改的历史(timestamp,record_id,property_id,property_value)相结合.这包括创建记录.第三个表格描述了属性(id,property_name,property_type),这有助于在应用程序中更高的数据转换.所以你也可以轻松跟踪单个属性的更改.

而不是一个时间戳,你也可以有一个类似的,你每增加一个record_id的变化,所以你有一个实际的版本.

postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作

postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作

查看Postgres 9.4数据类型JSONB的文档,我不知道如何对JSONB列进行更新。

JSONB类型和函数的文档:

http://www.postgresql.org/docs/9.4/static/functions-json.html
http://www.postgresql.org/docs/9.4/static/datatype-json.html

作为例子,我有这个基本的表结构:

CREATE TABLE test(id serial,data jsonb);

插入很容易,如:

INSERT INTO test(data) values ('{"name": "my-name","tags": ["tag1","tag2"]}');

现在,我如何更新“数据”列?这是无效的语法:

UPDATE test SET data->'name' = 'my-other-name' WHERE id = 1;

这是记录在一个明显的地方,我错过了吗?谢谢。

理想情况下,不要对关系数据库中要管理的数据使用JSON文档。请使用规范化的关系设计。

JSON主要用于存储不需要在RDBMS中操作的整个文档。

更新Postgres中的一行总是写一个新版本的整行。这是Postgres’ MVCC model的基本原理。从性能的角度来看,无论是更改JSON对象内的单个数据还是所有内容,都几乎不重要:必须写入新版本的行。

因此advice in the manual:

JSON data is subject to the same concurrency-control considerations as
any other data type when stored in a table. Although storing large
documents is practicable,keep in mind that any update acquires a
row-level lock on the whole row. Consider limiting JSON documents to a
manageable size in order to decrease lock contention among updating
transactions. Ideally,JSON documents should each represent an atomic
datum that business rules dictate cannot reasonably be further
subdivided into smaller datums that Could be modified independently.

它的要点:要修改JSON对象中的任何内容,必须将修改的对象分配给列。 Postgres提供了有限的手段来构建和操纵json数据以及其存储功能。自9.2版本以来,每个新版本的工具的软件都大大增加。即将到来的version 9.4 is adding quite a bit。

说明如何使用Postgres 9.3的工具:

> How do I modify fields inside the new PostgreSQL JSON datatype?

今天的关于在PostgreSQL中更新数据后不要更改jsp上的数据jsp更新数据库的分享已经结束,谢谢您的关注,如果想了解更多关于PostgreSQL 11.8版是否支持导入在PostgreSQL 8.4.20版中创建的数据库?、postgresql – 在postgres中更新0行以匹配记录、postgresql – 在PostreSQL中实现数据版本控制的方法、postgresql – 如何在Postgres 9.4中对JSONB类型的列执行更新操作的相关知识,请在本站进行查询。

本文标签: