struts和hibernate整合的一种方式(hibernate作为struts插件)
把hibernate用到的包全部放进web应用程序的lib里面,然后定义hibernate.cfg.XML,也就是插件的配置信息,如下
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd"><hibernate-configuration> <session-factory> <property name="show_sql">false</property> <property name="use_outer_join">true</property> <property name="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password"></property> <property name="hibernate.connection.pool.size">20</property> <property name="session_factory_name">hibernate/session_factory</property> <!-- Mapping files --> <mapping resource="/homepage/Artical.hbm.xml"/>
</session-factory></hibernate-configuration>信息很清楚的,就是配置数据库等信息,我们利用jndi来查找SessionFactory,下面是插件程序,HibernatePlugIn.Java
import org.apache.struts.action.PlugIn;import org.apache.struts.action.ActionServlet;import org.apache.struts.config.ModuleConfig;import javax.servlet.ServletException;import javax.servlet.ServletContext;import net.sf.hibernate.SessionFactory;import net.sf.hibernate.cfg.Configuration;public class HibernatePlugIn implements PlugIn { public void destroy() { } public void init(ActionServlet servlet, ModuleConfig config) throws ServletException { try { ServletContext context = servlet.getServletContext(); SessionFactory sf = new Configuration().configure().buildSessionFactory(); context.setAttribute("net.sf.hibernate.SessionFactory",sf); } catch (Exception ex) { ex.printStackTrace(); } }}相应的,要在struts-config.xml配置插件信息,大概如下,注意路径
<plug-in className="homepage.HibernatePlugIn"> <set-property property="configFilePath" value="/WEB-INF/classes/hibernate.cfg.xml" /> <set-property property="storeInServletContext" value="true" /> </plug-in>
以后就可以利用java.naming.Context,java.naming.InitiaContext来查找
Context ct = new InitialContext(); sessions=(SessionFactory) ct.lookup("hibernate/session_factory"); session=sessions.openSession();
当然,还有另外两种整合方式,我认为这种方法更为灵活,也比较容易掌握
使用Ajax时的十个常犯的错误
1、 不要通过把整个页面都放在UpdatePanel中更新整个页面。在你运行网页时需要节省时间,不要更新那些可以用JavaScript and DHTML (DOM)的部分。
2、 要始终记得有这么几种访问者,他们不能用JavaScript或者用的版本比较老的浏览器或者他们对JavaScript支持不好,比如说移动设备。如果这些都不支持,你的访问者能看到什么?
3、 在客户端浏览器缓存相同的请求或者在we服务器端执行缓存。最好的例子是自动完成个下拉菜单,他们的填充在任何时刻都是相同的,一个有错误写法的自动完成的写法可以减慢你的Web服务器(数据库服务器),因为那样会有比起以前用IsPostBack更多地请求。想一下不停的按F5刷新你的网页的情形。如果你有层叠的下拉菜单你就会结算更多地请求。
4、 在你运用CSS或JavaScript时,不要运行,并发的或者运行很长时间的Ajax请求,一般的浏览器只能有两个并发的http连接(我知道可以给变这个,但是默认的还是设为两个)。如果在读取图片的时候由很多Ajax请求的话,速度会变得很慢。
5、 什么时候都用异步调用的方法发送XMLHttpRequest.。如果你要用同步的方法也是没有请问题的,你的浏览器不会因为网络问题或是连接速度慢而冻结的
6、 试着让你的web应用使用一个很慢的网络连接,再尝试用快的TCP/IP连接
7、 你的web应用是作为桌面程序的替代品?你注意观察过一般浏览器在运行你的Web应用一小时,两小时或者几天时内存的使用。不是所有人都有你那样好的机器。
8、 检查在你返回XMLHttpRequest时你的http请求状态代码(status code),那会有一些常见的网络错误像是不可获得的DNS,Http Server error 500 ,你曾经检查过状态代码(status code),它可以告诉你浏览器在一个为连接的模式
9、 试着禁止XMLHttpRequest object!用IE7你能用native object代替ActiveX object,但是你也可以禁止native object。
10、检查你AJAX requests的安全性!你简单的打开了你的数据访问层吗?充分运用FormsAuthentication和PrincipalPermissions。是不是任何人都可以建立一个请求(不只是点击一个链接)?
提高PHP编程效率的53个要点
用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。
1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。
2、$row[’id’] 的速度是$row[id]的7倍。
3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。
4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。
5、注销那些不用的变量尤其是大数组,以便释放内存。
6、尽量避免使用__get,__set,__autoload。
7、require_once()代价昂贵。
8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。
9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。
10、函数代替正则表达式完成相同功能。
11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。
12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。
13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。
14、用@屏蔽错误消息的做法非常低效,极其低效。
15、打开apache的mod_deflate模块,可以提高网页的浏览速度。
16、数据库连接当使用完毕时应关掉,不要用长连接。
17、错误消息代价昂贵。
18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。
19、递增一个全局变量要比递增一个局部变量慢2倍。
20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。
21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。
22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。
23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。
24、派生类中的方法运行起来要快于在基类中定义的同样的方法。
25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。
26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。
27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。
28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。
29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。
(举例如下)
if (strlen($foo) < 5) { echo “Foo is too short”$$ }
(与下面的技巧做比较)
if (!isset($foo{5})) { echo “Foo is too short”$$ }
调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。
34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。
35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。
36、并非要用类实现所有的数据结构,数组也很有用。
37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?
38、当你需要时,你总能把代码分解成方法。
39、尽量采用大量的PHP内置函数。
40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。
41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。
42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。
43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题;
44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的;
45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过);
46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!);
47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?);
48、多维数组尽量不要循环嵌套赋值;
49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式;
50、foreach效率更高,尽量用foreach代替while和for循环;
51、用单引号替代双引号引用字符串;
52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”;
53、对global变量,应该用完就unset()掉;
Dreamweaver CS5 新增功能与改进
Adobe Dreamweaver CS5 软件使设计人员和开发人员能充满自信地构建基于标准的网站。由于同新的 Adobe CS Live 在线服务 Adobe BrowserLab 集成,用户可以使用 Adobe Dreamweaver CS5的CSS 检查工具进行设计,并使用内容管理系统进行开发并实现快速、精确的浏览器兼容性测试。
下面我们一起看看Adobe Dreamweaver CS5 软件带来哪些新特性和功能。
新增功能如下:
集成 CMS 支持 新增功能
尽享对 WordPress、Joomla! 和 Drupal 等内容管理系统框架的创作和测试支持。
CSS 检查 新增功能
以可视方式显示详细的 CSS 框模型,轻松切换 CSS 属性并且无需读取代码或使用其他实用程序。
与 Adobe BrowserLab** 集成 新增功能
使用多个查看、诊断和比较工具预览动态网页和本地内容。
PHP 自定义类代码提示 新增功能
为自定义 PHP 函数显示适当的语法,帮助您更准确地编写代码。
站点特定的代码提示 新增功能
从 Dreamweaver 中的非标准文件和目录代码提示中受益。
与 Business Catalyst 集成 新增功能
利用 Dreamweaver 与 Adobe Business Catalyst? 服务(单独提供)之间的集成,无需编程即可实现卓越的在线业务。
增强功能如下:
CSS Starter页 增强功能
借助更新和简化的 CSS Starter 布局,快速启动基于标准的网站设计。
Subversion 支持 增强功能
借助增强的 Subversion 软件支持,提高协作、版本控制的环境中的站点文件管理效率。
简单的站点建立 增强功能
以前所未有的速度快速建立网站,分阶段或联网站点甚至还可以使用多台服务器。
保持跨媒体一致性
将任何本机 Adobe Photoshop? 或 Illustrator? 文件插入 Dreamweaver 即可创建图像智能对象。更改源图像,然后快速、轻松地更新图像。
资料来源:学网(www.xue5.com),原文地址:http://www.xue5.com/itedu/201005/419302.html
为什么博客网站利于优化排名
博客网站利于关键词排名,这是众多SEOER的一致看法,为什么博客站利于排名呢?博客网站有利于网站优化排名,主要是因为博客站较多的建成技术类网站、博客网站与搜索引擎的亲合性较好、博客网站的功能强大、博客网站执行速度快,下面子南从这几个方面细细分析一下,大家就会对博客站有一个更加深刻的认识,
1、博客站执行速度超快,使得博客站利于排名。
博客程序,不管是主流的PHP程序wordpress还是ASP程序Z-BLOG 1.8,都可以全站生成静态代码,大家都知道,静态HTML代码无需在服务器端执行,浏览者浏览网站时,仅仅只是把文件用服务器下载到本地浏览器即可,而不管是PHP还是ASP代码,在服务器上都有一个运算执行时间,然后再下载到本地浏览器,较费时间,如果主机功能不强,就会非常慢,但博客生成静态后,要求的基本就只是主机的接入速度,博客站超快的速度决定了博客中内容能超快被收录并且放出排名,速度是影响网站优化排名最主要的因素,所以博客站得于排名。
2、博客类网站多建成技术内容介绍网站是利于排名的又一因素。
通常来说,技术类网站的浏览停留时间较长,较长的用户停留和较多的回头用户,也是影响网站相关关键词排名的因素。
3、博客站的功能强大,利于优化。
博客程序通常扩展性较好,完全的开源,使得各种插件遍地开花,这使得网站优化相当容易,这也是博客网站有利于优化排名的又一因素。
4、博客程序与搜索引擎的亲合性较好,所以有利于网站排名。
博客程序有较好的程序结构和精简的代码,使得网站程序与搜索引擎的亲合性相当好,一个较好的博客程序,建成站后,通常很快就可以达到即时收录,而对于一般的CMS站,可能需要更长的时间。与搜索引擎良好的亲合性,也是博客站利于网站优化排名的一大原因。
综合上述因素,可以看到,做关键词排名,最好的方式是建成建客程序,然后对内容进行不断的优化更新,博客网站利于排名,远不止以上这些原因,子南在这里只是抛砖引玉,希望看官能有更多的好看法,一定记得要告诉子南。
请保留链接:http://www.jinkou580.com/
Java5.0的元注解
许多API都需要为数不少的“模板式”的代码,比如,如果想写一个JAX-RPC(JAX-RPC即Java API for XML-Based RPC-译注)的web service,你需要提供一对接口及其实现程序。如果程序本身能被表明哪些方法可以由远程访问的注释所“修饰”的话,那么这种“模板式”的代码就可以用工具自动生成。
另一些API需要在维护程序的同时维护一些“辅助”文件,比如,维护JavaBean的同时需要维护BeanInfo类,Enterprise JavaBeans (EJB) 则需要部署说明档(deployment descriptor)。如果这些辅助信息能在程序中作为注解来维护,就会方便地多,并且也不容易犯错。
Java平台已经提供了几种不同的注解机制。比如transient修饰符就是一种特别的注解,标明被修饰的字段在序列化的子系统应该被忽略,@deprecated 作为javadoc的特殊标签,标明该方法不应该再用。在5.0版本中,Java平台提供了一种一般性的注解(即元数据metadata)机制,允许你自定义注解类型和使用该类型。该机制包含注解的定义语法、声明语法、读取注解的API、注解的代理类文件以及注解的一个处理工具。
注解并不直接对程序语义产生影响,但是会对工具或库在处理程序的方式上时产生影响,进而影响程序在运行时的语义。注解可以从源文件或类文件中读取,甚至在运行时以反射方式读取。
注解是对javadoc标签的补充。一般而言,如果标注的目的是影响或产生文档,那么就该用javadoc标签,否则就用注解。典型的应用程序的程序员永远不必自己定义一个注解类型,但其实真要做也不难。注解类型的定义跟接口定义相似,只是需要在inteface关键字前面加一个at符(@),声明一个方法即为注解类型定义一个元素。方法声明时不允许有参数或throw语句,返回值类型被限定为原始数据类型、字符串String、Class、枚举enums、注解类型,或前面这些的数组,方法可以有默认值,下面是一个定义注解类型的例子:
/**
* Describes the Request-For-Enhancement(RFE) that led
* to the presence of the annotated API element.
*/
public @interface RequestForEnhancement {
int id();
String synopsis();
String engineer() default "[unassigned]";
String date(); default "[unimplemented]";
}一旦完成定义,就可以使用它做注解声明。注解是一个特殊的修饰符,可以和其他修饰符一样(如public,static,final)用在各种地方。为方便计,注解一般放在最前面。注解修饰符由@符号、注解类型名和括号括起来的元素名/值对组成。下面这个例子声明一个方法使用了上面所定义的注解。
@RequestForEnhancement(
id = 2868724,
synopsis = "Enable time-travel",
engineer = "Mr. Peabody",
date = "4/1/3007"
)
public static void travelThroughTime(Date destination) { ... }
注解类型如果不含任何元素,被称为“标记”注解类型,如:
/**
* Indicates that the specification of the annotated API element
* is preliminary and subject to change.
*/
public @interface Preliminary { }
“标记”注解类型允许忽略括号,如下:
@Preliminary public class TimeTravel { ... }
如果注解只有一个元素,那么该元素应该被命名为value,如下:
/**
* Associates a copyright notice with the annotated API element.
*/
public @interface Copyright {
String value();
}
如果注解只有一个元素,并且元素名为value,那么元素名和等号(=)都可以忽略不写,如下:
@Copyright("2002 Yoyodyne Propulsion Systems")
public class OscillationOverthruster { ... }
我们将建一个简单的基于注解的测试框架,将前面所讲的合起来用。首先我们定义一个“标记”注解类型,来说明某个方法是一个测试方法,需要被测试工具执行:
import java.lang.annotation.*;
/**
* Indicates that the annotated method is a test method.
* This annotation should be used only on parameterless static methods.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Test { }
注意这个注解本身也是被注解的。这些注解被称为“元注解” (meta-annotations). 第一个(@Retention(RetentionPolicy.RUNTIME)) 表示注解由虚拟机保留,可以在运行时通过反射读取;第二个(@Target(ElementType.METHOD)) 表示注解只能用在方法上。
下面是一个例子程序,其中的一些方法由上面所定义的注解来修饰:
public class Foo {
@Test public static void m1() { }
public static void m2() { }
@Test public static void m3() {
throw new RuntimeException("Boom");
}
public static void m4() { }
@Test public static void m5() { }
public static void m6() { }
@Test public static void m7() {
throw new RuntimeException("Crash");
}
public static void m8() { }
}
下面是测试工具程序:
import java.lang.reflect.*;
public class RunTests {
public static void main(String[] args) throws Exception {
int passed = 0, failed = 0;
for (Method m : Class.forName(args[0]).getMethods()) {
if (m.isAnnotationPresent(Test.class)) {
try {
m.invoke(null);
passed++;
} catch (Throwable ex) {
System.out.printf("Test %s failed: %s %n", m, ex.getCause());
failed++;
}
}
}
System.out.printf("Passed: %d, Failed %d%n", passed, failed);
}
}
这个工具程序将一个类名作为命令行运行时的参数,然后遍历该类的所有方法,并尝试调用每一个被“Test”注解(就是上面所定义的)所修饰的方法。那行绿色的代码以反射调用方式查找方法是否被“Test”注解所修饰。如果调用测试方法时抛出异常,就认为测试失败,测试失败的信息就会打印出来。最后作为总结,测试失败的方法个数和测试成功的方法个数也会打印出来。下面是对Foo程序(就是上面那个)运行测试工具得到的结果:
$ java RunTests Foo
Test public static void Foo.m3() failed: java.lang.RuntimeException: Boom
Test public static void Foo.m7() failed: java.lang.RuntimeException: Crash
Passed: 2, Failed 2
这个测试工具无疑是个玩具程序,但它表明了注解的强大,并能很容易的扩展为一个有用的工具。
SQL Server 2008 新特性
SQL Server 2008不仅对原有性能进行了改进,还添加了许多新特性,比如新添了数据集成功能,改进了分析服务,报告服务,以及Office集成等等。
SQL Server集成服务
SSIS(SQL Server集成服务)是一个嵌入式应用程序,用于开发和执行ETL(解压缩、转换和加载)包。SSIS代替了SQL 2000的DTS。整合服务功能既包含了实现简单的导入导出包所必需的Wizard导向插件、工具以及任务,也有非常复杂的数据清理功能。SQL Server 2008 SSIS的功能有很大的改进和增强,比如它的执行程序能够更好地并行执行。在SSIS 2005,数据管道不能跨越两个处理器。而SSIS 2008能够在多处理器机器上跨越两个处理器 。而且它在处理大件包上面的性能得到了提高。SSIS引擎更加稳定,锁死率更低。
Lookup功能也得到了改进。Lookup是SSIS一个常用的获取相关信息的功能。比如从CustomerID查找Customer Name,获取数据集。Lookup在SSIS中很常见,而且可以处理上百万行的数据集,因此性能可能很差。SQL 2008对Lookup的性能作出很大的改进,而且能够处理不同的数据源,包括 ADO.NET,XML,OLEDB和其他SSIS压缩包。
SQL 2008可以执行TSQL的MERGE命令。用MERGE命令,只需一个语句就可以对行进行 UPDATE、INSERT或 DELETE。下面的例子就是如何用MERGE命令来把新的Inventory Item descriptions 列表插入已有的Inventory Master中。除了 descriptions, NewInventory表格中还加入了其他一些部分。如果没有MERGE语句,就需要执行两个命令才能完成。第一个命令查找匹配的Description然后更新。第二个命令查找不匹配项然后插入。有了MERGE,一个语句就可以完成这两个任务。步骤如下:
以下是引用片段:
MERGE InventoryMaster AS im
USING (SELECT InventoryID, Descr FROM NewInventory) AS src
ON im. InventoryID = src. InventoryID
WHEN MATCHED THEN
UPDATE SET im.Descr = src.Descr
WHEN NOT MATCHED THEN
INSERT (InventoryID, Descr) VALUES (src. InventoryID, src.Descr);
分析服务
SSAS(SQL Server分析服务)也得到了很大的改进和增强。IB堆叠做出了改进,性能得到很大提高,而硬件商品能够为Scale out管理工具所使用。Block Computation也增强了立体分析的性能。
报表服务
SSRS(SQL Server 报表服务)的处理能力和性能得到改进,使得大型报表不再耗费所有可用内存。另外,在报表的设计和完成之间有了更好的一致性。 SQL SSRS 2008还包含了跨越表格和矩阵的TABLIX。 Application Embedding 允许用户点击报表中的 URL链接调用应用程序。
Microsoft Office 2007
SQL Server 2008能够与 Microsoft Office 2007完美地结合。例如,SQL Server Reporting Server能够直接把报表导出成为Word文档。而且使用 Report Authoring工具,Word和Excel都可以作为SSRS报表的模板。Excel SSAS新添了一个数据挖掘插件,提高了其性能。
资料来源:学网(www.xue5.com),原文地址:http://www.xue5.com/itedu/200803/159333.html
SQL Server连接DB2
不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现与其它数据库的互联。
不同数据库平台的互连一般称之为数据库的异构服务,现在各大数据库之间都可以实现这样的异构互连,只是各厂商的具体实现技术不一样,如:在SQL SERVER里面叫做LINKED SERVER,通过ODBC实现与其它数据库的互联。
本文的测试环境为:
操作系统: WINDOWS2000 SERVER (繁体系统)
安装数据库: SQLSERVER2000(英文版)和DB2 7.2客户端(英文版)
具体实现步骤:
1.要求pc机上安装DB2客户端软件和sqlserver2000软件。
2.配置windows的ODBC数据源:
开始菜单—》程式集—》系统管理工具—》资料数据源(ODBC)—》进入配置用户DSN或者系统DSN均可以:添加—》选择IBM DB2 ODBC DRIVER—》自定义数据源名称(随意如: DB2TEST)—》数据库名称(必选!)—》OK完成。
3. 选择刚才配置的数据源名称, 再选择 配置, 跳出DB2 MESSAGES:
The data source is not connected. Connecting to the data source will provide useful information during configuration. Would you like to connect to the data source?
选择YES(OK或确认)即可
进入CONNECT TO DB2 DATABASE画面:
USER ID: 输入DB2 DATABASE的用户
PASSWORD: 输入DB2 DATABASE的用户的密码
CONNECTION MODE: 可以选择默认的SHARE模式
选择OK(确认)即可!
配置和测试ODBC完成!
4.配置sqlserver2000中的连接服务器:
企业管理器—》安全性—》DB2连接服务器—》右键新建连接服务器—》定义连接名称; 选其他数据源; 指定程序名称为:IBM OLE DB Provider for DB2 SERVERS; 产品名称可不填; 数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式填写:
User ID=username;Password=userpasswd(或者按如下格式:UID=username;PWD=userpasswd),这里的用户名和密码对应所要连接的DB2数据库中的用户名和密码 —》 安全性标签页里:设置用此安全上下文进行,并录入DB2的数据库用户名和密码—》服务器选项标签页可默认—》确定。
5.准备工作全部完成!在sqlserver企业管理器—》安全性—》DB2连接服务器打开刚建好的连接服务器—》点击表,即可在右边窗口看到该DB2数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!访问表时,使用格式为: [连接服务器名]..[DB2用户].[表名]。更详细具体的使用这里不再赘述。
资料来源:学网(www.xue5.com),原文地址:http://www.xue5.com/itedu/201008/435630.html
10款基于PHP免费的CMS
在国内,大部分来说,CMS基本就等同于垃圾站。其实选择哪个程序并不重要,重要的是选择一个自己容易上手的,然后着重去回收垃圾。
1. Joomla!
Joomla!的前身是Mambo的开源码计划,
2. Drupal
直逼Joomla!的开源CMS,不过貌似用户群还是没有Joomla!多。
3. Mambo
企业类CMS网站可以选择,个人还是用Joomla好了。
4. DEDECMS
这算国内最知名、使用人数最多的CMS了吧。无数垃圾站就是由它制造出来的,当然,它也制造出了很多优秀的站长。
5. phpcms
没太用过,按BBon的说法,据传被酷6收购。如果真是这样,那完全可以不要选择了。
6. 帝国CMS
个人没用过这个。不过在国内也算比较知名的了,同样是垃圾站的一个不错选择。
7. php168
这个也没用过。
8. HBcms
这个更没用过。
9. SupeSite
从理论上来说,这是一个最佳的选择,比DEDECMS还值得选,毕竟康盛拥有一系列站长需要的源程序,以后的新增、整合、转换起来都比较方便。
10. wordPress
谈到CMS,wordpress是唯一一款身为博客软件却总能列入CMS建站行列的程序。没办法,它的使用者太多了,它也确实够强大。
Oracle连接串方式
Oracle连接串方式,Oracle连接串方式如何实现?Oracle连接串方式怎样做?看看下面怎么做到的吧。
1.Connecting via TNS
"Data Source=NEWDB;User ID=SYSTEM;Password=admin";
2.Connecting Without TNSNames.ora
"Data Source = " +
"(DESCRIPTION = " +
" (ADDRESS_LIST = " +
" (ADDRESS = (PROTOCOL = TCP)" +
" (HOST = 127.0.0.1) " +
" (PORT = 1521) " +
" )" +
" )" +
" (CONNECT_DATA = " +
" (SERVICE_NAME = NEWDB)" +
" )" +
");" +
"User Id=SYSTEM;" +
"password=admin;"
3. Connecting via EZConnect
"Data Source=EDZEHOO-PC:1521/NEWDB;
User ID=SYSTEM;Password=admin";
4. Connecting with Connection Pooling Activated
OracleConnection conn = new OracleConnection();
conn.ConnectionString = "Data Source=NEWDB;
User ID=SYSTEM;
Password=admin;
Min Pool Size=10;
Max Pool Size=100;
Connection Lifetime=120;
Connection Timeout=60;
Incr Pool Size=3;
Decr Pool Size=1;"
5. Dynamically Building an ODP.NET Connection String
private string BuildConnectionString(string TNSName, string UserID, string
Password)
{
OracleConnectionStringBuilder _conn = new OracleConnectionStringBuilder();
{
_conn.DataSource = TNSName;
_conn.DecrPoolSize = 5;
_conn.IncrPoolSize = 10;
_conn.Pooling = true;
_conn.MaxPoolSize = 100;
_conn.MinPoolSize = 5;
_conn.ConnectionLifeTime = 120
_conn.ConnectionTimeout = 60
_conn.UserID = UserID;
_conn.Password = Password;
}
return _conn.ConnectionString;
}
- 默认分类(20)
- J2EE(25)
- Java(56)
- PHP(55)
- SEO(10)
- 网页设计(20)
- 网站建设(37)
- 数据库(7)
- JavaScript(17)
- JQuery(6)
- MySQL(20)
- SQL Server(6)
- Access(1)
- Oracle(6)
- office(6)
- Dreamweaver(4)
- Photoshop(12)
- Flash(9)
- Fireworks(13)
- CSS(14)
- HTML(4)
- .NET(7)
- ASP(2)
- DB2(1)
- Ajax(2)
- Linux(12)
- Struts(7)
- Hibernate(8)
- Spring(2)
- Jsp(22)
- Asp(8)
- C#(3)
- C++(1)
- 网络安全(5)
- 软件工程(7)
- XML(1)
- English(2)
- 计算机等级考试(2)
- 计算机病毒(4)
- 个人日志(76)
- 互联网(15)
- ActionScript(10)
- Android(3)
- 数据结构与算法(1)
- 游戏策略(3)
- 美文翻译(2)
- 编程开发(19)
- 计算机应用(4)
- 计算机(10)
- Unity3d(6)
- 其他(1)
- egret(1)