博客统计信息

用户名:ljh0242
文章数:443
评论数:68
访问量:381435
无忧币:813
博客积分:2405
博客等级:6
注册日期:2006-11-11

我最近发表的评论

博客意见反馈处 回复
你好,我在第七期的时候,文章发表..
ThreadLocal的设.. 回复
不好意思,这个来自网上,没有测试..
jsp专题申明 回复
呵呵,一起学习,共同提高
oracle结构 回复
不错,支持下
spring框架简介 回复
.net我倒不清楚,java开发中struts..

最新评论

背景音乐

我的音乐

00:00 | 00:00

2012-03-31 16:36:25
js
类别:js|阅读(58)|回复(0)|(0)阅读全文>>
2012-03-31 16:25:42
一、什么是闭包?

“官方”的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

相信很少有人能直接看懂这句话,因为他描述的太学术。其实这句话通俗的来说就是:JavaScript中所有的function都是一个闭包。不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的“闭包”。看下面这段代码:



function a() {

    var i = 0;

    function b() {

        alert(++i);

    }

    return b;

}

var c = a();

c();

这段代码有两个特点:



函数b嵌套在函数a内部;

函数a返回函数b。



这样在执行完var c=a()后,变量c实际上是指向了函数b,b中用到了变量i,再执行c()后就会弹出一个窗口显示i的值(第一次为1)。这段代码其实就创建了一个闭包,为什么?因为函数a外的变量c引用了函数a内的函数b,就是说:





当函数a的内部函数b被函数a外的一个变量引用的时候,就创建了一个我们通常所谓的“闭包&..
类别:js|阅读(2)|回复(0)|(0)阅读全文>>
2012-03-09 09:01:36
二话不说,先上代码




Java代码  


