Java HQL-使用mysql、hibernate将数据插入到一个表中
这个错误呢 线程“AWT-EventQueue-0”中出现异常 java.lang.IllegalStateException:节点没有数据类型: org.hibernate.hql.internal.ast.tree.IdentNode+-[IDENT]IdentNode: 'q'{originalText=q} “q”是JTextField数据 在“标题”中插入“q” 。。。非常感谢您的帮助。去做吧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
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();
}
}