linux下挂载kvm磁盘文件

linux下挂载kvm磁盘文件 宿主机Debian, 客户机winxp, 磁盘文件格式raw sudo mount -o loop,offset=32256 -t ntfs winxp.img /mnt http://stackoverflow.com/questions/8171179/kvm-virtual-machine-running-windows-xp-how-to-get-files-from-guest-to-host winxp.img and loop1 is not a single partition (which can be mounted), it is image of full hard disk with own partition table. You should read partition table from loop1 with fdisk; compute offset of first partition and do: sudo mount -o offset=N -t ntfs /dev/loop1 /home/robert/kvm/images/tmp where N is offset in bytes. Telepathic mode on N is 32256 Telepathic mode off ...

2012-04-07 · 1 min · 123 words · -

sed command

sed command commands # 把 foo 替换成 bar # linux echo 'abcfooabc' > file0 sed 's/foo/bar/' file0 echo 'abcfooabc'| sed 's/foo/bar/' # macos sed -i '' 's/foo/bar/' file0 发音:[sed] sed 全名叫 stream editor,流编辑器,sed 可以按照脚本的指令来处理文本文件。 简化对文件的反复操作、编写转换程序等 这里的脚本指的是 sed 脚本,如: 4anewline, ’s/hello/world/’ … 语法 sed SCRIPT INPUTFILE sed [-hnV][-e<script>][-f<script文件>][文本文件] 选项与参数 -i # 直接修改读取的文件内容, 而不是输出到终端. 不加 -i 参数的话默认输出到 STDOUT -f # 直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作; -r # sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法) -n # 使用安静(silent)模式。在一般 sed 的用法中, 所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。 -e script, --expression=script: sed -e 是可以在一行里执行多条命令, -e 参数用来显示的指定脚本位置, -e 和 -f 可以同时出现,也可以多次出现, 使用了 -e 之后,其它非选项字符串都被认为是输入。 sed -e 's/foo/bar/' -e 's/foobar/barfoo/' file0 删除包含指定字符的行 # 删除包含指定字符的行 sed -i '/localhost/d' /etc/hosts 截取文本段 https://blog.wiloon.com/?p=13845 ...

2012-04-07 · 3 min · 521 words · -

Golang 命名规范

Golang 命名规范 变量命名 和结构体类似,变量名称一般遵循驼峰法,首字母根据访问控制原则大写或者小写,但遇到特有名词时,需要遵循以下规则: 如果变量为私有,且特有名词为首个单词,则使用小写,如 appService; 若变量类型为 bool 类型,则名称应以 Has, Is, Can 或 Allow 开头。 var isExist bool var hasConflict bool var canManage bool https://zhuanlan.zhihu.com/p/216001587 golang 文件名 命名规则 project name: - package: lowercase file name: _ https://stackoverflow.com/questions/25161774/what-are-conventions-for-filenames-in-go https://golang.org/doc/effective_go.html#package-names

2012-04-07 · 1 min · 38 words · -

广播地址

广播地址 概述 广播地址(Broadcast Address)是专门用于同时向网络中 (通常指同一子网) 所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID (简称主机 ID) 为全 1 的 IP 地址为广播地址,广播的分组传送给同一个子网的所有计算机。例如,对于10.1.1.0 (255.255.255.0 ) 网段,其广播地址为10.1.1.255 (255 即为 2 进制的 11111111 ) ,当发出一个目的地址为10.1.1.255 的数据包时,它将被分发给该网段上的所有计算机。广播地址应用于网络内的所有主机。 Broadcast Address(广播地址)是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID 为全1 的IP 地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,对于10.1.1.0 (255.255.255.0 ) 网段,其广播地址为10.1.1.255 (255 即为2 进制的11111111 ) ,当发出一个目的地址为10.1.1.255 的分组 (封包) 时,它将被分发给该网段上的所有计算机。 广播地址主要有两类 广播地址应用于网络内的所有主机 1)受限广播 它不被路由但会被送到相同物理网络段上的所有主机 IP地址的网络字段和主机字段全为1就是地址255.255.255.255 2)直接广播 网络广播会被路由,并会发送到专门网络上的每台主机 IP地址的网络字段定义这个网络,主机字段通常全为1,如 192.168.10.255 四种I P广播地址 受限的广播地址 受限的广播地址是255.255.255.255。该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样的数据报仅出现在本地网络中。 指向网络的广播 指向网络的广播地址是主机号为全1的地址。A类网络广播地址为netid.255.255.255,其中netid为A类网络的网络号。一个路由器必须转发指向网络的广播,但它也必须有一个不进行转发的选择。 指向子网的广播 指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码。例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。 指向所有子网的广播 指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开。指向所有子网的广播地址的子网号及主机号为全1。例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255是一个指向所有子网的广播地址。然而,如果网络没有划分子网,这就是一个指向网络的广播。 广播和广播地址 TCP/IP协议栈中, 传输层只有UDP可以广播. 只能对同一子网内部广播, 广播数据包不经过路由器. UDP的广播地址为255.255.255.255 ...

