2007年4月7日

在网络邻居里面隐藏

net config server /hidden:yes

posted @ 2010-09-16 16:38 A++ 阅读(147) | 评论 (0)编辑 收藏

淘宝接口地址介绍

http://isv.alisoft.com/isv/portal/home/home.jspa

posted @ 2009-10-14 10:52 A++ 阅读(250) | 评论 (1)编辑 收藏

免安装Oracle客户端使用PL/SQL连接Oracle的2种方法

方法一:

大家都知道,用PL/SQL连接Oracle,是需要安装Oracle客户端软件的。有没要想过不安装Oracle客户端直接连接Oracle呢?

      其实我一直想这样做,因为这个客户端实在太让人讨厌了!!!不但会安装一个JDK,而且还会把自己放在环境变量的最前面,会造成不小的麻烦。

      其实我之前问过很多人的,但是他们都说一定需要安装Oracle客户端的.......直到昨天无意中发现了以下这个方法:

      只需要在Oracle下载一个Instant Client Package的软件就可以了,这个软件不需要安装,只要解压就可以用了,很方便,就算重装了系统还是可以用的。

      下载地址:http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html

      下载这个,Instant Client Package - Basic包。然后解压到任意目录,在这个目录下建立NETWORK文件夹,接着再这个文件夹下再建立ADMIN文件夹,然后建立tnsnames.ora文件,内容如下:

     oracledata =
           (DESCRIPTION =
             (ADDRESS_LIST =
               (ADDRESS = (PROTOCOL = TCP)(HOST = yourhostIp )(PORT = 1521))
             )
             (CONNECT_DATA =
               (SERVICE_NAME = yourSID   )
             )
           )
    这里根据自己的实际情况配置。接着打开PL/SQL,在perference里面设置OCI Library和Oracle_home,我的设置是OCI Library=c:\oracleclient\oci.dll,Oracle_home=c:\oracleclient。

     根据自己的实际情况配置,其实就是刚才下载下来的那个包的路径。还有最后一个问题,需要设置一个字符集,这样查询出来的数据才不会是乱码,写一个批处理pldev. bat放到pl安装目录下,内容如下:

    set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    PLSQLDev.exe

     这个字符集,指的是服务器端的字符集,请根据实际情况配置。

     最后,只要双击这个批处理,再填写帐号和密码就可以了


 
方法二:
 
 
前几天发了免安装Oracle客户端使用PL/SQL连接Oracle一文,巴士飞扬和我说,他早就用了另外一个更好用的绿色版本Oracle客户端,而且不需要太复杂的配置。

      我比较了一下,我的文章中的方法,客户端比较大,30M左右。设置比较复杂,不过应该比较稳定。巴士飞扬所提供的包是一个3M多一点的,解压开来10M,应该是某位高人做的。

      绿色版Oracle客户端下载(由巴士飞扬友情提供):Oracle客户端

      大家也说说哪个好用吧!!!

posted @ 2009-08-14 09:36 A++ 阅读(1486) | 评论 (1)编辑 收藏

判断浏览器

<script language="javascript">
if(window.navigator.appName=="Microsoft Internet Explorer"&&window.navigator.appVersion.substring(window.navigator.appVersion.indexOf("MSIE")+5,window.navigator.appVersion.indexOf("MSIE")+8)<6) {
alert("对不起,AICBOSS需要使用IE6.0版本浏览器,请升级!");
window.location="about:blank";
}

posted @ 2009-06-05 08:50 A++ 阅读(228) | 评论 (0)编辑 收藏

cmd ftp 模糊读取文件

@echo off
echo open 10.76.1.77 77>> ftpscript.txt
echo tzys >> ftpscript.txt
echo tzys >> ftpscript.txt
set wind=%date:~0,4%%date:~5,2%%date:~8,2%
echo dir %wind% >> ftpscript.txt
echo prompt off >> ftpscript.txt
echo mget %wind%*.txt >> ftpscript.txt
echo bye >> ftpscript.txt

ftp -s:ftpscript.txt

del ftpscript.txt

posted @ 2009-06-03 11:11 A++ 阅读(402) | 评论 (0)编辑 收藏

Cmd下FTP使用命令全集

2006年02月03日

Cmd下FTP使用命令全集

文章来源:CnXHacker.Net
FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS还是UNIX操作系统下使用FTP,都会遇到大量的FTP内部命令。熟悉并灵活应用FTP的内部命令,可以大大方便使用者,并收到事半功倍之效。

FTP的命令行格式为: ftp -v -d -i -n -g [主机名]
-v 显示远程服务器的所有响应信息;
-n 限制ftp的自动登录,即不使用;
.n etrc文件;
-d 使用调试方式;
-g 取消全局文件名。

