2010年4月

本地测试jqGrid环境

项目很多都地方都需要使用data grid,我参考了N久,还是jqGrid最为强大。当然不一定强大的就是最好的,看你的口味了,我反正是重口味。这个是 jQuery Grid Plugin的主页。首先下载jquery.jqGrid-3.6.4.zip,和jQuery UI 类似,可以根据所需模块自定义下载,达到文件的最小化,速度最优化,因为我比较菜,我全部选择,免得出问题。jquery.jqGrid-3.6.4.zip文件有283kB左右。是这样一个文件树结构(tree /f命令果然牛逼):

├─css
│ ellipsis-xbl.xml
│ ui.jqgrid.css

├─js
│ │ Changes.txt
│ │ install.txt
│ │ jquery-1.3.2.min.js
│ │ jquery.jqGrid.min.js
│ │
│ └─i18n
│ grid.locale-bg.js
│ grid.locale-bg1251.js
│ grid.locale-cat.js
│ grid.locale-cn.js
│ grid.locale-cs.js
│ grid.locale-de.js
│ grid.locale-dk.js
│ grid.locale-el.js
│ grid.locale-en.js
│ grid.locale-fa.js
│ grid.locale-fi.js
│ grid.locale-fr.js
│ grid.locale-he.js
│ grid.locale-is.js
│ grid.locale-it.js
│ grid.locale-ja.js
│ grid.locale-nl.js
│ grid.locale-no.js
│ grid.locale-pl.js
│ grid.locale-pt-br.js
│ grid.locale-pt.js
│ grid.locale-ro.js
│ grid.locale-ru.js
│ grid.locale-sp.js
│ grid.locale-sv.js
│ grid.locale-tr.js
│ grid.locale-ua.js

└─src
│ grid.base.js
│ grid.celledit.js
│ grid.common.js
│ grid.custom.js
│ grid.formedit.js
│ grid.import.js
│ grid.inlinedit.js
│ grid.jqueryui.js
│ grid.loader.js
│ grid.postext.js
│ grid.setcolumns.js
│ grid.subgrid.js
│ grid.tbltogrid.js
│ grid.treegrid.js
│ jqDnR.js
│ jqModal.js
│ jquery.fmatter.js
│ jquery.searchFilter.js
│ JsonXml.js
│ ui.multiselect.js

├─css
│ ellipsis-xbl.xml
│ jquery.searchFilter.cs
│ ui.jqgrid.css
│ ui.multiselect.css

└─i18n
grid.locale-bg.js
grid.locale-bg1251.js
grid.locale-cat.js
grid.locale-cn.js
grid.locale-cs.js
grid.locale-de.js
grid.locale-dk.js
grid.locale-el.js
grid.locale-en.js
grid.locale-fa.js
grid.locale-fi.js
grid.locale-fr.js
grid.locale-he.js
grid.locale-is.js
grid.locale-it.js
grid.locale-ja.js
grid.locale-nl.js
grid.locale-no.js
grid.locale-pl.js
grid.locale-pt-br.js
grid.locale-pt.js
grid.locale-ro.js
grid.locale-ru.js
grid.locale-sp.js
grid.locale-sv.js
grid.locale-tr.js
grid.locale-ua.js

src是给用来研究代码的,就需要js目录和css目录就ok了。再下载一个jqgrid_demo36.zip。需要用到demo包里面的example.html、example.php、dbconfig.php、database.sql。将dbconfig.php里面的数据库信息和自己的本地mysql账户相对应,然后新建一个名为griddemo的数据库。将database.sql导入griddemo。接下来到jqueryui.com下载一个主题,版本用1.7.2的,因为jqGrid基于jQuery 1.3.2开发。将jquery-ui-1.7.2.custom-1.zip的css目录下的文件jquery-ui-1.7.2.custom.css和images目录拷贝到example.html同目录下。修改example.html,将:

<link rel="stylesheet" type="text/css" media="screen" href="themes/sand/grid.css" />

改为:

<link rel="stylesheet" type="text/css" media="screen" href="/css/jquery-ui-1.7.2.custom.css" />
<link rel="stylesheet" type="text/css" media="screen" href="/css/ui.jqgrid.css" />

第一个是jquery ui的css,第二个是jqgrid自带的css。

将:

<script src="js/jquery.jqGrid.js" type="text/javascript"></script>

改为:

<script src="/js/i18n/grid.locale-cn.js" type="text/javascript"></script>
<script src="/js/jquery.jqGrid.min.js" type="text/javascript"></script>

一定要在载入jqGrid之前载入locale。

这样jqGrid利用json传数据的例子就弄好了。

本地测试jqGrid环境

用sequence+trigger实现oracle字段自增长

oracle不像mysql,字段有个autoincrement属性,可以实现字段数值的自增长。有人觉得oracle这个都不能实现,还敢称最牛逼的数据库。其实我倒是觉得没有autoincrement属性,倒是体现了oracle的灵活性。此文讲述如果通过序列和触发器来实现一行数据在insert前实现某字段的自增。 首先随便建立一个表,menuId是需要自增的字段

create table menu(
menuId number(10) not null primary key,
name varchar2(40) not null,
id_parent number(10) not null,
url varchar2(300) null
);

然后建立一个序列,最小值是minvalue,从1开始,步进为1递增,无循环,无缓存。

关于create sequence的详细用法

create sequence menu_autoinc_seq
minvalue 1
start with 1
increment by 1
nocycle
nocache;

然后建立一个触发器,在插入tun_menu表之前触发,选取序列的nextval作为新值。

关于create trigger的详细用法

create or replace trigger menu_autoinc_tg
before insert on menu for each row
begin
select menu_autoinc_seq.nextval into :new.id from dual;
end menu_autoinc_tg;

然后测试一下:

insert into menu values('','个人事务',0,'indi.php');
insert into menu values('','公共事务',0,'public.php');
insert into menu values('','信息维护',0,'maintain.php');
insert into menu values('','后台管理',0,'manage.php');

php+oracle 10g乱码问题

最近做毕设,采用php 5.2.x+oracle 10g,php统一采用utf-8字符集,oracle非常菜,在默认安装的情况下字符集是ZHS16GBK,造成php页面输出的数据全部乱码。

google了一下,发现以下方法可行。oracle采用高级安装:

php+oracle 10g乱码问题

进入第9步的时候选定AL32UTF8字符集。本地使用pl/sql developer可能会有乱码,是客户端和服务器端的字符集不一致造成的。修改客户端字符集需要打开注册表 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1

,将NLS_LANG默认的SIMPLIFIED CHINESE_CHINA.ZHS16GBK 改为 AMERICAN_AMERICA.AL32UTF8或者 SIMPLIFIED CHINESE_CHINA.AL32UTF8

update 2010.4.27

上面的方法比较需要将整个全局的数据库的字符集转移到UTF8,如果其他表空间需要使用其他字符集,那上面的方法就不适用了。除非你新建一个数据库,但是那时比较耗费资源的一种方法。

新方法:

参看php文档里面的oci_connect()函数:

resource oci_connect ( string $username , string $password [, string $db [, string $charset [, int $session_mode ]]] )

将charset参数直接改为你php页面的字符集,比如:

$this->conn = oci_connect($user, $passwd, $db,'utf8');

结果一切正常,这样不过你的数据库用的什么字符集,相当于oracle内部的将字符集转到成$charset所对应的字符集。

oracle表空间操作详解-入门基础

来源

建立表空间

CREATE TABLESPACE data01
DATAFILE  '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE  128k;             #指定区尺寸为128k,如不指定,区尺寸默认为64k

删除表空间

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

修改表空间大小

alter database datafile '/path/NADDate05.dbf' resize  100M

移动表至另一表空间

alter table move tablespace room1;

一、建立表空间

CREATE TABLESPACE data01
DATAFILE  '/oracle/oradata/db/DATA01.dbf' SIZE 500M
UNIFORM SIZE  128k;             #指定区尺寸为128k,如不指定,区尺寸默认为64k

二、建立UNDO表空间

CREATE UNDO TABLESPACE UNDOTBS02
DATAFILE  '/oracle/oradata/db/UNDOTBS02.dbf' SIZE 50M

#注意:在OPEN状态下某些时刻只能用一个UNDO表空间,如果要用新建的表空间,必须切换到该表空间:

ALTER SYSTEM SET undo_tablespace=UNDOTBS02;

三、建立临时表空间

CREATE TEMPORARY TABLESPACE temp_data
TEMPFILE  '/oracle/oradata/db/TEMP_DATA.dbf' SIZE 50M

四、改变表空间状态

1.使表空间脱机