public class TestRecursion{   
    //递归方法   
    public static  void fun(int i){   
        if(i > 0){   
            i--;   
            fun(i);   
            System.out.print(i);   
        }   
        System.out.print(" ok ");   
    }   
    public static void main(String args[]){   
  ..
服务器端业务接口

 


public interface Biz extends Remote {
 
public String aloha() throws RemoteException;
 
}




 
服务器端业务实现


public class BizImpl extends UnicastRemoteObject implements Biz {
private static final long serialVersionUID = -8559392326593037120L;
 
public BizImpl() throws RemoteException {
super();
}
 
@Override
public String aloha() throws RemoteException {
return "Aloha Baby.";
}
}




服务器注册远程实现名称

 


public class Server {
public Server() {
try {
Biz bis = new BizImpl();
// style-1
Registry registry = LocateRegistry.createRegistry(RMIParameter.PORT);
registry.rebind(RMIParameter.NAME, bis); // replace existing binding name
// style-2
//java.rmi.Naming.rebind(RMIParameter.NAME, bis); // replace existing binding name
} catch (Exception e) {
e.printStackTrace();
}
}
 
public static void main(String args[]) {
new Server();
}
}




 

styl..
2011-05-27 09:38:13
传输层安全访问是通过身份验证和加密传输的过程。JDK的JSSE提供了传输层安全访问的实现。本文旨在通过一个完整的TLS通讯实例,辨析一个普遍的误导。


网络上停留在理论的简单实例通常存在一个误导。在双向信任的情况下,双方都需要信任对方的证书。这样的例子很多,普遍拷贝并简述过程。

其实,在实践中发现,双方都信任一个权威的CA,并持有该CA根证书和该CA签发的证书,即可以信任对方,实现通讯,不需要对方证书。这样做的好处是,连接方发生变动后,如果新的接入方也是CA签发认证的,即可认为可信。还有一个好处是,减少一个文件的部署(如果该通讯被重用在其他项目,或许这不是小事)。



〇 Scenario

ICM和UCGW是双向信任的两方,通过TLS通讯。CA是内部公信签证机构。



一 Certificate

签证流程:

 









0.CA自签证书作为其他设备的根证书

1.ICM和UCGW(两方流程一致,以下简称ICM)自签证书

2.向CA发送签发请求

这一步可以是发送一个CSR将公钥信息传递给CA

本例是将证书直接发给CA

3.CA为请求者签发证书

4.CA发送根证书和CA签发的证书给请求者

5.ICM将CA根证书导入信任列表

6.ICM将CA签发的证书替换自己签发的证书



实现代码:

 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
0.CA自签证书作为其他设备的根证书
CertInfo certInfo = new CertInfo();

SelfSign selfs = new SelfSign();

certInfo.setKeystore(CA_KEYSTORE);

certInfo.setAlias(CA_ALIAS);

certInfo.setCommonName("mars_ca");

selfs.sign(certInfo, CA_CER);


keytool -genkey -dname "CN=mars_ca, OU=rv, O=rcd, L=ZB, ST=bj, C=China" -alias root -keyalg RSA -keystore ca--ca.keystore -keypass 111111 -storepass 111111 -validity 60

keytool -export -alias root -keystore ca--ca.keystore -storepass 111111 -rfc -file ca--ca.cer

Certificate stored in file <ca--ca.cer>



keytool -list -keystore ca--ca.keystore -storepass 111111



Keystore type: JKS

Keystore provider: SUN



Your keystore contains 1 entry



root, May 24, 2011, PrivateKeyEntry,

Certificate fingerprint (MD5): 24:48:A3:4D:9F:EE:39:DE:8C:E7:51:60:7E:94:7A:76




 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
1.ICM和UCGW(两方流程一致,以下简称ICM)自签证书
// CertInfo certInfo = new CertInfo();

// SelfSign selfs = new SelfSign();



certInfo.setKeystore(ICM_KEYSTORE);

certInfo.setAlias(ICM_ALIAS);

certInfo.setCommonName("mars_icm");

selfs.sign(certInfo, ICM_CER);



// SelfSign selfs = new SelfSign();

// CertInfo certInfo = new CertInfo();


certInfo.setKeystore(UCGW_KEYSTORE);

certInfo.setAlias(UCGW_ALIAS);

certInfo.setCommonName("mars_UCGW");

selfs.sign(certInfo, UCGW_CER);


keytool -genkey -dname "CN=mars_icm, OU=rv, O=rcd, L=ZB, ST=bj, C=China" -alias icm -keyalg RSA -keystore iview.keystore -keypass 111111 -storepass 111111 -validity 60

keytool -export -alias icm -keystore iview.keystore -storepass 111111 -rfc -file icm--icm.cer

Certificate stored in file <icm--icm.cer>



keytool -genkey -dname "CN=mars_UCGW, OU=rv, O=rcd, L=ZB, ST=bj, C=China" -alias ucgw -keyalg RSA -keystore ucgw.keystore -keypass 111111 -storepass 111111 -validity 60

keytool -export -alias ucgw -keystore ucgw.keystore -storepass 111111 -rfc -file ucgw--ucgw.cer

Certificate stored in file <ucgw--ucgw.cer>



keytool -export -alias ca_signed -keystore ca--ca_sign.keystore -storepass 111111 -rfc -file ca--icm.signed.cer

Certificate stored in file <ca--icm.signed.cer>



keytool -export -alias ca_signed -keystore ca--ca_sign.keystore -storepass 111111 -rfc -file ca--ucgw.signed.cer

Certificate stored in file <ca--ucgw.signed.cer>




 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->keytool -list -keystore iview.keystore -storepass 111111



Keystore type: JKS

Keystore provider: SUN



Your keystore contains 1 entry



icm, May 24, 2011, PrivateKeyEntry,

Certificate fingerprint (MD5): 78:5C:AA:1B:27:9D:FB:3E:BE:1A:BD:6E:C5:A5:25:BD



keytool -list -keystore ucgw.keystore -storepass 111111



Keystore type: JKS

Keystore provider: SUN



Your keystore contains 1 entry



ucgw, May 24, 2011, PrivateKeyEntry,

Certificate fingerprint (MD5): 7B:88:44:27:88:66:2D:6B:64:E3:D5:34:4A:03:DA:8F


 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
2.向CA发送签发请求

3.CA为请求者签发证书
CASign cas = new CASign();

cas.sign(ICM_CER, ICM_SIGN_CER, CASIGN_KEYSTORE);

cas.sign(UCGW_CER, UCGW_SIGN_CER, CASIGN_KEYSTORE);


 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->

5.ICM将CA根证书导入信任列表

6.ICM将CA签发的证书替换自己签发的证书
CertImport im = new CertImport();
im.importCA(ICM_KEYSTORE);

im.importSign(ICM_ALIAS, ICM_SIGN_CER, ICM_KEYSTORE);



im.importCA(UCGW_KEYSTORE);

im.importSign(UCGW_ALIAS, UCGW_SIGN_CER, UCGW_KEYSTORE);



keytool -importcert -noprompt -alias root -file ca--ca.cer -keystore iview.keystore -storepass 111111

Certificate was added to keystore



keytool -importcert -noprompt -trustcacerts -alias icm -file ca--icm.signed.cer -keystore iview.keystore -storepass 111111 -keypass 111111

Certificate reply was installed in keystore



keytool -importcert -noprompt -alias root -file ca--ca.cer -keystore ucgw.keystore -storepass 111111

Certificate was added to keystore



keytool -importcert -noprompt -trustcacerts -alias ucgw -file ca--ucgw.signed.cer -keystore ucgw.keystore -storepass 111111 -keypass 111111

Certificate reply was installed in keystore



 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->keytool -list -keystore iview.keystore -storepass 111111



Keystore type: JKS

Keystore provider: SUN



Your keystore contains 2 entries



root, May 24, 2011, trustedCertEntry,

Certificate fingerprint (MD5): 24:48:A3:4D:9F:EE:39:DE:8C:E7:51:60:7E:94:7A:76

icm, May 24, 2011, PrivateKeyEntry, 

Certificate fingerprint (MD5): 18:D9:40:BD:65:6C:4D:B9:F3:87:2B:09:63:CD:F0:7A



keytool -list -keystore ucgw.keystore -storepass 111111



Keystore type: JKS

Keystore provider: SUN



Your keystore contains 2 entries



root, May 24, 2011, trustedCertEntry,

Certificate fingerprint (MD5): 24:48:A3:4D:9F:EE:39:DE:8C:E7:51:60:7E:94:7A:76

ucgw, May 24, 2011, PrivateKeyEntry, 

Certificate fingerprint (MD5): 2A:3D:3F:A6:E3:2F:36:B9:71:CD:AB:1D:9F:19:8A:49


二 TLS

这里以ICM作为服务器端,UCGW作为客户端。

方式一:加载keystore到环境变量,启用默认工厂SSL-Server-Socket-Factory

 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->public class SSLServer {

    public static void main(String args[]) throws Exception {

        System.setProperty("javax.net.ssl.keyStore", TLSParameter.ICM_KEYSTORE);

        System.setProperty("javax.net.ssl.keyStorePassword", TLSParameter.S_KEY_PASS);

        

        SSLServerSocketFactory ssf = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault();

        ServerSocket ss = ssf.createServerSocket(TLSParameter.SSLPORT);

        System.out.println("SSL Server is started.");

        while (true) {

            Socket s = ss.accept();

            PrintStream out = new PrintStream(s.getOutputStream());

            out.println("ICM say Hello to UCGW!");

            out.close();

            s.close();

        }

    }

}


 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->public class SSLClient {



    public static void main(String args[]) throws Exception {

        System.setProperty("javax.net.ssl.trustStore", TLSParameter.UCGW_KEYSTORE);

        SSLSocketFactory ssf = (SSLSocketFactory) SSLSocketFactory.getDefault();

        Socket s = ssf.createSocket(TLSParameter.IP, TLSParameter.SSLPORT);

        BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));

        String x = in.readLine();

        System.out.println(x);

        in.close();

    }

}