ftp使用的内部命令如下(中括号表示可选项):

1.![cmd[args]]:在本地机中执行交互shell,exit回到ftp环境,如:!ls*.zip.
2.$ macro-ame[args]:执行宏定义macro-name.
3.account[password]:提供登录远程系统成功后访问系统资源所需的补充口令。
4.append local-file[remote-file]:将本地文件追加到远程系统主机,若未指定远程系统文件名,则使用本地文件名。
5.ascii:使用ascii类型传输方式。
6.bell:每个命令执行完毕后计算机响铃一次。
7.bin:使用二进制文件传输方式。
8.bye:退出ftp会话过程。
9.case:在使用mget时,将远程主机文件名中的大写转为小写字母。
10.cd remote-dir:进入远程主机目录。
11.cdup:进入远程主机目录的父目录。
12.chmod mode file-name:将远程主机文件file-name的存取方式设置为mode,如: chmod 777 a.out 。
13.close:中断与远程服务器的ftp会话(与open对应)。
14.cr:使用asscii方式传输文件时,将回车换行转换为回行。
15.delete remote-file:删除远程主机文件。
16.debug[debug-value]:设置调试方式, 显示发送至远程主机的每条命令,如: deb up 3,若设为0,表示取消debug。
17.dir[remote-dir][local-file]:显示远程主机目录,并将结果存入本地文件local-file。
18.disconnection:同close。
19.form format:将文件传输方式设置为format,缺省为file方式。
20.get remote-file[local-file]: 将远程主机的文件remote-file传至本地硬盘的local-file。
21.glob:设置mdelete,mget,mput的文件名扩展,缺省时不扩展文件名,同命令行的-g参数。
22.hash:每传输1024字节,显示一个hash符号(#)。
23.help[cmd]:显示ftp内部命令cmd的帮助信息,如:help get。
24.idle[seconds]:将远程服务器的休眠计时器设为[seconds]秒。
25.image:设置二进制传输方式(同binary)。
26.lcd[dir]:将本地工作目录切换至dir。
27.ls[remote-dir][local-file]:显示远程目录remote-dir, 并存入本地文件local-file。
28.macdef macro-name:定义一个宏,遇到macdef下的空行时,宏定义结束。
29.mdelete[remote-file]:删除远程主机文件。
30.mdir remote-files local-file:与dir类似,但可指定多个远程文件,如: mdir *.o.*.zipoutfile 。
31.mget remote-files:传输多个远程文件。
32.mkdir dir-name:在远程主机中建一目录。
33.mls remote-file local-file:同nlist,但可指定多个文件名。
34.mode[modename]:将文件传输方式设置为modename, 缺省为stream方式。
35.modtime file-name:显示远程主机文件的最后修改时间。
36.mput local-file:将多个文件传输至远程主机。
37.newer file-name: 如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近,则重传该文件。
38.nlist[remote-dir][local-file]:显示远程主机目录的文件清单,并存入本地硬盘的local-file。
39.nmap[inpattern outpattern]:设置文件名映射机制, 使得文件传输时,文件中的某些字符相互转换,如:nmap $1.$2.$3[$1,$2].[$2,$3],则传输文件a1.a2.a3时,文件名变为a1,a2。该命令特别适用于远程主机为非UNIX
机的情况。
40.ntrans[inchars[outchars]]:设置文件名字符的翻译机制,如ntrans1R,则文件名LLL将变为RRR。
41.open host[port]:建立指定ftp服务器连接,可指定连接端口。
42.passive:进入被动传输方式。
43.prompt:设置多个文件传输时的交互提示。
44.proxy ftp-cmd:在次要控制连接中,执行一条ftp命令, 该命令允许连接两个ftp服务器,以在两个服务器间传输文件。第一条ftp命令必须为open,以首先建立两个服务器间的连接。
45.put local-file[remote-file]:将本地文件local-file传送至远程主机。
46.pwd:显示远程主机的当前工作目录。
47.quit:同bye,退出ftp会话。
48.quote arg1,arg2...:将参数逐字发至远程ftp服务器,如:quote syst.
49.recv remote-file[local-file]:同get。
50.reget remote-file[local-file]:类似于get,但若local-file存在,则从上次传输中断处续传。
51.rhelp[cmd-name]:请求获得远程主机的帮助。
52.rstatus[file-name]:若未指定文件名,则显示远程主机的状态,否则显示文件状态。
53.rename[from][to]:更改远程主机文件名。
54.reset:清除回答队列。
55.restart marker:从指定的标志marker处,重新开始get或put,如:restart 130。
56.rmdir dir-name:删除远程主机目录。
57.runique:设置文件名唯一性存储,若文件存在,则在原文件后加后缀..1,.2等。
58.send local-file[remote-file]:同put。
59.sendport:设置PORT命令的使用。
60.site arg1,arg2...:将参数作为SITE命令逐字发送至远程ftp主机。
61.size file-name:显示远程主机文件大小,如:site idle 7200。
62.status:显示当前ftp状态。
63.struct[struct-name]:将文件传输结构设置为struct-name, 缺省时使用stream结构。
64.sunique:将远程主机文件名存储设置为唯一(与runique对应)。
65.system:显示远程主机的操作系统类型。
66.tenex:将文件传输类型设置为TENEX机的所需的类型。
67.tick:设置传输时的字节计数器。
68.trace:设置包跟踪。
69.type[type-name]:设置文件传输类型为type-name,缺省为ascii,如:type binary,设置二进制传输方式。
70.umask[newmask]:将远程服务器的缺省umask设置为newmask,如:umask 3。
71.user user-name[password][account]:向远程主机表明自己的身份,需要口令时,必须输入口令,如:user anonymous my@email
72.verbose:同命令行的-v参数,即设置详尽报告方式,ftp服务器的所有响应都将显示给用户,缺省为on.
73.?[cmd]:同help.

posted @ 2009-06-02 15:00 A++ 阅读(269) | 评论 (0)编辑 收藏

表拷贝

要看这两个表的字段是否一致阿,  
  如果是象插到另以个空表,还不入建一个新的,  
  create   table   newtable   as   select   *   from   oldtable;  
  有数据的话就用  
  insert   into   newtable(select   *   from   oldtable);

posted @ 2009-05-31 18:28 A++ 阅读(166) | 评论 (0)编辑 收藏

ubuntu下bin文件安装说明

ubuntu下bin文件的安装:

目前我就安装了2个bin文件:一个是realplayer11,另一个是google earth

以realplayer11.bin为例:

A:将realplayer11.bin放置在主文件夹中 (位置-主文件夹)

B:打开终端 (应用程序-附件-终端)

C:输入命令: sudo chmod +x realplayer11.bin 回车

再输入:sudo ./realplayer11.bin 回车

命令行完成后,打开应用程序-影音-realplayer, 进入图形安装界面,这就跟windows下一样了。

注:real player 11安装成后是需要在首选项中对硬件进行配置,配置下声频设备什么的,很简单。

同样的方式安装google earth,但是安装完成后,直接在应用程序中打开google earth会发现一个问题,怎么这个google earth里没有地球,只有星星呢?

是怎么回事呢?原来是权限的问题,据说可以在安装的结尾解决这个问题,但是我没看到,也懒的重新安装,所以就用稍微麻烦点的方法吧。

---》从终端打开google earth 命令: sudo googleearth 然后照常摸黑输入密码,打开googleearth,搞定。

posted @ 2009-05-14 09:08 A++ 阅读(1013) | 评论 (0)编辑 收藏

言论

◎ “拆东墙补西墙”之升级版“拆别人墙补自己墙”

◎ 白马啊……你死去哪了!是不是你把王子弄丢了不敢来见我了。
◎ 别人装处,我只好装经验丰富。
◎ 不可否认,马赛克是这个世纪阻碍人类裸体艺术进步最大的障碍!
◎ 不怕小偷儿带工具,就怕小偷儿懂科技!
◎ 长个包子样就别怨狗跟着!
◎ 纯,属虚构;乱,是佳人。
◎ 当白天又一次把黑夜按翻在床上的时候,太阳就出生了……
◎ 跌倒了,爬起来再哭。
◎ 犯贱是普遍真理,你我只是其中之一。
◎ 孤单是一个人的狂欢,狂欢是一群人的孤单。
◎ 好久没有人把牛皮吹的这么清新脱俗了!
◎ 既宅又腐,前途未卜。
◎ 今天心情不好,我只有四句话想说,包括这句和前面的两句,我的话说完了
◎ 开车无难事,只怕有新人!
◎ 雷锋做了好事不留名,但是每一件事情都记到日记里面。
◎ 路漫漫其修远兮,不如我们打的吧。
◎ 驴是的念来过倒
◎ 每当我错过一个女孩,我就在地上放一块砖,于是便有了长城。
◎ 明骚易躲,暗贱难防。
◎ 命运负责洗牌,但是玩牌的是我们自己!
◎ 某女在博客日记写:某月某日,大醉而归,伸手一摸,手机和贞操都在,睡觉!
◎ 男人膝下有黄金,我把整个腿都切下来了,连块铜也没找着!
◎ 你不能让所有人满意,因为不是所有的人都是人。
◎ 你的手机比话费还便宜。
◎ 你以为我会眼睁睁看着你去送死吗?我会闭上眼睛的。
◎ 女人一生喜欢两朵花:一是有钱花,二是尽量花!
◎ 骗子太多,傻子明显不够用了。
◎ 钱不是问题,问题是没钱!
◎ 钱可以解决的问题都不是问题。
◎ 人家有的是背景,而我有的是背影。
◎ 人又不聪明,还学人家秃顶!
◎ 如果你容不下我,说明不是你的心胸太狭小,就是我的人格太伟大。
◎ 如果太阳不出来了,我就不去上班了;如果出来了,我就继续睡觉!
◎ 上帝不会为难头脑简单的孩子。
◎ 失败不可怕,关键看是不是成功他妈。
◎ 史上最神秘的部门:有关部门。
◎ 思想有多远,你就给我滚多远!
◎ 虽然你身上喷了古龙水,但我还是能隐约闻到一股人渣味儿。
◎ 台湾一日不收复,我一日不过四级!
◎ 谈钱不伤感情,谈感情最他妈伤钱。
◎ 唾沫是用来数钞票的,而不是用来讲道理的。
◎ 参加减肥班,教练让我穿宽松衣服,要有宽松的衣服我参加减肥班干嘛?
◎ 我的名字叫Rain,小名叫润土。
◎ 我的人生有A 面也有B面,你的人生有S面也有B面。
◎ 我的优点是:我很帅;但是我的缺点是:我帅的不明显。
◎ 我是胖人,不是粗人。
◎ 我这辈子只有两件事不会:这也不会,那也不会。
◎ 我自横刀向天笑,笑完我就去睡觉。
◎ 我诅咒你一辈子买方便面没有调料包。
◎ 洗脸只洗脸颊,刷牙只刷门牙
◎ 现在的大学生太没素质了!过来拷毛片,居然用剪切!
◎ 一觉醒来,天都黑了。
◎ 一山不能容二虎,除非一公和一母。
◎ 英雄不问出路,流氓不看岁数!
◎ 一次上街,被一群女孩拦住。她们说我帅我不承认,她们就打我,说我虚伪。
◎ 鸳鸯戏水,都他妈淹死;比翼双飞,都他妈摔死。
◎ 再牛的肖邦,也弹不出老子的悲伤!
◎ 让我拿什么整死你,我的爱人。
◎ 左青龙,右白虎,肩膀纹个米老鼠。

posted @ 2009-05-12 11:35 A++ 阅读(267) | 评论 (0)编辑 收藏

新建用户并添加到管理组

用recovery mode模式启动后,进入命令行模式,提示符应该是 #

1、输入用户管理的命令,新建用户(以test为例):
useradd test

修改 test 用户的密码:
passwd test

2、将新用户添加到管理组:
gpasswd -a test admin

3、给 test 用户创建自己的目录:
cd /home

mkdir test

chown test /home/test

4、重新启动,
reboot

然后用 test 登录,

登录以后,点菜单“系统-系统管理-用户和组”,进去选中你的用户,点右边的“属性”按钮,到用户权限里打勾需要的;

posted @ 2009-05-12 09:23 A++ 阅读(222) | 评论 (0)编辑 收藏

收集MyEclipse 7.0注册码

icech在网上查代码,竟然找到了一个Myeclipse7.0注册机的源代码,真强!这个源代码号称支持Myeclipse 6.5和7.0两个版本,java的代码,很爽!编译运行后输入想要注册的用户名,然后再控制台下就会生成相应的注册码!

代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class MyEclipseGen {
private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";

public String getSerial(String userId, String licenseNum) {
   java.util.Calendar cal = java.util.Calendar.getInstance();
   cal.add(1, 3);
   cal.add(6, -1);
   java.text.NumberFormat nf = new java.text.DecimalFormat("000");
   licenseNum = nf.format(Integer.valueOf(licenseNum));
   String verTime = new StringBuilder("-").append(
     new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))
     .append("0").toString();
   String type = "YE3MP-";
   String need = new StringBuilder(userId.substring(0, 1)).append(type)
     .append("300").append(licenseNum).append(verTime).toString();
   String dx = new StringBuilder(need).append(LL).append(userId)
     .toString();
   int suf = this.decode(dx);
   String code = new StringBuilder(need).append(String.valueOf(suf))
     .toString();
   return this.change(code);
}

private int decode(String s) {
   int i;
   char[] ac;
   int j;
   int k;
   i = 0;
   ac = s.toCharArray();
   j = 0;
   k = ac.length;
   while (j < k) {
    i = (31 * i) + ac[j];
    j++;
   }
   return Math.abs(i);
}

private String change(String s) {
   byte[] abyte0;
   char[] ac;
   int i;
   int k;
   int j;
   abyte0 = s.getBytes();
   ac = new char[s.length()];
   i = 0;
   k = abyte0.length;
   while (i < k) {
    j = abyte0[i];
    if ((j >= 48) && (j <= 57)) {
     j = (((j - 48) + 5) % 10) + 48;
    } else if ((j >= 65) && (j <= 90)) {
     j = (((j - 65) + 13) % 26) + 65;
    } else if ((j >= 97) && (j <= 122)) {
     j = (((j - 97) + 13) % 26) + 97;
    }
    ac[i] = (char) j;
    i++;
   }
   return String.valueOf(ac);
}

public MyEclipseGen() {
   super();
}

public static void main(String[] args) {
   try {
    System.out.println("please input register name:");
    BufferedReader reader = new BufferedReader(new InputStreamReader(
      System.in));
    String userId = null;
    userId = reader.readLine();
    MyEclipseGen myeclipsegen = new MyEclipseGen();
    String res = myeclipsegen.getSerial(userId, "5");
    System.out.println("Serial:" + res);
    reader.readLine();
   } catch (IOException ex) {
   }
}
}