2012-04-07 · 1 min · 180 words · -

Linux命令pidof

Linux命令pidof Linux命令pidof - 找出正在运行程序的进程PID 本文链接: http://codingstandards.iteye.com/blog/841123 (转载请注明出处) 用途说明 pidof用于找出正在运行的程序的进程PID (find the process ID of a running program.) ,程序可以是一个二进制执行程序,也可以是一个shell脚本。如果是找出java程序的进程PID,pidof就无能为力了,可以使用ps -ef|grep java或jps -l来查看java进程的信息。通常找出进程PID的目的是确认程序是否在运行、或者为了把它杀掉、或者发送一个信号给它。 常用参数 格式: pidof program 找出program程序的进程PID,如果有多个就会全部列出,program不能是shell脚本名称。 格式: pidof -s program 找出program程序的进程PID,只列出一个。 (Single shot - this instructs the program to only return one pid.) 格式: pidof -x script 找出shell脚本script的进程PID。 参数: -o omitpid 参数: -o omitpid1 -o omitpid2 在列出的进程PID中忽略omitpid。可以有多个。 参数: -s 只列出一个。 使用示例 示例一 [root@smsgw root]# pidof pidof 24386 [root@smsgw root]# pidof console ...

2012-04-06 · 1 min · 165 words · -

Pageant

Pageant Pageant (an SSH authentication agent for PuTTY, PSCP, PSFTP, and Plink)

2012-04-05 · 1 min · 12 words · -

no such file to load — mkmf