方式二:设置SSLContext,通过上下文实例启用SSL-Server-Socket-Factory

 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->public class SSLServer1 {

    public static void main(String args[]) throws Exception {

        SSLContext sslContext = SSLContext.getInstance(PROTOCOL);

        KeyManager[] km = TLSSocket.createKeyManagers(keyStoreType, ICM_KEYSTORE);

        TrustManager[] tm = TLSSocket.createTrustManagers(keyStoreType, ICM_KEYSTORE);

        SecureRandom random = SecureRandom.getInstance(SHA1PRNG);

        sslContext.init(km, tm, random);

        

        SSLServerSocketFactory factory = sslContext.getServerSocketFactory();        

        ServerSocket ss = (SSLServerSocket) factory.createServerSocket(SSLPORT);

        System.out.println("SSL Server is started.");

        while (true) {

            Socket s = ss.accept();

            PrintStream out = new PrintStream(s.getOutputStream());

            out.println("ICM say Hello to UCGW!");

            out.close();

            s.close();

        }

    }

}


 


Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->public class SSLClient1 {



    public static void main(String args[]) throws Exception {

        SSLContext sslContext = SSLContext.getInstance(PROTOCOL);

        KeyManager[] km = TLSSocket.createKeyManagers(keyStoreType, UCGW_KEYSTORE);

        TrustManager[] tm = TLSSocket.createTrustManagers(keyStoreType, UCGW_KEYSTORE);

        SecureRandom random = SecureRandom.getInstance(SHA1PRNG);

        sslContext.init(km, tm, random);

        SSLSocketFactory factory = sslContext.getSocketFactory();



        System.out.println("TLS Client, Connecting to server " + IP + ": " + SSLPORT);

        SSLSocket socket = (SSLSocket) factory.createSocket(IP, SSLPORT);

        socket.setUseClientMode(true);



        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        String x = in.readLine();

        System.out.println(x);

        in.close();

    }

}

 


