使用hibernate与mysql时数据不能插入的原因及解决办法
1.背景
之前从没用过hibernate,因此在网上搜了一下hibernate快速入门方面的信息,最后我按照《Myeclipse Hibernate 快速入门 中文版》(CSDN,百度文库都有)一文开始了我的hibernate之旅(为项目做技术准备)。
下面是在学习使用时用到的三个开发工具(Myeclipse , Mysql , SQL-Front)及其版本说明:
Myeclipse版本为6.5(没用最新的Myeclipse8.5,这是由于之前组里的项目都是在Myeclipse6.5中开发的,并且本项目是与其它人合作完成的,为了防止可能由于开发环境的不一致而引起的问题,我们统一使用Myeclipse6.5,所以我就在Myeclipse6.5环境下学习使用hibernate了)。
Mysql使用的是5.1版本。Mysql安装完后,需要手动进行配置,其中有一项是“please select the database usage”,我在这里选择的是“Muitifunctional Database”(如下图所示)。这里其实选则的是使用何种类型的数据库(InnoDB还是MyISAM),如果选第三个,就不能用InnoDB类型的数据库了,这个在每一个选项的说明中可以看到。
为了方便mysql的使用,又安装了图形化界面的SQL-Front,版本是5.1。
2.遇到的问题
我用SQL-Front在数据库中建了一简单的表用于学习,等同的SQL语句如下:
“author”表有两个字段,一个是主键“Id”,一个是“name”。需要说明的是SQL-Front在建表的时候默认数据库类型为InnoDB。
针对“author”表,按照《Myeclipse Hibernate 快速入门 中文版》一文的说明操作完成后,写了一段简单的测试代码:
即插如一条name字段为“author”的数据,但是发现执行完后数据根本就没有插入到数据库中。后来在网上搜了一下,有人给出了解决办法,即使用事务来解决,修改后的代码如下:
数据插入的问题是解决了,但是发现插入数据后,Id已经在插入前自动增加了(不是从1开始了),也就是说之前的测试虽然数据看似没有插入数据库,但是实际效果却跟插入了数据库一样(要不然Id不会自动增加),这又是为什么?在网上搜了一下,结合自己的理解,我分析了一下原因。
相关文档:
一、概述
事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功>能。例如,Linux 中的 crontabe 只能精确到每分钟执行一次,而 MySQL 的事件调度器则可以实现每秒钟执行一个任务,这在一些对实时性要>求较高的环境下就非常实用� ......
准备
ls /usr/local/src // 显示文件列表
ls | wc -l // 查看当前文件目录下文件的个数
gcc -v // 查看编译工具是否存在
rpm -qa|grep -i xxxx // 查看系统中是否已经安装了某软件的相关软件包
rpm -e --nodeps xxxx // 卸载软 ......
遇到一个问题是在MySQL命令行插入中文数据或者查询中文数据时出现乱码,或者显示不对。
在命令行输入:show variables like ‘character_set_%’;
查看当前配置的编码;
在命令行输入 :set names utf8;
则等同于
set character_set_client=utf8;
set character_set_results ......
Mysql方式:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MysqlDB {
private String strClass = "com.mysql.jdbc.Driver";
private String strDriver = "jdbc:mysql://localhost: ......
详细解释和例子见下列文章:
http://www.mysqlperformanceblog.com/2008/09/03/analyze-myisam-vs-innodb/
http://www.penglixun.com/work/database/mysql_show_index_cardinality.html
(1)cardinality影响mysql optimizer对索引的选取
(2)可以通过show index from table_name来查看表的索引和cardinality
(3)in ......