PL/SQL记录类似高级语句中的结构,用于处理单行多列数据。

自定义PL/SQL记录

语法:

TYPE type_name IS RECORD(
	filed_declaration[,filed_declaration]...
);

indetifier type_name;

示例:

DECALRE
	TYPE user_record_type IS RECORD(
		name user.name%TYPE,
		age user.age%TYPE
	);
	
	user_record user_type;
...

使用%ROWTYPE属性定义记录变量

阅读全文......

使用git进行项目版本管理时,在实际的操作中经常会有使用多个命令完成一个操作的情况出现,比如常见的代码远程更新操作可能就包含以下几个步骤:

  1. 保存当前工作区。git stash
  2. 拉取远程分支代码到本地。git pull --rebase
  3. 恢复当前工作区。git stash pop

那么有没有办法可以使用一个自定义命令一次完成上述三个命令的执行?

其实要完成上述命令组很简单,我们只要完成一个包含这几条命令的脚本文件即可。linux环境下我们可以直接自定一个shell脚本,比如下面的形式:

#!/bin/sh

git stash
git pull --rebase
git stash pop

阅读全文......

日常的开发中,经常会针对不同的需要将程序中的日志进行分类存储,但在运维或者异常处理需要查看时,又不得不针对多个日志文件进行联合处理。甚至有些时候需要进行日志关联查询。这种情况下,一般的 linux 命令,比如 grep 等就显得功能不够强大了。此时可以考虑使用 awk 进行多文件处理,借助其语法可以很方便的实现文件内容关联查询,完成类似 sql 式的关联查询

首先,定义如下两个文件。一个是学生信息 s.log

sid tid name age address
1 1 张三 18 北京朝阳
2 1 李四 19 北京西城
3 2 马六 17 北京海淀
4 2 王五 17 北京昌平
5 3 唐七 18 北京西城
6 1 徐六 16 北京朝阳

阅读全文......

awk是一款强大的文本分析工具。awk 按行解析数据,并对其进行分割处理。下面是一些awk的入门语法与示例。

首先我们使用以下的文件片段演示。文件片段1内容如下:

The Lost Love
William Wordsworth
She dwelt among the untrodden ways beside the springs of dove.
A maid whom there were none to praise, and very few to love.
A violet by a mossy stone, half hidden from the eye!
Fair as a star, when only one is shining in the sky.
She lived unknown, and few could know, when lucy ceased to be.
But she is in her grave, and oh, the difference to me!

常用命令

1. 使用默认分割符(空格或者TAB)分割.

awk '{print NR,$1}' test.txt

阅读全文......

先看段代码:

String sDate = "2014-12-20";
try {
    DateFormat df = DateFormat.getDateInstance();
    Date date = df.parse(sDate);
} catch (Exception e) {
    e.printStackTrace();
}

这段代码在中文语言环境下是可以测试通过。但在其他语言环境中则会抛出异常。原因是DateFormat.getDateInstance()初始化时会跟据当前语言环境设置日期格式。

  1. DateFormat.getDateInstance() 根据当前语言环境设置日期模式:

     zh_CN : yyyy-MM-dd : 2014-05-19
     en_us : MMM d, yyyy : May 19, 2014
    
  2. 阅读全文......

我们这里模拟几种场景,以便您快速上手.

场景一:【本地建立GIT版本管理并添加文件】

step-1、创建项目根目录

$ mkdir gitProject

step-2、进入目录并初始版本管理

$ cd gitProject
$ git init

git init后,将在 gitProject目录下生成 .git隐藏文件。可使用 ls -a 进行查看

step-3、添加文件到目录gitProject

$ touch HelloWorld.java

step-4、查看当前版本仓库状态

$ git status     # 这里应该会显示HelloWorld.java为untracked files,也就是尚未进行版本管理

step-5、将HelloWorld.java添加到版本管理中

$ git add HelloWorld.java

step-6、再次查看版本仓库状态

$ git status     # 此时将会显示HelloWorld为一个new file,需要提交到版本库中

step-7、提交HelloWorld.java到版本库

$ git commit HelloWorld.java

step-8、为HelloWorld.java添加内容

$ vi HelloWorld.java

step-9、查看当前HelloWorld.java文件与提交的版本库中的差异

$ git diff

step-10、提交修改后的HelloWorld.java到版本库

$ git commit -m 'init import' HelloWorld.java

step-11、查看操作日志

$ git log

补充知识

  1. 阅读全文......

mybatis进行插入操作时,如果表的主键是自增的,针对不同的数据库相应的操作也不同。基本上经常会遇到的就是 Oracle Sequece 和 Mysql 自增主键,至于其他的手动生成唯一主键的问题在这里就不讨论了,这里主要说明下在mybatis中对于自增主键的配置。

不返回自增主键值

如果考虑到插入数据的主键不作为其他表插入数据的外键使用,那么可以考虑使用这种方式。

  1. Oracle Sequence 配置

     <sql id='TABLE_NAME'>TEST_USER</sql>
     <sql id='TABLE_SEQUENCE'>SEQ_TEST_USER_ID.nextval</sql>
    
     <!-- 注意这里直接调用sequence的nextval函数 -->
     <insert id="insert" parameterType="User">
         insert into <include refid="TABLE_NAME" /> (ID,NAME,AGE)
             values ( <include refid="TABLE_SEQUENCE" /> ,#{name}, #{age} )
     </insert>
    

    阅读全文......

加权因子Wi

从右到左依次定义为:

Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]

  • 阅读全文......

  • Hibernate中实现缓存的对象有SessionSessionFactory

    Session的缓存为内置缓存,不可被卸载,称为Hibernate的一级缓存;

    SessionFactory有一个内置缓存和一个外置缓存。其中外置缓存可插拔,被称作Hibernate的二级缓存。

    阅读全文......

    用于读数据操作,他是非独占的,允许其他事务同时读取其锁定的资源,但不允许其他事务更新他。

    1. 加锁条件:当一个事务执行select语句时。
    2. 解锁条件:默认情况下,数据读取后,数据库系统立即释放共享锁。
    3. 兼容性:放置共享锁后还可放置共享锁和更新锁。
    4. 并发性:具有良好的并发性能。当多个事务读取相同的数据时,每个事务都会获得一把共享锁,因此可以同时读锁定的数据。

    独占锁

    也叫排他锁,使用与修改数据的场合。他锁定的资源,其他事务不能进行读写。

    1. 加锁条件:当一个事务执行insert,update,delete时,数据库系统会自动对被操作的数据使用独占锁。如果该数据已有其他锁存在,则不能放置独占锁。
    2. 解锁条件:事务结束。
    3. 兼容性:不和其他锁兼容。
    4. 并发性:并发性差,只允许有一个事务访问锁定数据。其他事务需等待,直到当前事务结束。

    更新锁

    更新操作的初始阶段用来锁定可以能要被修改资源的锁。更新锁可避免使用共享锁造成的死锁现象。

    1. 加锁条件:当执行update时,数据库系统会先为事务分配一个更新锁。
    2. 解锁条件:当读取数据完毕,执行更新操作时,更新锁升级为独占锁。
    3. 兼容性:与共享锁兼容。一个资源可同时放置更新锁和共享锁,但只能放置一把更新锁。
    4. 并发性:允许多个事务同时读锁定的资源,但不允许其他事务修改。

    如何防止死锁

    1. 合理安排表访问顺序;
    2. 阅读全文......