no such file to load — mkmf Building native extensions. This could take a while... ERROR: Error installing rails: ERROR: Failed to build gem native extension. /usr/bin/ruby1.8 extconf.rb extconf.rb:1:in \`require': no such file to load - mkmf (LoadError) from extconf.rb:1 For some reason, mkmf.rb is part of the ruby1.8-dev package, and initially I hadn’t installed that. #install ruby1.8-dev sudo apt-get install ruby1.8-dev and everything trotted along happily after that.

2012-04-04 · 1 min · 69 words · -

foo 是什么意思

Foo 是什么意思 http://www.cnblogs.com/felicity/archive/2010/11/30/1892100.html 不管是java,C++,还是PHP,每次都能看到 foo = bar 的例子,这两个单词很恶心,foo查不到字典,bar的解释又让人跟编程联系不上,更弄不清楚这个神秘的foo是个什么关系。 语意不清,学起来心里老是有疙疙瘩瘩的感觉,于是查吧,终于揭开了这两个东西的不正常关系,讲个各个处在闹心中的初学者们听吧。 参考了众多的网络资料,最后,明确的告诉大家,foo和bar就是外国人的张三、李四、王二麻子,只是一种随便的命名方式。跟c语言里面的i,j,k同出一辙。 就是说foo = bar 跟 变量张三 = 李四的侄子 一个意图,所以童鞋们就不要再找foo到底是个啥了。 问foo是啥就跟问张三是谁一样,我想外国人一定也很想知道,张三到底是谁,这个人怎么这么有名,总能看到这个名字,但是历史上记载却又找不到他。 为了这个可恶的foo,居然还动用RFC给foo下了一个明确的词源追踪,无聊的童鞋可以看RFC3092解解闷。 https://www.ietf.org/rfc/rfc3092.txt 下面是网上搜刮来的各种解释: Foo: 本意指程序员用来代表数据、功能或命令的变量。O’Reilly媒体认为FOO是Friends of O’Reilly的缩写,并把他们在2003年举办的年会命名为"2003 FOO"。现在则更多地指声势浩大的某行业大会。 foo = fuck oriented object foo是"你要让它是什么就是什么"。FOO可以具有用户赋于的任何意义。 foo—–潦草的意思!表示很随便的定义! foo没有意义 foo的意思是:Factory Of Objects foo: 一塌糊涂或者bar: 一团糟 foo 不同的字典对其解释相去甚远,一说来自中国"福"字的发音,又有解释为二战时期的一种武器。然而若把众多的解释放在编程领域,关于 foobar的说法是我认为最为贴切的解释。foobar又为foo-bar,其中bar是beyond all recognition的缩写,通俗点就是无法识别,一塌糊涂的意思。而foo是fu的变体,fu是英语习语fuck-up的缩写,同样是一团糟的意思。于是,若你有些编程经验,我想你应该已经明白了为何如今许多编程实例所涉及的事物均被冠名为foo. 介绍 至今约有212 个RFC, 或者约7%的RFC, 从[RFC269]开始,包括了术语’foo’,‘bar’ 或’foobar’作为伪变量而没有任何适当的解释或定义。这可能被认为是微不足道的,但一些新来者,特别是那些非英语国家的人,在理解这些术语时会遇到困难。本文纠正这一问题。 定义和语源 bar /bar/ n. [JARGON] 第二个伪变量,在foo 之后而在baz 之前。 “Suppose we have two functions: FOO and BAR. FOO calls BAR….” ...

2012-04-04 · 5 min · 911 words · -

linux search

linux search whereis whereis命令只能用于程序名的搜索,而且只搜索二进制文件 (参数-b) 、man说明文件 (参数-m) 和源代码文件 (参数-s) 。如果省略参数,则返回所有信息。 whereis命令的使用实例: $ whereis grep which which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 which命令的使用实例: $ which grep type type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。 type命令的使用实例: $ type cd 系统会提示,cd是shell的自带命令 (build-in) 。 $ type grep 系统会提示,grep是一个外部命令,并显示该命令的路径。 $ type -p grep 加上-p参数后,就相当于which命令。 locate locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库 (/var/lib/locatedb) ,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。 locate命令的使用实例: $ locate /etc/sh 搜索etc目录下所有以sh开头的文件。 $ locate ~/m 搜索用户主目录下,所有以m开头的文件。 $ locate -i ~/m 搜索用户主目录下,所有以m开头的文件,并且忽略大小写。 find find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。 find的使用格式如下: $ find <指定目录> <指定条件> <指定动作> <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。 <指定条件>: 所要搜索的文件的特征。 <指定动作>: 对搜索结果进行特定的处理。 ...

2012-04-04 · 1 min · 99 words · -

交叉编译

交叉编译, cross compile http://baike.baidu.com/view/650389.htm 交叉编译是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓 平台,实际上包含两个概念: 体系结构 (Architecture) 、操作系统 (Operating System) 。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。举例来说,我们常说的x86 Linux平台实际上是Intel x86体系结构和Linux for x86操作系统的统称;而x86 WinNT平台实际上是Intel x86体系结构和Windows NT for x86操作系统的简称。 一个经常会被问到的问题就是,“既然我们已经有了主机编译器,那为什么还要交叉编译呢?“其实答案很简单,没办法啊!有时是因为目的平台上不允许或不能够安装我们所需要的编译器,而我们又需要这个编译器的某些特征;有时是因为目的平台上的资源贫乏,无法运行我们所需要编译器;有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。 另一个经常会被问到的问题就是: “既然可以交叉编译,那还要主机编译干吗?“其实答案也很简单,交叉编译是不得已而为之!与主机编译相比,交叉编译受的限制更多,虽然在理论上我们可以做任何形式的交叉编译,但事实上,由于受到专利、版权、技术的限制,并不总是能够进行交叉编译,尤其是在业余条件下!举例来说,我们至今无法生成惠普公司专有的som格式的可执行文件,因此我们根本无法做目的平台为HPPA-HPUX的交叉编译。 就我们这个项目而言,需要交叉编译的原因有两个: 首先,在项目的起始阶段,目的平台尚未建立,因此需要做交叉编译,以生成我们所需要的bootloader (启动引导代码) 以及操作系统核心;其次,当目的平台能启动之后,由于目的平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。 交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件,都需要通过编译的方式,把使用高级计算机语言编写的代码 (比如C代码) 编译 (compile) 成计算机可以识别和执行的二进制代码。比如,我们在Windows平台上,可使用Visual C++开发环境,编写程序并编译成可执行程序。这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为native compilation,中文可理解为本机编译。然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,比如常见的 ARM 平台,其一般的静态存储空间大概是16到32MB,而CPU的主频大概在100MHz到500MHz之间。这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链 (compilation tool chain) 需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上 (比如PC上) 编译出针对其他平台的可执行程序。 要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链 (cross compilation tool chain) ,然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的交叉编译例子如下: 在Windows PC上,利用ADS (ARM 开发环境) ,使用armcc编译器,则可编译出针对ARM CPU的可执行代码。 在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。 在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。 编辑本段 二、交叉编译的基础知识 在做实际工作之前,我想我们应该先掌握一些关于交叉编译的基本知识,其实说白了也就是理解一些我们经常会碰到的英文单词: 宿主机 (host) : 编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。 目标机 (target) : 用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。 ...

2012-04-03 · 1 min · 103 words · -

git repo backup

git repo backup git bundle create /tmp/somefile master 然后传输这个文件包, somefile ,给某个其他参与者: 电子邮件,优盘,一个 xxd 打印品和一个OCR扫描仪,通过电话读字节,狼烟,等等。接收者通过键入如下命 令从文件包获取提交: $ git pull somefile 接收者甚至可以在一个空仓库做这个。不考虑大小, somefile 可以包含整个原先 git仓库。 在较大的项目里,可以通过只打包其他仓库缺少的变更消除浪费。例如,假设提交 ‘`1b6d…‘‘是两个参与者共享的最近提交: $ git bundle create somefile HEAD ^1b6d 如果做的频繁,人可能容易忘记刚发了哪个提交。帮助页面建议使用标签解决这个问题。 即,在你发了一个文件包后,键入: $ git tag -f lastbundle HEAD 并创建较新文件包,使用: $ git bundle create newbundle HEAD ^lastbundle http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/ch06.html http://stackoverflow.com/questions/2129214/backup-a-local-git-repository

