跳至主要内容

博文

目前显示的是 八月, 2018的博文

【图集】椎名 ましろ(しいな ましろ) Shiina Mashiro

当然是真白的图集啦,多图集合中ο(=•ω<=)ρ⌒☆

【图集】言叶之庭(言の葉の庭)

隐约雷鸣 阴霾天空 但盼风雨来 能留你在此 隐约雷鸣 阴霾天空 即使天无雨 我亦留此地 ——万叶集 《言叶之庭》

关于如何记录数据更改记录的两种建表方式

当时要做的一个项目要包含一个权限管理功能,以为该系统中的所有人分配权限。而且这个权限管理的需求是可以把权限接近无限的下发(我感觉现实中是不会无限下发的(。・∀・)ノ),这些都先不讲。因为有权限管理就涉及到用户分组的变动,权限的使用等,但是这些操作都是应该要记录下来的。于是有了两种方案。 1.通过一张单独的事件记录表来记录事件: id uid eventid etime id是自增 uid是指用户的id,就是事件的对象 eventid是事件id,有另外一张表列出所有可能的事件,eventid为其id etime:事件的时间 优点: 这种方法比较直观,比较容易能想到。 操作也不是很麻烦 缺点: 同时要操作多张表(比如要将一个人的权限删除,那么在权限表中要将其对应的记录删除,在记录表中要对这个事件进行记录)。 需要列车所有操作的可能(这好像也不是啥缺点(。^▽^))。 2.通过增加时间字段来记录事件 比如有一张用户-分组的表: id uid gid id主键自增 uid用户id gid权限组id 如果是按照第一种方法,当一个人被分入某个权限组时,则向这张表添加相应记录,还要向记录表添加纪录。但是如果多了两个字段,starttime(起始时间),endtime(结束时间),那么就不一样了。 id starttime endtime uid gid 当一个用户被分配到某分组时,记录这个时间放在starttime中,当一个用户被踢出分组是记录踢出时间放到endtime中。这样的话,只要检测endtime中是否有值就可以判断用户的状态了,这样这表的作用就不仅是记录分组情况了,而且也保留记录了。 优点: 需要建的表少了。 当有操作时不需要删除记录,只需记录时间,操作的表也少了。 缺点: 如果某张表有频繁的操作则很容易造成数据冗余。

关闭开发环境的开发者模式[struts2,hibernate]

在开发的过程中,为了提高开发的效率会打开辅助开发的设置,比如Struts2的开发者模式,Hibernate的语句输出等,这样能方便我们更快的找出错误。但是当在实际使用中是需要把这些东西关掉,这样才能减少资源占用。 Struts2关闭开发者模式: 1 2 3 4 ...... <!-- 设置开发模式,将value值设为false,则关闭 --> < constant name = "struts.devMode" value = "false" /> ...... Hibernate关闭语句输出: 1 2 3 4 5 6 ... <!-- 输出底层sql语句,将其改为false --> < property name = "hibernate.show_sql" > false </ property > <!-- 输出底层sql语句格式 --> < property name = "hibernate.format_sql" > true </ property > ...

关于Apache本地能访问外网不能访问的问题

在配置apache和tomcat时,把它们都配置好,放到服务器中发现外网不能访问 解决: I,可能是防火墙限制了。 1,首先启动Apache,在本地打开浏览器访问指定路径成功。 2,在系统的控制面板里打开防火墙设置,进入高级设置。 3,在高级设置里右键点击“入站规则”,选择“新建规则”。 4,在规则导向里,类型选“端口”,协议选“TCP”。 5,指定本地端口号“80”。(此处的80与Apache配置里指定的端口号要一致) 6,下一步的“操作”选择“允许连接”即可。 7,“配置文件”选择“域、专用、公用”即可。 8,“名称”和“描述”自定义,能识别即可。最后保存退出。 9, 无需重启apache II,也可能是配置出了问题 可能是配置中没有允许外部访问,则Apache服务器是2.4.0以上 版本,将虚拟主机的进行如下配置: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 < VirtualHost * :80 > < Directory " C: / www "> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all Require all granted </ Directory > ServerAdmin xdfsfsffs@xd.com DocumentRoot "C:/www" ServerName www.test.com ServerAlias test.com ErrorLog "logs/test.bin-error_log" CustomLog "logs/test.bin-access_log" common </ VirtualHost >

各数据库无order by时的默认排序

MySQL: 对于 MyISAM 表 ,Select 默认排序是按照物理存储顺序显示的。 而InnoDB 表,会按主键的顺序排列。 Oracle: oracle对无order by的语句返回的结果不进行排序,oracle此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。但这个顺序是可能被打乱的,在表的数据被删除后,rowid会被新插入的数据占用。所以一个无order by查询结果看起来也可能是个杂乱无章的。oracle的数据库实现就一个原则,怎么快怎么效率高就怎么来。大多数情况下不需要排序还非得按主键排序这不是浪费资源么?这和oracle的表结构是有关系的,因为oracle的表结构默认是按堆存放的。按堆存放的意思就是,随便存,存的时候就是乱序的。如果你建表的时候就是建的按索引组织的表,那么它返回的时候就会默认排序了。 sqlserver: 在不指定Order by的情况下,sqlserver会根据执行计划实际查询方式来得到数据,而执行计划会根据sql中很多的因素(的查询列,where条件,order by等)而使用不同的索引,最终出来的结果很可能是不同的。 DB2: DB2的尚不清晰,排序好像与sort heap相关。

删除带外键的表【foreign key constraint fails】报错

遥想当时正在学hibernate的时候,刚好学到了一对多,多对多的关联操作。时间也正是刚好在那是有了一个项目,把各表的间的结构还理清,俗话说学到就要用到,就把这些表的结构都能配置级联关系的都把它配上。没想到就在这里给自己放了个小坑。前几天在一个帖子中看到别人说,尽量少配些ORM约束,数据库的外键约束什么的。当时还不以为然。没想到我就遇到了这个问题,或许对数据库操还是不是很熟悉的人约束真的不要配太多。不过有自然有其的好处就是。 今天在删除一张表的数据的时候报了如下错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 09:55:49.144 [http-nio-8080-exec-6] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Cannot delete or update a parent row : a foreign key constraint fails ( `checkin` . `right_umenu` , CONSTRAINT `FKnmg8itd642tdyn6qh1q42h60r` FOREIGN KEY ( `menu_detailPid` ) REFERENCES `menu_detail` ( `id` )) 09 : 55 : 49.151 [ http -nio -8080 -exec -6 ] ERROR org.hibernate.internal.SessionImpl - HHH000346: Error during managed flush [could not execute statement ] org.hibernate.exception.ConstraintViolationException: could not execute statement at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java: 59 ) at org.hibernate.exception.internal...