Tag: mysql

会话bean中的EntityManagerexception处理

我有一个带有注入的EntityManager em的托管无状态会话bean。 我想要做的是拥有一个具有唯一列的数据库表。 然后我运行一些试图插入实体的算法。 如果实体存在,则会更新或跳过它。 我想要这样的东西: try { em.persist(cd); em.flush(); } catch (PersistenceException e) { // Check if the exception is DatabaseException and ConstraintViolation // Update instead or skip it } 问题是我只能捕获PersistenceException 。 没有捕获DatabaseException 。 很遗憾,因为只有DatabaseException有一个名为getDatabaseErrorCode()方法,我想用它来检查重复的条目。 我不理解它,因为PersistenceException.getCause()返回DatabaseException 。 所以我的问题是:如何捕获DatabaseException并检查MySQL错误代码? 感谢您对此的任何想法和经验。

getTimestamp()在MySQL JDBC连接器中进行两次时区转换?

我在MySQL数据库中有一个类型为DATETIME的列,其值为2012-05-07 19:59:12 。 我正在尝试从DB中检索此值,假设它存储在UTC时区中: Calendar cal = Calendar.getInstance(new SimpleTimeZone(0, “UTC”)); Date date = resultSet.getTimestamp(1, cal); System.out.println(date); 它输出( CEST是我当地的时区,比UTC早2小时): Mon May 07 23:59:12 CEST 2012 预期价值是: Mon May 07 21:59:12 CEST 2012 我在JDBC URL中使用这三个参数( Europe/Berlin与CEST相同): ..&useGmtMillisForDatetimes=true&useTimezone=true&serverTimezone=Europe/Berlin 是我的缺陷还是应该在JDBC驱动程序中另外配置的东西? 我正在使用mysql:mysql-connector-java:5.1.20 。

如何在MySQL中存储图片?

我想将图像存储在MySQL数据库中。 我创建了一个具有BLOB数据类型的表,但现在如何将图像存储在此表中?

Hibernate:尝试获取锁定时发现死锁

我在我的项目中使用hibernate,我得到随机的表观死锁,用于非常简单的数据库操作。 有一个堆栈跟踪: https ://gist.github.com/knyttl/8999006 – 让我感到困惑的是,第一个Exception是RollbackException,然后是LockAquisition Exceptions。 问题经常出现在类似的条款中: @Transactional public void setLastActivity() { User user = em.findById(…); user.setLastActivity(new Date()); em.merge(user); em.flush(); } 我很困惑,因为我不知道它是Hibernate,MySQL还是C3P0的问题。 我的Hibernate配置: ${database.dialect} ${database.structure} ${database.connection} ${database.username} ${database.password} ${database.driver} true 0 UTF-8 UTF-8 ${database.show_sql} false disabled org.hibernate.connection.C3P0ConnectionProvider 0 50 120 0 0 0 120 1 8 EDIT1: 我上面写的是发生了表观死锁 – 这是错误的,只有“试图获取锁定时发现死锁”发生。 EDIT2: 这也发生在这些方法上 – 那些需要用@Transactional注释的需求: […]

在什么条件下我们需要在数据库中使用复合键

我已经看到我们可以有复合键,其中主键由两个表的组合主键组成。 喜欢人和书 person_id and book_id will make the primary key. 但我想问一下,我们需要硬编码编程语言 我的意思是,它可以,我可以有任何名称的单独列作为主键,然后我不必硬编码它,我可以像往常一样执行我的function id,person_id ,book_id

Hibernate OnDelete Cascade不适用于MySql,但适用于postgres和Ms-Sql

我有两个实体。 使用Post-> Thread的 OnetoOne映射的线程实体和Post实体。 Thread实体包含许多post 。 我知道我应该使用OnetoMany而不是OnetoOne,但为了避免所有收集问题我正在使用OnetoOne 现在的问题是,当我删除一个线程时 ,所有与之关联的post也必须被删除。 我成功地使用了它 @OnDelete(action = OnDeleteAction.CASCADE) 但它仅适用于Postgres和Ms-SQl,但不适用于MySql(也尝试过InnoDb)。 在模式生成查询中不生成on delete cascade 。 以下是代码 //Thread Entity @Id @GeneratedValue @Column(name = “thread_id”) private int ThreadID; //Post Entity @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “post_id”) private int PostID; @OneToOne() @OnDelete(action = OnDeleteAction.CASCADE) private thread ThreadID; 我使用以下查询从Thread实体中删除项目时出现以下错误 session.delete(session.load(thread.class,1)); 2014年9月2日下午8:33:51 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions WARN:SQL错误:1451,SQLState:23000 Sep […]

使用TIMESTAMPDIFF和JPA条件查询并将hibernate作为提供者

我有一个包含列设置和释放的数据表,两者都有时间戳。 我的目标是使用CriteriaQuery在下面创建一个等效的SQL查询。 SQL查询: SELECT TIMESTAMPDIFF(SECOND, setup, released)) as sum_duration FROM calls CriteriaBuilder#diff()函数显然不起作用,因为它需要参数是Numbers,所以我尝试使用CriteriaBuilder#函数 : EntityManager entityManager = emProvider.get(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery query = criteriaBuilder.createQuery(); Root thingyRoot = query.from(Thingy.class); Path setup = root.get(“setup”); Path release = root.get(“release”); Expression secondLiteral = criteriaBuilder.literal(“SECOND”); Expression func = criteriaBuilder.function(“TIMESTAMPDIFF”, Integer.class, secondLiteral, setup, release); entityManager.createQuery(query).getResultList(); 但是,当我尝试运行此代码时,它抛出exception; 似乎文字不是作为常量呈现,而是作为参数呈现: java.lang.IllegalStateException: No data […]