三 Summary

ICM和UCGW共同信任CA,各自持有CA根证书和CA签发的自身证书,通过TLS协议实现传输层的安全通讯。

双向信任的两方无需持有对方证书。



四 EasterEgg

运行结果:

服务器端:

 
SSL Server is started.
client端:

ICM say Hello to UCGW!


网络包分析(工具:Wireshark)



1.抓取本地通信:route add 192.168.225.166 mask 255.255.255.255 192.168.225.254 metric 1

 
 

Connection-specific DNS Suffix  . :

IP Address. . . . . . . . . . . . : 192.168.225.166

Subnet Mask . . . . . . . . . . . : 255.255.255.0

IP Address. . . . . . . . . . . . : fe80::225:64ff:feb3:88dc%4

Default Gateway . . . . . . . . . : 192.168.225.254


2.设置过滤器

Filter:

ip.addr==192.168.225.166



Decode As:

transport = SSL



Filter:

ip.addr==192.168.225.166&&ssl


3.结果和分析




测试完毕 请删除本地IP:(reference: http://hi.baidu.com/btb368/blog/item/098d36acfbc837014b36d6cd.html)


route delete 192.168.225.166


Export File:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->No.     Time        Source                Destination           Protocol Info

    217 12.022322   192.168.225.166       192.168.225.166       SSLv2    Client Hello

Transmission Control Protocol, Src Port: prp (2091), Dst Port: 9527 (9527), Seq: 1, Ack: 1, Len: 103

Secure Socket Layer

    SSLv2 Record Layer: Client Hello



No.     Time        Source                Destination           Protocol Info

    219 12.024335   192.168.225.166       192.168.225.166       TLSv1    Server Hello, Certificate, Server Hello Done

Transmission Control Protocol, Src Port: 9527 (9527), Dst Port: prp (2091), Seq: 1, Ack: 104, Len: 1210

Secure Socket Layer

    TLSv1 Record Layer: Handshake Protocol: Multiple Handshake Messages



No.     Time        Source                Destination           Protocol Info

    221 12.036842   192.168.225.166       192.168.225.166       TLSv1    Client Key Exchange

Transmission Control Protocol, Src Port: prp (2091), Dst Port: 9527 (9527), Seq: 104, Ack: 1211, Len: 139

Secure Socket Layer

    TLSv1 Record Layer: Handshake Protocol: Client Key Exchange

 

No.     Time        Source                Destination           Protocol Info

    225 12.161312   192.168.225.166       192.168.225.166       TLSv1    Change Cipher Spec, Encrypted Handshake Message

Transmission Control Protocol, Src Port: prp (2091), Dst Port: 9527 (9527), Seq: 243, Ack: 1211, Len: 43

Secure Socket Layer

    TLSv1 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec

    TLSv1 Record Layer: Handshake Protocol: Encrypted Handshake Message



No.     Time        Source                Destination           Protocol Info

    227 12.165380   192.168.225.166       192.168.225.166       TLSv1    Change Cipher Spec

Transmission Control Protocol, Src Port: 9527 (9527), Dst Port: prp (2091), Seq: 1211, Ack: 286, Len: 6

Secure Socket Layer

    TLSv1 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec



No.     Time        Source                Destination           Protocol Info

    229 12.165965   192.168.225.166       192.168.225.166       TLSv1    Encrypted Handshake Message, Application Data, Application Data, Encrypted Alert

Transmission Control Protocol, Src Port: 9527 (9527), Dst Port: prp (2091), Seq: 1217, Ack: 286, Len: 126

Secure Socket Layer

    TLSv1 Record Layer: Handshake Protocol: Encrypted Handshake Message

    TLSv1 Record Layer: Application Data Protocol: Application Data

    TLSv1 Record Layer: Application Data Protocol: Application Data

    TLSv1 Record Layer: Encrypted Alert



No.     Time        Source                Destination           Protocol Info

    233 12.166930   192.168.225.166       192.168.225.166       TLSv1    Encrypted Alert

Transmission Control Protocol, Src Port: prp (2091), Dst Port: 9527 (9527), Seq: 286, Ack: 1344, Len: 23

Secure Socket Layer

    TLSv1 Record Layer: Encrypted Alert


[/img]..
2011-05-27 09:36:45

工作中经常遇到java编码问题,由于缺乏研究,总是无法给出确切的答案,这个周末在网上查了一些资料,在此做些汇总。
    问题一:在java中读取文件时应该采用什么编码?
Java读取文件的方式总体可以分为两类:按字节读取和按字符读取。按字节读取就是采用InputStream.read()方法来读取字节,然后保存到一个byte[]数组中,最后经常用new String(byte[]);把字节数组转换成String。在最后一步隐藏了一个编码的细节,new String(byte[]);会使用操作系统默认的字符集来解码字节数组,中文操作系统就是GBK。而我们从输入流里读取的字节很可能就不是GBK编码的,因为从输入流里读取的字节编码取决于被读取的文件自身的编码。举个例子:我们在D:盘新建一个名为demo.txt的文件,写入”我们。”,并保存。此时demo.txt编码是ANSI,中文操作系统下就是GBK。此时我们用输入字节流读取该文件所得到的字节就是使用GBK方式编码的字节。那么我们最终new String(byte[]);时采用平台默认的GBK来编码成String也是没有问题的(字节编码和默认解码一致)。试想一下,如果在保存demo.txt文件时,我们选择UTF-8编码,那么该文件的编码就不在是ANSI了,而变成了UTF-8。仍..
本文是根据网上关于ubuntu安装笔记在debian squeeze下实际验证可行,放此作为备份。
原文地址:http://xycode.org/?p=50
平台: GNU/LINUX debian/ubuntu发行版
需下载的软件

       openjdk-6-jdk

       openjkd-6-lib

       Android SDK
eclipse
debian/ubuntu安装jdk命令


sudo apt-get install openjdk-6-jdk


该命令会把 jdk jre lib 都安装。
然后到网站下载Android SDK吧
http://dl.google.com/android/android-sdk_r07-linux_x86.tgz
(http://androidappdocs.appspot.com/sdk/index.html)
下载Android SDK的压缩包。
然后解压到你想要的位置。
先把Android SDK的路径添加到环境变量里面
以下命令



sudo vim /etc/profile


把SDK的tools文件夹 和 platform-tools 文件夹的路径添加到最后一行

例如



export PATH="$PATH:/home/test/Android-SDK/android-sdk-linux_x86/tools"

export PATH="$PATH:/home/test/Android-SDK/android-sdk-linux_x86/platform-tools"


/home/test/Android-SDK/android-sdk-linux_x86 是我放置的路径,按..
类别:android|阅读(562)|回复(0)|(0)阅读全文>>
dd
类别:struts|阅读(216)|回复(0)|(0)阅读全文>>
2011-03-24 09:44:54
s
2011-02-28 10:10:57
java
之前做过一个从Oracle导出到Excel的批处理,简单点说就是通过Sqlplus将表数据Spool到一个文本文件中或简化的Excel格式文档中,而这里我要做的事恰好相反,工具则是使用sqlldr, sqlldr的用法没有研究太多,这里主要用写写如何使用批处理来调用实现导入的自动化过程。
主要工作涉及到以下几块:
1. 将Excel转换成csv格式的文件,这里要借助工具xls2csv.exe实现excel到csv的转换;

xls2csv的用法: xls2csv excelfile.xls gbk
以上命令执行后,程序会将excel文件中的每一张sheet都生成一个csv文件,并以excel文件的名字_sheet名字.csv命名

2. 使用Sqlldr将数据导入Oracle,

Sqlldr的用法:sqlldr user/pass@tnsname control=example.ctl data=data.csv
以上命令执行后,sqlldr会将data.txt数据文件中数据按照control指定的规则插入到数据库中,具体的插入规则和表名都在control文件中指定。
Control文件写法:
load data

infile 'data.csv'

append

into table t_tab_data

fields terminated by ';' optionally enclosed by '"'

(

filed1,

filed2,

filed3

)
以上语法文件中指定了从文件data.csv中导数据,导入到表t_tab_data..
类别:oracle|阅读(408)|回复(0)|(0)阅读全文>>
2010-12-11 11:23:25
,项目中需要将sqlserver数据导出成txt,然后再将数据导入到oracle中,我用到了sqlldr方法,还不错哦
 
1.创建测试表

-- Create table

create table TEST

(

  HEAD_ID     NUMBER(6) not null,

  HEAD        VARCHAR2(20) not null,

  AREA_CODE   VARCHAR2(9) not null,

  HEAD_LENGTH NUMBER(2),

  COMMENTS    VARCHAR2(60)

);

2.创建测试文件,文件名为result.txt,文件内容如下

1,021,021,3,上海

2,025,025,3,南京

3,0410,410,4,铁岭

4,0512,512,4,苏州

5,139159,025,7,南京

6,123456789,025,9,test
3.创建ctl文件,文件名为result.ctl,内容如下:

Load data infile 'result.txt'

Append into table test

(

 head_id char(6) terminated by ',',

  head char(20) terminated by ',',

  area_code char(9) terminated by ',',

  head_length char(2) terminated by ',',

  comments char(60) terminated by ','

)
4.创建批处理文件,文件名为..
bcp是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。bcp可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。下面将详细讨论如何利用bcp导入导出数据。 

1. bcp的主要参数介绍 



bcp共有四个动作可以选择。 



(1) 导入。 



这个动作使用in命令完成,后面跟需要导入的文件名。 



(2) 导出。 



这个动作使用out命令完成,后面跟需要导出的文件名。 



(3) 使用SQL语句导出。 



这个动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。 



(4) 导出格式文件。 



这个动作使用format命令完成,后而跟格式文件名。 



下面介绍一些常用的选项: 



-f format_file 



format_file表示格式文件名。这个选项依赖于上述的动作,如果使用的是in或out,format_file表示已经存在的格式文件,如果使用的是form..
 
假设我们要在ORACLE里同时能访问SQL Server里默认的pubs和Northwind两个数据库。



1、在安装了ORACLE9i Standard Edition或者ORACLE9i Enterprise Edition的windows机器上(IP:192.168.0.2),

   产品要选了透明网关(Oracle Transparent Gateway)里要访问Microsoft SQL Server数据库.



$ORACLE9I_HOME\tg4msql\admin下新写initpubs.ora和initnorthwind.ora配置文件
initpubs.ora内容如下:
HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;DATABASE=pubs"

HS_DB_NAME=pubs

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER



initnorthwind.ora内容如下:
HS_FDS_CONNECT_INFO="SERVER=sqlserver_hostname;DATABASE=Northwind"

HS_DB_NAME=Northwind

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER




(蓝色字的部分可以根据具体要访问的SQL Server数据库的情况而修改)



$ORACLE9I_HOME\network\admin 下listener.ora内容如下:
LISTENER =

  (DESCRIPTION_LIST =

   ..
2010-12-08 10:01:30
近期公司准备开发一个计费项目,数据库当然还是选用我最信赖的Oracle了。由于一部分基础数据在一台Win2000 Server的SQL Server 7.0数据库中,需要考虑灵活、可靠的方法实现从Or 

acle数据库端访问SQL Server中的数据。于是我有机会真正体验Oracle 9I 中的新增强功能“异构服务”(Heterogeneous Services)并为此痛苦了近两天。
先简单介绍一下Oracle异构服务。它是包含在Oracle数据库中的一个模块,通过使用透明网关(Transparent Gateway)或通用连接(Generic Connectivity)来访问其它非Oracle系统的数据。异构服务的主要结构如下:
各模块简要说明如下:
异构服务模块:属于Oracle数据库的内核部分,负责大部分异构连接的处理;
代理通用代码:对所有基于异构服务产品的通用代码;
驱动:是与非Oracle系统直接交互的模块,实现从异构服务API到特定非Oracle系统API的映射。
代理:是Oracle Server连接非Oracle系统的进程,包括两部分即代理通用代码和针对特定非Oracle系统的驱动。代理的位置可以与非Oracle系统在同一台机器上,或与Oracle Server在同一台机器上,或者单独在一台机器上。我这次实践的环境采用的是最后一种。..
相信作为ORACLE数据库的开发人员没有少碰到“ORA-12154: TNS: 无法解析指定的连接标识符”,今天我也又碰到了类似的情况,将我的解决方法进行小结,希望能对碰到同样问题的友人们提供帮助。
问题场景描述:
服务器端版本:oracle 10.2.0.10
客户端版本:oracle 10.2.0.10
客户端开发工具:PL/SQL Developer
通过客户端来连接服务器,其主要文件就是通过客户端的tnsnames.ora来配置,在原文件的基础上增加:
SID别名 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = SERVER_IP)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SID = SID_NAME)

    )

  )