注意:注册Myeclipse的时候要先断开网络,否则可能注册不成功!

注册方法:
window -> preferences -> myeclipse -> subscription

下面是一个网上流传很广的Myeclipse注册码,有效!

Subscriber:MaYong
Subscription Code:ZLR8ZO-655444-54678656985359684

2.

下载页面:
http://www.myeclipseide.com/Downloads-req-viewsdownload-sid-30.html

下载地址:
http://downloads.myeclipseide.com/downloads/products/eworkbench/7.0M1/MyEclipse_7.0M1_E3.4.0_Installer.exe

主要增加了对JavaScript的一些工具,以及JSF(Java server face)的一些工具

汉化教程:
首先打开MyEclipse7.0
然后选择Help →
Software Updates..
然后弹出一个菜单,选择Available Software → Add Site..
然后会弹出一个输入框,输入
http://download.eclipse.org/technology/babel/update-site/ 或者
http://download.eclipse.org/technology/babel/update-site/ganymede/
然后点击确定,这时也许点该网址对应的列表刷不出来,我们要点一下Refresh 稍等一下选择列表里面的中文那一项
选择Eclipse language pack for Simplified chinese

然后点击Install.. → 同意协议 最后等MyEclipse自动加载,可能加载过程有点慢,耐心等下,如果实在太慢了,重新选择一次试试,等完成再关闭MyEclipse 然后启动,MyEclipse
就成了中文版的
注册码:
Subscriber: www.1cn.biz
Subscription Code: jLR8ZC-655444-65526656052107345