ALTER TABLESPACE game OFFLINE;

如果是意外删除了数据文件,则必须带有 RECOVER选项

ALTER TABLESPACE game OFFLINE FOR RECOVER;

2.使表空间联机

ALTER TABLESPACE game ONLINE;

3.使数据文件脱机

ALTER DATABASE DATAFILE 3 OFFLINE;

4.使数据文件联机

ALTER DATABASE DATAFILE 3 ONLINE;

5.使表空间只读

ALTER TABLESPACE game READ ONLY;

6.使表空间可读写

ALTER TABLESPACE game READ WRITE;

五、删除表空间

DROP TABLESPACE data01 INCLUDING CONTENTS AND DATAFILES;

六、扩展表空间

首先查看表空间的名字和所属文件

select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0)  total_space
from dba_data_files
order by tablespace_name;

1.增加数据文件

 ALTER TABLESPACE game
 ADD DATAFILE  '/oracle/oradata/db/GAME02.dbf' SIZE 1000M;

2.手动增加数据文件尺寸

 ALTER DATABASE DATAFILE  '/oracle/oradata/db/GAME.dbf'
 RESIZE 4000M;

3.设定数据文件自动扩展

 ALTER DATABASE DATAFILE  '/oracle/oradata/db/GAME.dbf'
 AUTOEXTEND ON NEXT 100M
 MAXSIZE  10000M;

4.设定后查看表空间信息

 SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES  USED, C.BYTES FREE,
 (B.BYTES*100)/A.BYTES "%  USED",(C.BYTES*100)/A.BYTES "% FREE"
 FROM SYS.SM$TS_AVAIL  A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
 WHERE  A.TABLESPACE_NAME=B.TABLESPACE_NAME AND  A.TABLESPACE_NAME=C.TABLESPACE_NAME;

5.ORACLE表空间的备份与恢复方法

表空间备份与恢复主要针对于大型数据库中,某个表空间数据变化非常大,增长速度非常快的情况。表空间的备份实现脚本:

run  {
allocate channel d1 type disk;
backup tablespace  "TEST","USERS" format ’d:\backup\tb_%d_%s_%p_%t’;
release channel  d1;
}

恢复时,如果用户是要恢复被删除的表空间中的表或视图,或者是使用者用drop tablespace正常命令删除了表空间,此时控制文件中记录的数据库结构也跟着做了改变,此时只能用不完全恢复,让数据库恢复到以前的一个时间点或 SCN。先恢复控制文件,再恢复表空间。

Shutdown abort; 
Startup nomount; 
run { 
Allocate channel  d1 type disk; 
Restore controlfile from  ‘d:\backup\CTL_TEST_0_1_6555’; 
Release channel d1 ; 
Alter  database open; //要为打开状态 
 
set until time "TO_DATE(’08/08/2007  10:50:00’,’MM/DD/YYYY HH24:MI:SS’)"; 
sql ’alter tablespace TEST,  USERS offline immediate’; 
allocate channel d1 type disk; 
restore  tablespace  TEST, USERS; 
recover tablespace  TEST, USERS; 
release  channel d1; 
sql ’alter tablespace TEST, USERS online’; 
}

注意:After you perform TSPITR on a tablespace, you cannot use backups of that tablespace
from before the TSPITR was completed and the tablespace put back on line. If you
start using the recovered tablespaces without taking a backup, you are running your
database without a usable backup of those tablespaces. For this example, the users
and tools tablespaces must be backed up, as follows:
RMAN> BACKUP TABLESPACE users, tools;
You can then safely bring the tablespaces online, as follows:
RMAN> SQL "ALTER TABLESPACE users, tools ONLINE";
Your recovered tablespaces are now ready for use.

HTML转XHTML

我准备做一个OA系统,设计能力比较差,所以找到了一个叫做MyOffice的模板,但是这个模板HTML代码是4.0规范的,为了我系统中XHTML 1.0 Transitional 保持一致,所以找到了一个好站:http://www.it.uc3m.es/jaf/html2xhtml/ 可以将html转换成xhtml,还可以美化代码缩进之类的。可以在线转换,也可以下载一个命令行程序批量转换,提高效率。另外值得一提的是,这个html2xhtml提供了一个HTTP API,调用起来很方便,不过正处于beta阶段。另外还有一个.net 40的库供调用,总之不错,得顶一下。