Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java persistence eclipselink mysql示例:sql语法错误_Java_Mysql_Eclipselink - Fatal编程技术网

Java persistence eclipselink mysql示例:sql语法错误

Java persistence eclipselink mysql示例:sql语法错误,java,mysql,eclipselink,Java,Mysql,Eclipselink,我有本简单的教科书: package it.mysql.beginner; import java.util.Date; import javax.persistence.*; @Entity @Table(name = "books") public class Book implements java.io.Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(str

我有本简单的教科书:

package it.mysql.beginner;

import java.util.Date;


import javax.persistence.*;

@Entity
@Table(name = "books")
public class Book implements java.io.Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@Column(unique = true)
private String isbn;

private String author;
private String title;
private boolean read;

/*@OneToOne(cascade = CascadeType.PERSIST)
private Kind kind;*/

private String type;


@Temporal(TemporalType.DATE)
private Date riconsegna;

public String getIsbn() {
    return isbn;
}

public void setIsbn(String isbn) {
    this.isbn = isbn;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public boolean isRead() {
    return read;
}

public void setRead(boolean read) {
    this.read = read;
}

public Date getRiconsegna() {
    return riconsegna;
}

public void setRiconsegna(Date riconsegna) {
    this.riconsegna = riconsegna;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

/*public Kind getKind() {
    return kind;
}

public void setKind(Kind kind) {
    this.kind = kind;
}*/



}
这是我尝试在mysql数据库中存储一本书的主要类:

package it.mysql.beginner;

import javax.persistence.*;

import java.util.ArrayList;
import java.util.List;
import java.util.Date;

public class Main {

public static void main(String argv[]) {

    EntityManagerFactory emf=Persistence.createEntityManagerFactory("mysqltest");

    EntityManager em = emf.createEntityManager();

        Date d = new Date();
    d.setMonth(11);
    d.setDate(25);
    d.setYear(1013);

    Book b1 = new Book();
    b1.setAuthor("Stephen King");
    b1.setIsbn("bg5dvc8");
    b1.setRead(true);
    b1.setRiconsegna(d);
    b1.setTitle("The green mile");
    b1.setType("Drammatico");

    em.getTransaction().begin();
    em.persist(b1);
    em.getTransaction().commit();

    em.close();
    emf.close();

}
}
persistence.xml文件的设置是正确的,因为如果我尝试保存一些其他类(例如用户),它可以工作……但这对book不起作用。这是我得到的例外:

[EL Info]: 2013-11-18 18:22:18.456--ServerSession(7486884)--EclipseLink, version: Eclipse Persistence Services - 2.5.0.v20130507-3faac2b
[EL Info]: connection: 2013-11-18 18:22:18.714--ServerSession(7486884)--file:/home/lory/workspace/BeginnerMysql/build/classes/_mysqltest login successful
[EL Warning]: 2013-11-18 18:22:18.743--ServerSession(7486884)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ TINYINT(1) default 0, RICONSEGNA DATE, TITLE VARCHAR(255), TYPE VARCHAR(255' at line 1
Error Code: 1064
Call: CREATE TABLE books (ID INTEGER AUTO_INCREMENT NOT NULL, AUTHOR VARCHAR(255), ISBN VARCHAR(255) UNIQUE, READ TINYINT(1) default 0, RICONSEGNA DATE, TITLE VARCHAR(255), TYPE VARCHAR(255), PRIMARY KEY (ID))
Query: DataModifyQuery(sql="CREATE TABLE books (ID INTEGER AUTO_INCREMENT NOT NULL, AUTHOR VARCHAR(255), ISBN VARCHAR(255) UNIQUE, READ TINYINT(1) default 0, RICONSEGNA DATE, TITLE VARCHAR(255), TYPE VARCHAR(255), PRIMARY KEY (ID))")
[EL Warning]: 2013-11-18 18:22:18.804--UnitOfWork(27137311)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ, RICONSEGNA, TITLE, TYPE) VALUES ('Stephen King', 'bg5dvc8', 1, '2913-12-25' at line 1
Error Code: 1064
Call: INSERT INTO books (AUTHOR, ISBN, READ, RICONSEGNA, TITLE, TYPE) VALUES (?, ?, ?, ?, ?, ?)
    bind => [6 parameters bound]
Query: InsertObjectQuery(it.mysql.beginner.Book@85a5a5)
Exception in thread "main" javax.persistence.RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ, RICONSEGNA, TITLE, TYPE) VALUES ('Stephen King', 'bg5dvc8', 1, '2913-12-25' at line 1
Error Code: 1064
Call: INSERT INTO books (AUTHOR, ISBN, READ, RICONSEGNA, TITLE, TYPE) VALUES (?, ?, ?, ?, ?, ?)
    bind => [6 parameters bound]
Query: InsertObjectQuery(it.mysql.beginner.Book@85a5a5)
    at org.eclipse.persistence.internal.jpa.transaction.EntityTransactionImpl.commit(EntityTransactionImpl.java:157)
    at it.mysql.beginner.Main.main(Main.java:60)
Caused by: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'READ, RICONSEGNA, TITLE, TYPE) VALUES ('Stephen King', 'bg5dvc8', 1, '2913-12-25' at line 1
Error Code: 1064
Call: INSERT INTO books (AUTHOR, ISBN, READ, RICONSEGNA, TITLE, TYPE) VALUES (?, ?, ?, ?, ?, ?)
    bind => [6 parameters bound]

但是我没有写sql…为什么它不工作?

出于某种原因,我无法对此发表评论,因此如果这不是提前的答案,我很抱歉。。。但看起来您正在尝试在行中添加值1

VALUES ('Stephen King', 'bg5dvc8', 1, '2913-12-25'
MySQL不会向数据库中添加任何周围没有“”的内容。因此,请尝试添加以下内容:

VALUES ('Stephen King', 'bg5dvc8', '1', '2913-12-25'

正如您所看到的,我所做的只是在1周围加上一对引号,尝试添加它,看看它是否会改变任何东西。MySQL的另一个很酷的部分是,如果您有权访问要添加内容的数据库,您可以手动将值放入数据库,然后查看代码,看看如何将其重新格式化为Java代码。

出于某种原因,我无法对此发表评论,因此如果这不是提前给出的答案,我很抱歉。。。但看起来您正在尝试在行中添加值1

VALUES ('Stephen King', 'bg5dvc8', 1, '2913-12-25'
MySQL不会向数据库中添加任何周围没有“”的内容。因此,请尝试添加以下内容:

VALUES ('Stephen King', 'bg5dvc8', '1', '2913-12-25'

正如您所看到的,我所做的只是在1周围加上一对引号,尝试添加它,看看它是否会改变任何东西。MySQL的另一个很酷的部分是,如果您有权访问要添加内容的数据库,您可以手动将值放入数据库中,然后查看代码以查看如何将其重新格式化到Java代码中。

您必须更改实体类中的
read
字段的列名

试试这个:

@Column(name="isread")
private boolean read;
或者直接在java中更改它

private boolean isRead;
不幸的是,
READ
在mysql中是一个保留字

如果使用任何保留字命名字段,eclipseLink生成的SQL将具有无效语法(错误代码:1064)


您必须更改实体类中字段的列名
read

试试这个:

@Column(name="isread")
private boolean read;
或者直接在java中更改它

private boolean isRead;
不幸的是,
READ
在mysql中是一个保留字

如果使用任何保留字命名字段,eclipseLink生成的SQL将具有无效语法(错误代码:1064)


您可以使用以下选项,而不是修改列名:

@Column(name = "`read`")
private boolean read;

您可以使用以下选项,而不是修改列名:

@Column(name = "`read`")
private boolean read;

嗯,我不认为问题是因为1应该代表“true”…如果你看到这个类有一个布尔属性…为了持久化我使用eclipselink e javax持久化,我不应该写任何sql coseEhm,我不认为问题是因为1应该代表“true”…如果你看到这个类有一个布尔属性…为了持久化书籍,我使用eclipselink e javax持久化,我不应该写任何sql coseSorry,恐怕我不明白你写了什么对不起,恐怕我不明白你写了什么…谢谢。我要试一试。我是mysql新手,因为我曾经使用postgresql…不幸的是,错误消息没有太大帮助。现在你知道下次遇到这个问题时应该朝哪个方向看了。也许还要注意日期的用法:
d.setYear(1013)。如果年份低于1900,则1900将用作偏移量:1013+1900=2913。它有效!第一个公历必须使用,而不是日期,第二个我已经更改了isRead中的read属性,正如您所说的。谢谢你,朋友!谢谢你检查我的答案是否正确(绿色钩):-)。哦…谢谢。我要试一试。我是mysql新手,因为我曾经使用postgresql…不幸的是,错误消息没有太大帮助。现在你知道下次遇到这个问题时应该朝哪个方向看了。也许还要注意日期的用法:
d.setYear(1013)。如果年份低于1900,则1900将用作偏移量:1013+1900=2913。它有效!第一个公历必须使用,而不是日期,第二个我已经更改了isRead中的read属性,正如您所说的。谢谢你,朋友!谢谢你检查我的答案是否正确(绿色钩):-)。