例:
dev_db =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.10.5)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SID = ora10)

 &n..
类别:oracle|阅读(2619)|回复(0)|(4)阅读全文>>
目前主要提到了三种办法,一种在程序中调用DTS,二种使用SQL SERVER带的BCP功能,三种使用openrowset。

具体看下面:

这是利用BCP来做的,


使用SQLServer自带的bcp命令——

bcp 数据库名.dbo.表名 out 文件名 –c –q –S”服务器名” –U”用户名” –P”密码”
bcp ”select 语句” queryout 文件名 –c –q –S”服务器名” –U”用户名” –P”密码”


导出整张表:

EXEC master..xp_cmdshell 'bcp "inter_custom.dbo.out_ck1" out c:\Temp.xls -c -q -S"PETER" -U"sa" -P"davey@citiz.net"'



根据Query语句导出:

EXEC master..xp_cmdshell 'bcp "select * from inter_custom.dbo.out_ck1" queryout c:\Temp.xls -c -q -S"PETER" -U"sa" -P"davey@citiz.net"'

利用bcp要求数据库的服务器名,数据库用户名和密码,这些必须传到程序中。方法可以有很多中,大概的例子,可以看:

http://www.cnblogs.com/kevin/archiv..
2010-11-19 16:54:26
要扩展或修改继承的方法、属性、索引器或事件的抽象实现或虚实现,必须使用 override 修饰符。
在此例中,类 Square 必须提供 Area 的重写实现,因为 Area 是从抽象的 ShapesClass 继承而来的。