2012-04-03 · 1 min · 50 words · -

Linux下的DOS环境 (DOSEMU)

‘Linux下的DOS环境 (DOSEMU)’ 2007年09月05日 星期三 10:56 Linux下拥有一个DOS环境是一件非常有意思的事情,目前可行的方案有Dosemu、Vmware等等,根据个人爱好,我选择的是 DOSEMU,因为它搭建非常简单,而又十分好用。以下是整个的安装过程,最后还可以从网站上直接下载打好的包,解压在个人用户目录中即可直接使用。

2012-04-02 · 1 min · 7 words · -

FreeDOS USB Bootable Drive

FreeDOS USB Bootable Drive http://www.aselabs.com/articles.php?id=243 Author Aron Schatz Posted March 3, 2008 Views 61988 We all use flash drives instead of the older floppy disk standard of last century. The problem with USB is that it isn’t made to boot like a floppy disk. Motherboards now support booting from USB drives made to look like hard drives. This guide is a step by step process running on Ubuntu. Tags Guides USB DOS Boot ...

2012-04-02 · 8 min · 1552 words · -

linux test

linux test http://www.ibm.com/developerworks/cn/linux/l-bash-test.html 内置命令 test 根据表达式_expr_ 求值的结果返回 0 (真) 或 1 (假) 。也可以使用方括号: test expr 和 [ expr ] 是等价的。 可以用$? 检查返回值;可以使用 && 和 || 操作返回值;也可以用本技巧后面介绍的各种条件结构测试返回值。 -d 目录 -e 存在 (也可以用 -a) -f 普通文件 -h 符号连接 (也可以用 -L) -p 命名管道 -r 可读 -s 非空 -S socket -w 可写 -N 从上次读取之后已经做过修改 可以用 -eq、 -ne、-lt、 -le、 -gt 或 -ge 比较算术值,它们分别表示等于、不等于、小于、小于等于、大于、大于等于。

2012-04-01 · 1 min · 58 words · -

linux 格式化U盘

linux 格式化U盘 先卸载u盘 #umount /dev/sdb1 #注意/dev/后面的设备要根据你的实际情况而定 格式化并建立VFAT文件系统 #mkfs.vfat /dev/sdb1 最后再mount上就成了,或者把U盘拨了再插上,系统可能会自动mount上,就可以用U盘了

2012-03-29 · 1 min · 10 words · -

linux下制作dos启动U盘

