Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.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 HQL-使用mysql、hibernate将数据插入到一个表中_Java_Mysql_Hibernate_Hql - Fatal编程技术网

Java HQL-使用mysql、hibernate将数据插入到一个表中

Java HQL-使用mysql、hibernate将数据插入到一个表中,java,mysql,hibernate,hql,Java,Mysql,Hibernate,Hql,这个错误呢 线程“AWT-EventQueue-0”中出现异常 java.lang.IllegalStateException:节点没有数据类型: org.hibernate.hql.internal.ast.tree.IdentNode+-[IDENT]IdentNode: 'q'{originalText=q} “q”是JTextField数据 在“标题”中插入“q” 。。。非常感谢您的帮助。去做吧 public static int add_Book(String title, Stri

这个错误呢

线程“AWT-EventQueue-0”中出现异常 java.lang.IllegalStateException:节点没有数据类型: org.hibernate.hql.internal.ast.tree.IdentNode+-[IDENT]IdentNode: 'q'{originalText=q}

“q”是JTextField数据

在“标题”中插入“q”

。。。非常感谢您的帮助。

去做吧

 public static int add_Book(String title, String auth_name, String publisher, String genre) { 
     Transaction tx = session.beginTransaction(); 
    Query query = session.createQuery
             ("INSERT INTO Book(title,auth_name,publisher,genre)"
                    + "SELECT "+title+", "+auth_name+", "+publisher+", "+genre); 
     tx.commit(); 
     return query.executeUpdate();
显然,应该用会话/事务控制代码包装该方法

而且,请始终使用Java命名约定!
auth\u name,add\u Book
是不正确的名称-请使用
authName,addBook

我认为@v.ladynev的答案很好,但您也可以这样尝试:

public static void addBook(String title, String authName, String publisher, String genre) { 
    session.save(new Book(title, authName, publisher, genre));
}
至少使用Bean类来“干净地”编码。我们只在特殊情况下使用查询,否则我们最多只能在代码中避免查询,或者至少使用捆绑资源

其他任何东西都会检查您的
bean类中是否有
setAuthName
而不是
setAuth\u Name

如果要插入数据,为什么要选择
而不是
…我同意@foxdie。还有一件事,请使用参数绑定。最初查询sys。Query Query=session.createQuery(“插入图书(标题、作者姓名、出版商、流派、图书id)值(“+title+”、“+auth\u name+”、“+Publisher+”、“+Genre+”、“+book\u id+”)”);如何更改auth_名称?我同意@v.ladynev在方法中使用驼峰大小写,如
authName
更改它。@sjh您应该使用
authName
。始终以这种方式使用名称。这是最重要的。如何将save()添加到顶级源代码中?我尝试了这种方法,但出现了一个错误。Query Query=session.createQuery(“INSERT INTO Book(title,auth_name,publisher,genre)值(““+title+”,“+authname+”,“+publisher+”,“+genre+”)”)”;这是线程“AWT-EventQueue-0”org.hibernate.hql.internal.ast.QuerySyntaxception:意外标记:第1行第51列[INSERT INTO Book(title,auth_name,publisher,genre)值附近的值吗(‘qq’、‘ww’、‘ee’、‘rr’)]你没有关闭会话,没有在异常情况下回滚事务等。我更新了。我没有说你的解决方案不好。相反,问题是它无法执行。原因很简单,他不理解。这就是为什么我向他展示了一个更详细的方法,因为简化的代码需要一些经验ce.我同意“简化”代码等。您需要一个事务,
rollback
,这是
e.getMessage()
无用的。最好在回滚后重新显示一个异常我再次更新了谢谢@v.ladynev,顺便说一句,您的API看起来很棒。好的。谢谢:)
 public static void addBook(String title, String authName, String publisher, String genre) { 

Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
// create book Object
Book book = new Book();
book.setTitle(title);
book.setAuthName(authName);
book.setPublisher(publisher);
book.setGenre(genre);

try {
 tx = session.beginTransaction();
 // Save the book to database
 session.save(book); 
 tx.commit();
 }catch(Exception e){
    if (tx!=null) {
     tx.rollback();}
  e.printStackTrace(); 
 }finally{
 // close your session
 session.close();
 }
}