复制




abstract class ShapesClass
{
abstract public int Area();
}

class Square : ShapesClass
{
int x, y;
// Because ShapesClass.Area is abstract, failing to override
// the Area method would result in a compilation error.
public override int Area()
{
return x * y;
}
}





有关 override 关键字用法的更多信息,请参见使用 Override 和 New 关键字进行版本控制以及了解何时使用 Override 和 New 关键字。

备注




override 方法提供从基类继承的成员的新实现。通过 override 声明重写的方法称为重写基方法。重写的基方法必须与 override 方法具有相同的签名。有关继承的信息,请参见继承。
不能重写非虚方法或静态方法。重写的基方法必须是 virtual、abstract 或 override 的。
override 声明不能更改 virtual 方法的可访问性。override 方法和 virtual 方法必须具有..
类别:.net|阅读(5)|回复(0)|(0)阅读全文>>
 <<   1   2   3   4   5   >>   页数 ( 1/23 )

公告

本博客系志远工作室创始人倾力打造,主要是积累自己日常开发中所遇到的技术问题,及相关知识总结,参考了网上许多资料无任何商业目的,权作个人学习和网友参考之用。如有问题可以与志远工作室联系,志远工作室主要业务范围:网站制作,软件开发,网络项目,系统集成,电子设备销售,欢迎各位加入志远工作室,志远工作室联系QQ:274787260