Java – 从MySQL数据库获取数据

我已经连接到一个MySQL数据库,它包含四个字段(第一个是ID,后者每个都包含varchar字符串)。 我试图获取数据库的最后一行并检索字段的内容,以便我可以将它们设置为变量(一个int和三个字符串)并在以后使用它们。 到目前为止,我有最低限度的连接,我从哪里开始? 正如你所看到的,我已经尝试编写一个SQL语句来获取最后一行但是从那里出现了所有错误,我不知道如何将它拆分为单独的字段。 Class.forName(“com.mysql.jdbc.Driver”).newInstance(); Connection con = DriverManager.getConnection(“jdbc:mysql://localhost/t”, “”, “”); Statement st = con.createStatement(); String sql = (“SELECT * FROM posts ORDER BY id DESC LIMIT 1;”); st.getResultSet().getRow(); con.close();

JPA坚持不懈

我有一个非常标准的场景,我有一个用户表,其中user_id为PK,一个角色表,其中role_id为PK。 这两个表通过多对多关系相关(即,用户可以有多个角色,一个角色可以应用于许多用户),随后我有一个名为users_has_roles的连接表。 users_has_roles中仅有的两列是users_user_id和roles_role_id。 我已经生成了实体类(见下文),我没有问题将数据持久保存到用户和角色表,但是我很难将任何内容遗留给users_has_roles加入表,因此目前我的所有用户都没有被分配角色。 在我发疯之前,有人可以让我摆脱痛苦,并告诉我应该如何将users_user_id和相应的roles_role_id添加到users_has_roles表中,以便我的用户可以拥有角色? 我的Users.java实体类: @Entity @Table(name = “users”) @XmlRootElement @NamedQueries({ @NamedQuery(name = “Users.findAll”, query = “SELECT u FROM Users u”), @NamedQuery(name = “Users.findByUserId”, query = “SELECT u FROM Users u WHERE u.userId = :userId”), @NamedQuery(name = “Users.findByUsername”, query = “SELECT u FROM Users u WHERE u.username = :username”), @NamedQuery(name = “Users.findByPassword”, query = […]

连接Java-MySql:不允许公钥检索

我尝试使用连接器8.0.11与Java协调MySql数据库。 一切似乎都没问题,但我有这个例外: 线程“main”中的exceptionjava.sql.SQLNonTransientConnectionException: 不允许公钥检索 这是我第一次使用MySql而且我找不到任何解决方案。 谢谢你的帮助! 堆栈跟踪: Exception in thread “main” java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:108) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:862) at com.mysql.cj.jdbc.ConnectionImpl.(ConnectionImpl.java:444) at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230) at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:438) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:146) at com.mysql.cj.jdbc.MysqlDataSource.getConnection(MysqlDataSource.java:119) at ConnectionManager.getConnection(ConnectionManager.java:28) at Main.main(Main.java:8) Connector Manager: public class ConnectionManager { public static final String serverTimeZone = “UTC”; […]