linux下制作dos启动U盘 下载镜像文件win98usb.tar http://ubuntuforums.org/showthread.php?p=5459421#post5459421 查看U盘挂载点 df -h sudo dd if=win98usb.img of=/dev/sdb conv=notrunc unzip the package win98boot.zip mount the usb disk Copy the bootable ISO BIOS files to the USB stick sudo cp -r xxx xxx 编辑config.sys device=himem.sys /testmem:off himem.sys后面的/testmem:off的作用是HIMEM.SYS载入时不会慢慢检查内存

2012-03-29 · 1 min · 38 words · -

java5

java5 可变参数, 变长参数 在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是 Java 的一个语法糖,本质上还是基于数组的实现: public class Varargs { public static void test(String... args) { for(String arg : args) { System.out.println(arg); } } public static void main(String[] args) { test();//0个参数 test("a");//1个参数 test("a","b");//多个参数 test(new String[] {"a", "b", "c"});//直接传递数组 } }

2012-03-28 · 1 min · 43 words · -

ts

ts 一个 调用 有道词典 在命令行里翻译单词的 linux shell 脚本 author: Hex Lee lihe757@gmail.com 1.添加此脚本到~/.bashrc的末尾 2.source ~/.bashrc ts hello 你好 #youdao ts(){ curl -s "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=dict.top" -d "type=AUTO& i=$1&doctype=json&xmlVersion=1.4&keyfrom=fanyi.web&ue=UTF-8&typoResult=true&flag=false" | sed -E -n 's/.\*tgt":"([^"]+)".\*entries":["","([^"]+)".*/1n 2/p'; return 0; } #sed -E -n 's/.\*tgt":"([^"]+)".*/1/p' ; #sed -E -n 's/.\*tgt":"([^"]+)".\*entries":["","([^"]+)".*/1n 2/p';

2012-03-27 · 1 min · 45 words · -

DBCP

DBCP DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包: common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。 class JdbcUtil { private static BasicDataSource bds; static { if(bds==null) { bds= new BasicDatasource(); } //分别设置数据库的连接参数 bds.setDriverClass bds.url bds.user bds.root } public staitc Connection getConnection() { return bds.getConnection(); } 在spring中配置dbcp: beans.xml: <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> jdbc.properties: //放在classpath下 ...

2012-03-27 · 1 min · 76 words · -

JDBC

JDBC JDBC 是阻塞的、同步的 jdbc (java database connection) 就是java数据库链接的api,是java标准类库的扩展,用它可以应用sql访问数据库,完成对数据库的查找,更新。 与其它数据库编程环境相比,jdbc有java语言的特性,使用jdbc开发的程序可以跨平台运行,而且不受数据库供应商的限制。 为什么不受数据库供应商的限制呢? 就在于jdbc的设计。 一、sun公司为sql访问数据库提供一套"纯"java api; 二、同时提供一个驱动管理器,以允许第三方驱动程序可以链接到特定的数据库,这样数据库供应商就可以提供自己的驱动程序,并插入到驱动管理器中,关键是所有的驱动程序都必须满足驱动管理器api提出的要求。 三、需要一套简单的机制,以使得第三方驱动程序可以向驱动管理器注册。 jdbc的典型用法 在传统的客户服务器模式中, 通常在服务器端配置数据库,jdbc驱动程序部署在客户。发展到后来的三层 , 甚至更高层的应用模式时,客户端不直接调用数据库,而是调用服务器上的中间层,再由中间层完成数据库查询操作。这种三层模式的优点是: 它将可视化表示 (位于客户端) 从业务逻辑 (中间件层) 和原始数据 (位于数据库) 中分离出来。因此,我们就可以从不同的客户端,如java应用,applet或web表单,访问相通的数据库和相通的业务规则。 客户端和中间层之间的通信可以通过http (web浏览器用作客户端时) ,rmi (当使用应用或applet) 或其他机制来完成。jdbc负责在中间层和后台数据库之间进行通讯。 JDBC (Java Data Base Connectivity,java数据库连接) 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言"编写一次,处处运行"的优势。 Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。 Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。 JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的网页,而该 applet 使用的信息可能来自远程数据库。企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中 (即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统) 。随着越来越多的程序员开始使用Java 编程语言,对从 Java 中便捷地访问数据库的要求也在日益增加。 ...

2012-03-27 · 7 min · 1411 words · -