填写注册码时,最好拔掉网线!!!

posted @ 2009-03-27 11:02 A++ 阅读(1809) | 评论 (1)编辑 收藏

名词解释

框架:一个应用程序的半成品,中间可以共享的可复用的公共构架。

posted @ 2007-09-04 09:28 A++ 阅读(159) | 评论 (0)编辑 收藏

删除服务

该服务程序安装目录删除 开始》》运行 输入regedit 回车进入注册表 看下 \HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 有没有 有删除次 重启

posted @ 2007-05-30 10:33 A++ 阅读(175) | 评论 (0)编辑 收藏

Java连接各种数据库的实例

Java连接各种数据库的实例 
来源:  网全天下  作者:  Zenith 
此文中的代码主要列出连接数据库的关键代码,其他访问数据库代码省略 
 
1、Oracle8/8i/9i数据库(thin模式)
Oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String  url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为数据库的SID
String  user="test";
String  password="test";
Connection  conn=  DriverManager.getConnection(url,user,password);
 
2、DB2数据库
Class.forName("com.ibm.db2.jdbc.app.DB2Driver  ").newInstance();
String  url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String  user="admin";
String  password="";
Connection  conn=  DriverManager.getConnection(url,user,password);

3、Sql? Server7.0/2000/2005数据库
连接SqlServer2000
Microsoft SQLServer(http://jtds.sourceforge.net/)
Class.forName( "net.sourceforge.jtds.jdbc.Driver" );
cn = DriverManager.getConnection(
"jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd );

Microsoft SQLServer(http://www.microsoft.com/)
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb为数据库
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);

连接SqlServer2005
(http://www.microsoft.com/)msjdbc_2005.jar/
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
URL = "jdbc:sqlserver://localhost:1433;DatabaseName=tempdb";
2000和2005略有不同
 
4、Sybase数据库
Sybase(http://jtds.sourceforge.net)jconn2.jar/
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String  url  ="  jdbc:sybase:Tds:localhost:5007/myDB";
//myDB为你的数据库名
Properties  sysProps  =  System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection  conn=  DriverManager.getConnection(url,  SysProps);
 
5、Informix数据库
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String  url  =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB为数据库名
Connection  conn=  DriverManager.getConnection(url);
 
6、MySQL数据库
MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar/
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String  url  ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode= 
true&characterEncoding=8859_1"
//myDB为数据库名
Connection  conn=  DriverManager.getConnection(url);
 
7、PostgreSQL数据库
PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar/
Class.forName("org.postgresql.Driver").newInstance();
String  url  ="jdbc:postgresql://localhost/myDB"
//myDB为数据库名
String  user="myuser";
String  password="mypassword";
Connection  conn=  DriverManager.getConnection(url,user,password);
 
8、odbc桥接 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  //装载JDBC-ODBC驱动程序
strCon  =  "jdbc:odbc:Test_DB";  //设置数据库连接字符串  ,test_DB 


 9、access数据库直连用ODBC的
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");
Connection conn = DriverManager.getConnection(url,"","");
 Statement stmtNew=conn.createStatement() ;

二、JDBC连接MySql方式
    下面是使用JDBC连接MySql的一个小的教程    

    1、查找驱动程序
    MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。

    2、动态指定classpath
    如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。

    3、加载驱动程序
try{
    Class.forName(com.mysql.jdbc.Driver);
    System.out.println(Success loading Mysql Driver!);
}catch(Exception e)
{
    System.out.println(Error loading Mysql Driver!);
    e.printStackTrace();
}

    4、设置连接的url
    jdbc:mysql://localhost/databasename[?pa=va][&pa=va]

三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。

  1、在客户端软件开发中使用Thin驱动程序

  在开发Java软件方面,Oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,Oracle建议在客户端软件的开发中使用OCI驱动程序,这似乎是正确的。但我建议使用Thin驱动程序,因为通过多次测试发现,在通常情况下,Thin驱动程序的性能都超过了OCI驱动程序。

  2、关闭自动提交功能,提高系统性能

  在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示:

  conn.setAutoCommit(false);

  值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。

  3、在动态SQL或有时间限制的命令中使用Statement对象

  在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。这可能会使你认为,使用PreparedStatement对象比使用Statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的SQL操作中,除非成批地处理SQL命令,我们应当考虑使用Statement对象。

  此外,使用Statement对象也使得编写动态SQL命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的SQL命令。因此,我认为,Statement对象可以使动态SQL命令的创建和执行变得更加简单。

  4、利用helper函数对动态SQL命令进行格式化

  在创建使用Statement对象执行的动态SQL命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字O'Reilly插入表中的SQL命令,则必须使用二个相连的“''”号替换O'Reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个SQL命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个Date型的值,然后让它输出基于Oracle的to_date()函数的字符串表达式。

  5、利用PreparedStatement对象提高数据库的总体效率

  在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。

  6、在成批处理重复的插入或更新操作中使用PreparedStatement对象

  如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch():
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}


  调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。

  7、使用Oracle locator方法插入、更新大对象(LOB)

  Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。

  8、使用SQL92语法调用存储过程

  在调用存储过程时,我们可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用SQL92。

  9、使用Object SQL将对象模式转移到数据库中

  既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。

  10、利用SQL完成数据库内的操作

  我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求,而不是使用Java等过程化的编程语言。

  如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥SQL的功能。


二、JDBC连接MySql方式
    下面是使用JDBC连接MySql的一个小的教程    

    1、查找驱动程序
    MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。

    2、动态指定classpath
    如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。

    3、加载驱动程序
try{
    Class.forName(com.mysql.jdbc.Driver);
    System.out.println(Success loading Mysql Driver!);
}catch(Exception e)
{
    System.out.println(Error loading Mysql Driver!);
    e.printStackTrace();
}

    4、设置连接的url
    jdbc:mysql://localhost/databasename[?pa=va][&pa=va]

三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。

  1、在客户端软件开发中使用Thin驱动程序

  在开发Java软件方面,Oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,Oracle建议在客户端软件的开发中使用OCI驱动程序,这似乎是正确的。但我建议使用Thin驱动程序,因为通过多次测试发现,在通常情况下,Thin驱动程序的性能都超过了OCI驱动程序。

  2、关闭自动提交功能,提高系统性能

  在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示:

  conn.setAutoCommit(false);

  值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。

  3、在动态SQL或有时间限制的命令中使用Statement对象

  在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。这可能会使你认为,使用PreparedStatement对象比使用Statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的SQL操作中,除非成批地处理SQL命令,我们应当考虑使用Statement对象。

  此外,使用Statement对象也使得编写动态SQL命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的SQL命令。因此,我认为,Statement对象可以使动态SQL命令的创建和执行变得更加简单。

  4、利用helper函数对动态SQL命令进行格式化

  在创建使用Statement对象执行的动态SQL命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字O'Reilly插入表中的SQL命令,则必须使用二个相连的“''”号替换O'Reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个SQL命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个Date型的值,然后让它输出基于Oracle的to_date()函数的字符串表达式。

  5、利用PreparedStatement对象提高数据库的总体效率

  在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。

  6、在成批处理重复的插入或更新操作中使用PreparedStatement对象

  如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch():
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}


  调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。

  7、使用Oracle locator方法插入、更新大对象(LOB)

  Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。

  8、使用SQL92语法调用存储过程

  在调用存储过程时,我们可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用SQL92。

  9、使用Object SQL将对象模式转移到数据库中

  既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。

  10、利用SQL完成数据库内的操作

  我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求,而不是使用Java等过程化的编程语言。

  如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥SQL的功能。


    1、查找驱动程序
    MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。

    2、动态指定classpath
    如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。

    3、加载驱动程序
try{
    Class.forName(com.mysql.jdbc.Driver);
    System.out.println(Success loading Mysql Driver!);
}catch(Exception e)
{
    System.out.println(Error loading Mysql Driver!);
    e.printStackTrace();
}

    4、设置连接的url
    jdbc:mysql://localhost/databasename[?pa=va][&pa=va]

三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。

  1、在客户端软件开发中使用Thin驱动程序

  在开发Java软件方面,Oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,Oracle建议在客户端软件的开发中使用OCI驱动程序,这似乎是正确的。但我建议使用Thin驱动程序,因为通过多次测试发现,在通常情况下,Thin驱动程序的性能都超过了OCI驱动程序。

  2、关闭自动提交功能,提高系统性能

  在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示:

  conn.setAutoCommit(false);

  值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。

  3、在动态SQL或有时间限制的命令中使用Statement对象

  在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。这可能会使你认为,使用PreparedStatement对象比使用Statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的SQL操作中,除非成批地处理SQL命令,我们应当考虑使用Statement对象。

  此外,使用Statement对象也使得编写动态SQL命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的SQL命令。因此,我认为,Statement对象可以使动态SQL命令的创建和执行变得更加简单。

  4、利用helper函数对动态SQL命令进行格式化

  在创建使用Statement对象执行的动态SQL命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字O'Reilly插入表中的SQL命令,则必须使用二个相连的“''”号替换O'Reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个SQL命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个Date型的值,然后让它输出基于Oracle的to_date()函数的字符串表达式。

  5、利用PreparedStatement对象提高数据库的总体效率

  在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。

  6、在成批处理重复的插入或更新操作中使用PreparedStatement对象

  如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch():
PreparedStatement pstmt3D null;
try {
((OraclePreparedStatement)
pstmt).setExecuteBatch(30);
...
pstmt.executeUpdate();
}


  调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。

  7、使用Oracle locator方法插入、更新大对象(LOB)

  Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。

  8、使用SQL92语法调用存储过程

  在调用存储过程时,我们可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用SQL92。

  9、使用Object SQL将对象模式转移到数据库中

  既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。

  10、利用SQL完成数据库内的操作

  我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求,而不是使用Java等过程化的编程语言。

  如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥SQL的功能。

 

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=495470

posted @ 2007-04-24 09:36 A++ 阅读(245) | 评论 (0)编辑 收藏

数据库设计范式的通俗理解(转)

第一范式

对于表中的每一行,必须且仅仅有唯一的行值.在一行中的每一列仅有唯一的值并且具有原子性.

第二范式

第二范式要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键。主键必须有唯一性的元素,一个主键可以由一个或更多的组成唯一值的列组成。一旦创建,主键无法改变,外键关联一个表的主键。主外键关联意味着一对多的关系.

第三范式

第三范式要求非主键列互不依赖.

第四范式

第四范式禁止主键列和非主键列一对多关系不受约束

第五范式

第五范式将表分割成尽可能小的块,为了排除在表中所有的冗余

posted @ 2007-04-18 10:36 A++ 阅读(311) | 评论 (0)编辑 收藏

Hibernate和iBatis比较

『本文转至:http://hi.baidu.com/injava/blog/item/946b1c46c3b4a6086a63e529.html

简介

Hibernate 是当前最流行的O/R mapping框架,当前版本是3.05。它出身于sf.net,现在已经成为Jboss的一部分了    

iBATIS 是另外一种优秀的O/R mapping框架,当前版本是2.0。目前属于apache的一个子项目了。    

相对HibernateO/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。     

Hibernate对数据库结构提供了较为完整的封装,HibernateO/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。    

iBATIS 的着力点,则在于POJO SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO

使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,

这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。 

二者的对比:

1.  iBATIS非常简单易学,Hibernate相对较复杂,门槛较高。

2.  二者都是比较优秀的开源产品

3.  当系统属于二次开发,无法对数据库结构做到控制和修改,iBATIS的灵活性将比Hibernate更适合

4.  系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。

5.  iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。

6.  以数据库字段一一对应映射得到的POHibernte这种对象化映射得到的PO是截然不同的,本质区别在于这种PO是扁平化的,不像Hibernate映射的PO是可以表达立体的对象继承,聚合等等关系的,这将会直接影响到你的整个软件系统的设计思路。

7.  Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS

8.  最关键的一句话是iBATIS的作者说的:

If you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool.

If you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy

结论:

Hibernate 和iBATIS可以说是互相补充,共同发展的关系.具体你想用什么要看实际情况.如果看了上面的文字还是拿不定注意,那就Just to try it.实践是检验真理的唯一标准.鞋合不合适,只有试了才知道。
 

评论:

1.Hhibernate集成度很高,更好的封装了数据库操作。ibatis适用于sql语法复杂的系统,而且也适合以前用jdbc开发的人员,跨度不是很大。

2.hibernate和ibatis基本属于一类的啊。ibatis的LEADER:C.B说的话是:如果你的系统全部是从头自主设计开发(数据库自己设计),SQL不至于太复杂,团队对hibernate和面向对象熟练...那么用hibernate但是如果数据库很大很复杂、是遗留系统甚至于设计比较糟糕(你自己不可以做大的改动、需要重用很多遗留存储过程),团队没有一个hibernate牛人,团队只对SQL熟练那么还是推荐ibatis

3.个人感觉iBatis强在复杂的查询和存储过程的使用,而Hibernate则在单表的操作上有优势,其实也可以在dao层使用hibernate+iBatis。

4.两个在必要的时候才需要在一个项目里边使用两种框架。个人认为,hibernate适合于事务性的,逻辑性较强的系统,ibatis适用于查询为主的系统,
如果要两个都用,ibatis应该作为hibernate的有益补充,着重解决多表连接查询的问题。

posted @ 2007-04-16 15:43 A++ 阅读(858) | 评论 (0)编辑 收藏

开源的图表工具

JFreeChart is a free (LGPL) chart library for the Java(tm) platform. It supports bar charts, pie charts, line charts, time series charts, scatter plots, histograms, simple Gantt charts, Pareto charts, bubble plots, dials, thermometers and more.
JFreeChart它主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

posted @ 2007-04-16 11:16 A++ 阅读(230) | 评论 (0)编辑 收藏

window.open和window.location

window.open是打开新窗口。
window.location是将本页替换了,也就是定位。

例如:

<input   type="button"     value="转向"   onclick="window.open('default.htm')">

<input   type="button"     value="转向"    onclick="window.location='default.htm';">      

posted @ 2007-04-12 12:07 A++ 阅读(1036) | 评论 (1)编辑 收藏

js中innerHTML与innerText的用法与区别

js中innerHTML与innerText的用法与区别
(Javascript)
『本文地址:http://v1.djasp.net/Static/35/1794.stm


用法:

<div id="test">
   <span style="color:red">test1</span> test2
</div>

在JS中可以使用:

test.innerHTML:

  也就是从对象的起始位置到终止位置的全部内容,包括Html标签。


  上例中的test.innerHTML的值也就是“<span style="color:red">test1</span> test2 ”。

test.innerText:

  从起始位置到终止位置的内容, 但它去除Html标签

  上例中的text.innerTest的值也就是“test1 test2”, 其中span标签去除了。


test.outerHTML:

  除了包含innerHTML的全部内容外, 还包含对象标签本身。

  上例中的text.outerHTML的值也就是<div id="test"><span style="color:red">test1</span> test2</div>


完整示例:

<div id="test">
   <span style="color:red">test1</span> test2
</div>

<a href="javascript:alert(test.innerHTML)">innerHTML内容</a>
<a href="javascript:alert(test.innerText)">inerHTML内容</a>
<a href="javascript:alert(test.outerHTML)">outerHTML内容</a>

特别说明:

  innerHTML是符合W3C标准的属性,而innerText只适用于IE浏览器,因此,尽可能地去使用innerHTML,而少用innerText,如果要输出不含HTML标签的内容,可以使用innerHTML取得包含HTML标签的内容后,再用正则表达式去除HTML标签,下面是一个简单的符合W3C标准的示例:

<a href="javascript:alert(document.getElementById('test').innerHTML.replace(/<.+?>/gim,''))">无HTML,符合W3C标准</a>

posted @ 2007-04-07 22:19 A++ 阅读(364) | 评论 (0)编辑 收藏

<2007年4月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

http://www.matrix.org.cn/resource/article/2005-10-16/Generic_Types_43864.html

搜索

最新评论

阅读排行榜

评论排行榜