??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲成人一区二区,99久久亚洲精品无码毛片,国产精品亚洲二区在线观看 http://www.tkk7.com/Johncn/zh-cn Sat, 10 May 2025 10:19:05 GMT Sat, 10 May 2025 10:19:05 GMT 60 [Struts] 使用多个资源文g http://www.tkk7.com/Johncn/archive/2006/01/07/27021.htmlZhuJun ZhuJun Sat, 07 Jan 2006 12:46:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/07/27021.html http://www.tkk7.com/Johncn/comments/27021.html http://www.tkk7.com/Johncn/archive/2006/01/07/27021.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/27021.html http://www.tkk7.com/Johncn/services/trackbacks/27021.html 目中实现多语言国际化都是通过使用<bean:message>标签和资源文?但是如果把所有的面说明都加入一个资源文件中,通常的后果是q个文g会越来越?而且开发中不同的h加入的格式也不一?到最后很可能是谁也不知道到底资源文g中有些什么内?如果有新的开发h员加入的?很可能只好再自己需要用C么再l箋加进文g.最后维护这L文g变成很痛苦的事情. 所以想要用多个资源文?q样可以Ҏ不同的划分规?功能,位置,词?不同的内容攑օ不同的文?方便l护. 具体的做?1.创徏属性文件ƈ且在struts-config.xml中ؓ每一个文件声明一个message-resources元素?/STRONG>
< message-resources parameter ="com.oreilly.strutsckbk.MessageResources" /> < message-resources parameter ="com.oreilly.strutsckbk.LabelResources" key="labels" > </ message-resources > < message-resources parameter ="com.oreilly.strutsckbk.HeaderResources" key="headers" > </ message-resources > 注意 :q里多了一个属?STRONG>key ,q就是用来在面标签中区分不同的资源文g?标签默认是用没有说?STRONG>key值的那个资源文g.2.使用<bean:message>标签:
< bean:message bundle ="labels" key ="label.url" /> 注意:q里?STRONG>bundle属性就是用来指明上面提到的key 属性的,以表明这?lt;bean:message>标签是要使用哪个资源文g. 说明:只能在struts1.1以上版本使用多个资源文g,struts1.0不支?lt;message-resource>属?所以不能实C面的用法. ]]> [Tomcat] 修改Tomcat端口?/title> http://www.tkk7.com/Johncn/archive/2006/01/02/26406.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:42:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26406.html http://www.tkk7.com/Johncn/comments/26406.html http://www.tkk7.com/Johncn/archive/2006/01/02/26406.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26406.html http://www.tkk7.com/Johncn/services/trackbacks/26406.html
安装了Oracle?启动Tomcat时出现错?
Error starting endpoint java.net.BindException: Address already in use: JVM_Bind:8080
原来Oracle的Servlet Engine也用了8080端口.那就来修改Tomcat的端?
首相扑ֈTomcat 5.0\conf\server.xml 文g,然后扑ֈ下面的代?
port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />
修改 port="8080" Z惌的端口就可以?
]]> [TagLib] JSP自定义标{֟ http://www.tkk7.com/Johncn/archive/2006/01/02/26405.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:37:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26405.html http://www.tkk7.com/Johncn/comments/26405.html http://www.tkk7.com/Johncn/archive/2006/01/02/26405.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26405.html http://www.tkk7.com/Johncn/services/trackbacks/26405.html 自定义标{至要实现一个接?java.servlet.jsp.tagext.Tag ,我们通常是?FONT color=#0000cc>javax.servlet.jsp.tagext.TagSupport 来实?/FONT>.
自定义标{调用q程如下:
]]>[JDBC] 常用JDBCq接字符?/title> http://www.tkk7.com/Johncn/archive/2006/01/02/26404.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:35:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26404.html http://www.tkk7.com/Johncn/comments/26404.html http://www.tkk7.com/Johncn/archive/2006/01/02/26404.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26404.html http://www.tkk7.com/Johncn/services/trackbacks/26404.html 1. MySQL
Class.forName( " org.gjt.mm.mysql.Driver " ); cn = DriverManager.getConnection( " jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName " , sUsr, sPwd ); 2. Microsoft SQLServer
Class.forName( " com.microsoft.jdbc.sqlserver.SQLServerDriver " ); cn = DriverManager.getConnection( " jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master " , sUsr, sPwd ); 3. Oracle
Class.forName( " oracle.jdbc.driver.OracleDriver " ); cn = DriverManager.getConnection( " jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL " , sUsr, sPwd ); 4.DB2
Class.forName( " com.ibm.db2.jdbc.net.DB2Driver " ); String url = " jdbc:db2://192.9.200.108:6789/SAMPLE " cn = DriverManager.getConnection( url, sUsr, sPwd );
5. ODBC
Class.forName( " sun.jdbc.odbc.JdbcOdbcDriver " ); Connection cn = DriverManager.getConnection( " jdbc:odbc: " + sDsn, sUsr, sPwd );
6. PostgreSQL
Class.forName( " org.postgresql.Driver " ); cn = DriverManager.getConnection( " jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName " , sUsr, sPwd ); ]]> [JDBC] DatabaseMetaDate接口 http://www.tkk7.com/Johncn/archive/2006/01/02/26402.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:30:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26402.html http://www.tkk7.com/Johncn/comments/26402.html http://www.tkk7.com/Johncn/archive/2006/01/02/26402.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26402.html http://www.tkk7.com/Johncn/services/trackbacks/26402.html DatabaseMetaData 接口作ؓ整体提供有关数据库的l合信息?
从连Connection取得 DatabaseMetaData :
DatabaseMetaData dbmd = con.getMetaData();
DatabaseMetaData 有以下常用方?:
getDriverName() :取得驱动E序?/FONT>
getDatabaseProductName() :取得数据库名(?MySql,Sql Server{?
getSQLKeywords() :取得SQL中的关键?/FONT>
getMaxConnections() : q发讉K的用户个?/SPAN>
getNumericFunctions() : 数据库的所有数学函数的列表
getStringFunctions() : 数据库的所有字W串函数的列?/SPAN>
getSystemFunctions() : 数据库的所有系l函数的列表
getTimeDateFunctions() : 数据库的所有日期时间函数的列表
getTypeInfo() : 数据cd信息
rs = dbmd.getTypeInfo(); while (rs.next()) { System.out.print( " 数据cd名: " + rs.getString( 1 )); System.out.print( " 数据cdQ?/SPAN>" + rs.getString( 2 )); System.out.print( " _ֺQ?/SPAN>" + rs.getString( 3 )); System.out.println( " 基数Q?/SPAN>" + rs.getString( 18 )); }
getURL() : 数据库的url
getUserName() : 数据库的用户
getTables () :取得数据表信?/SPAN>
String [ ] t = { " TABLE " , " VIEW " } ; rs = dbmd.getTables( null , " HR " , " % " , t); while (rs.next()) { System.out.print( " 目录名: " + rs.getString( 1 )); System.out.print( " 模式名: " + rs.getString( 2 )); System.out.print( " 表名Q?/SPAN>" + rs.getString( 3 )); System.out.print( " 表的cdQ?/SPAN>" + rs.getString( 4 )); System.out.println( " 注释Q?/SPAN>" + rs.getString( 5 )); }
getPrimaryKeys() :取得主键信息
rs = dbmd.getPrimaryKeys( null , " HR " , " EMPLOYEES " ); while (rs.next()) { System.out.print( " 目录名: " + rs.getString( 1 )); System.out.print( " 模式名: " + rs.getString( 2 )); System.out.print( " 表名Q?/SPAN>" + rs.getString( 3 )); System.out.print( " 列名序P " + rs.getString( 4 )); System.out.print( " 列名序P " + rs.getString( 5 )); System.out.println( " 主键名: " + rs.getString( 6 )); }
getTableTypes() : 取得表的cd
rs = dbmd.getTableTypes(); System.out.println( " 表的cd有: " ); while (rs.next()) System.out.print( " " + rs.getString( 1 )); System.out.println();
getColumns() : 列信?/SPAN>
rs = dbmd.getColumns( null , " HR " , " EMPLOYEES " , " % " ); while (rs.next()) { System.out.print( " 表名 " + rs.getString( 3 ) + " " ); System.out.print( " 列名 " + rs.getString( 4 ) + " " ); System.out.print( " 数据cd " + rs.getString( 5 ) + " " ); System.out.print( " 本地cd?/SPAN>" + rs.getString( 6 ) + " " ); System.out.print( " 列的大小 " + rs.getString( 7 ) + " " ); System.out.print( " 数位数 " + rs.getString( 9 ) + " " ); System.out.print( " 数据基数 " + rs.getString( 10 ) + " " ); System.out.print( " 是否可空 " + rs.getString( 11 ) + " " ); System.out.println( " 索引?/SPAN>" + rs.getString( 17 ) + " " ); }
getIndexInfo() : 索引信息
rs = dbmd.getIndexInfo( null , " HR " , " EMPLOYEES " , false , false ); while (rs.next()) { System.out.print( " 表名 " + rs.getString( 3 ) + " " ); System.out.print( " 索引?/SPAN>" + rs.getString( 6 ) + " " ); System.out.print( " 索引cd " + rs.getString( 7 ) + " " ); System.out.print( " 索引列名 " + rs.getString( 9 ) + " " ); System.out.println( " 索引序 " + rs.getString( 10 ) + " " ); } ]]> [Velocity] Velocity 参考资?/title> http://www.tkk7.com/Johncn/archive/2006/01/02/26400.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:25:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26400.html http://www.tkk7.com/Johncn/comments/26400.html http://www.tkk7.com/Johncn/archive/2006/01/02/26400.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26400.html http://www.tkk7.com/Johncn/services/trackbacks/26400.html 阅读全文 ]]> [Eclipse] 在Eclipse中安装Visual Editor插g http://www.tkk7.com/Johncn/archive/2006/01/02/26398.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:22:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26398.html http://www.tkk7.com/Johncn/comments/26398.html http://www.tkk7.com/Johncn/archive/2006/01/02/26398.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26398.html http://www.tkk7.com/Johncn/services/trackbacks/26398.html 在Eclipse中进行GUI开发需要安装Visual Editor插g: 1.Install Omondo UML(包括了VE插g所需要的EMF,GEF,q包括UML2插g):
2.Install Visual Editor插g:
?/FONT>http://www.eclipse.org/vep/ 下蝲VE-runtime-1.0.2.1.zip;
VE -runtime-1.0.2.1.zip解压到c:\eclipse-plugins(可以是Q何目??在Eclipse的安装\径下的links 目录中徏立一个link文g,比如gui.ve.link,文g内容?nbsp; path=c:/eclipse-plugins/VE-runtime- 1.0.2.1, 卌个link文g要对应一个刚解压后的插g目录?注意:此目录中应包含eclipse/(features|plugins)l构);
启动eclipse卛_,安装完成;
3.后期讄:
点击 Window 菜单Q选择 Customize Perspective?/SPAN>
Submenus 栏目下选择 New
Shortcut Categories 下选择 Java
Shortcuts 中在 Visual Class 前划?/SPAN>
Submenus 栏目下选择 Show View
Shortcut Categories 下选择 Basic
Shortcuts 中在 Palette 前划?/SPAN>
通过菜单调出Palette Q?/SPAN>Window | Show View | Palette
?SPAN lang=EN-US>Menu 打开Properties ViewQ?SPAN lang=EN-US style="COLOR: blue">Windows | Show View | Basic | Properties
好了,现在new->Visual Class可以进行GUI的开发了.
]]>[Velocity] Velocity中遇到的一个问?/title> http://www.tkk7.com/Johncn/archive/2006/01/02/26394.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:18:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26394.html http://www.tkk7.com/Johncn/comments/26394.html http://www.tkk7.com/Johncn/archive/2006/01/02/26394.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26394.html http://www.tkk7.com/Johncn/services/trackbacks/26394.html 在模板中老是讉K不到对象的属?最后发现原来是应ؓ模板中访问的对象不是一个Publicc?Class改ؓPublic 后一切OK.后来分析可能是因问权限的问题,当Class未加Public?是包内可讉K(friendly),而模板如果与对象的Class不在同一包中时自然访问不? ]]> [Hibernate] 为Hibernate提供JDBCq接 http://www.tkk7.com/Johncn/archive/2006/01/02/26392.htmlZhuJun ZhuJun Mon, 02 Jan 2006 15:15:00 GMT http://www.tkk7.com/Johncn/archive/2006/01/02/26392.html http://www.tkk7.com/Johncn/comments/26392.html http://www.tkk7.com/Johncn/archive/2006/01/02/26392.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/26392.html http://www.tkk7.com/Johncn/services/trackbacks/26392.html 可以通过3钟方式ؓHibernate提供JDBCq接:
1.直接提供JDBCq接对象Connection:
Class.forName( " com.mysql.jdbc.Driver " ); String url = " jdbc:mysql://localhost:3306/HibernateTest?user=root&password= " ; java.sql.Connection conn = DriverManager.getConnection(url); SessionFactory sessionFactory = cfg.buildSessionFactory(); Session session = sessionFactory.openSession(conn);
2.通过属性文?/SPAN>hibernate.properties 配置 JDBC 来源:
hibernate.show_sql = true hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect hibernate.connection.driver_class = com.mysql.jdbc.Driver hibernate.connection.url = jdbc:mysql: // localhost/HibernateTest hibernate.connection.username = root hibernate.connection.password =
3.?SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; LETTER-SPACING: 0.75pt; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 12.0pt">q?/SPAN>XML 文g hibernate.cfg.xml q行配置 :
<? xml version='1.0' encoding='big5' ?> <! DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd" > < hibernate-configuration > < session-factory > <!-- 昄实际操作数据库时的SQL --> < property name ="show_sql" > true </ property > <!-- SQL方言Q这边设定的是MySQL --> < property name ="dialect" > net.sf.hibernate.dialect.MySQLDialect </ property > <!-- JDBC驱动E序 --> < property name ="connection.driver_class" > com.mysql.jdbc.Driver </ property > <!-- JDBC URL --> < property name ="connection.url" > jdbc:mysql://localhost/HibernateTest </ property > <!-- 数据库用?nbsp; --> < property name ="connection.username" > caterpillar </ property > <!-- 数据库密?nbsp; --> < property name ="connection.password" > 123456 </ property > <!-- 对象与数据库表格映像文g --> < mapping resource ="User.hbm.xml" /> </ session-factory > </ hibernate-configuration > ]]>[发掘Jakarta Commons] 使用StringUtilc?/title> http://www.tkk7.com/Johncn/archive/2005/12/27/25619.htmlZhuJun ZhuJun Tue, 27 Dec 2005 11:35:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/27/25619.html http://www.tkk7.com/Johncn/comments/25619.html http://www.tkk7.com/Johncn/archive/2005/12/27/25619.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/25619.html http://www.tkk7.com/Johncn/services/trackbacks/25619.html org.apache.commons.lang.StringUtils中提供许多有用的字符串操作方法,了解q些ҎQ我们可以避免许多不必要的重复工作。下面介l其中比较有用的几个ҎQ?BR> 查空字符Ԍ
StringUtils.isBlank(String str); StringUtils.isNotBlank(String str);
~写字符Ԍ
String test = " This is a test of the abbreviation. " System.out.println( StringUtils.abbreviate( test, 10 ) ); [Console输出] This is 查找嵌套字符Ԍ
String htmlContent = " <html>\n " + " <head>\n " + " <title>Test Page</title>\n " + " </head>\n " + " <body>\n " + " <p>This is a TEST!</p>\n " + " </body>\n " + " </html> " ; // Extract the title from this XHTML content String title = StringUtils.substringBetween(htmlContent, " <title> " , " </title> " ); System.out.println( " Title: " + title ); [Console输出] Title: Test Page 验证字符Ԍ
String test1 = " ORANGE " ; String test2 = " ICE9 " ; String test3 = " ICE CREAM " ; String test4 = " 820B Judson Avenue " ; boolean t1val = StringUtils.isAlpha( test1 ); // returns true boolean t2val = StringUtils.isAlphanumeric( test2 ); // returns true boolean t3val = StringUtils.isAlphaSpace( test3 ); // returns true boolean t4val = StringUtils.isAlphanumericSpace( test4 ); // returns true 计算字符串出现频率: StringUtils.countMatches()
File manuscriptFile = new File( " manuscript.txt " ); Reader reader = new FileReader( manuscriptFile ); StringWriter stringWriter = new StringWriter( ); while ( reader.ready( ) ) { writer.write( reader.read( ) ); } String manuscript = stringWriter.toString( ); // Convert string to lowercase manuscript = StringUtils.lowerCase(manuscript); // count the occurrences of "futility" int numFutility = StringUtils.countMatches( manuscript, " futility " ); 比较不同字符Ԍ
int dist = StringUtils.getLevenshteinDistance( " Word " , " World " ); String diff = StringUtils.difference( " Word " , " World " ); int index = StringUtils.indexOfDifference( " Word " , " World " ); System.out.println( " Edit Distance: " + dist ); System.out.println( " Difference: " + diff ); System.out.println( " Diff Index: " + index ); [Console输出] Edit Distance: 2 Difference: ld Diff Index: 3
参考资料: 《Jakarta Commons Cookbook?BR> By Timothy M. O'Brien Publisher : O'Reilly Pub Date : November 2004 ISBN : 0 - 596 - 00706 -X Pages : 400 ]]> [Oracle] Oracle中的dual?/title> http://www.tkk7.com/Johncn/archive/2005/12/26/25503.htmlZhuJun ZhuJun Mon, 26 Dec 2005 14:28:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/26/25503.html http://www.tkk7.com/Johncn/comments/25503.html http://www.tkk7.com/Johncn/archive/2005/12/26/25503.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/25503.html http://www.tkk7.com/Johncn/services/trackbacks/25503.html Oracle中的有一个很Ҏ的表:Dual Table.q个表中只含有一行记?q且我们可以用这个表来检许多Oracle的功?比如:
SQL > select 789.65 * 123 from dual; 789.65 * 123 -- -------- 97126.95 SQL> select abs ( - 890.98 ) from dual; ABS ( - 890.98 ) -- ---------- 890.98
更特别的的是dual表中只含有一行记?我们可以通过 desc 函数查看dual表的l构:
SQL > desc dual; 名称 是否为空? cd -- --------------------------------------- -------- ------------------------ DUMMY VARCHAR2 ( 1 )
查询dual表中的数?
SQL > select * from dual ; DU -- X
我们向dual中插入一条记录后再查?看情况会如何:
SQL > select * from dual; DU -- X SQL > insert into dual values ( ' Y ' ); 已创?nbsp; 1 行?BR> SQL > select * from dual; DU -- X SQL > select count ( * ) from dual; COUNT ( * ) -- -------- 2
可见管insert语句插入记录后dual中有两条记录,但只能select出第一条记?
同样我们再试试update和delete语句:
SQL > update dual set dummy = ' Z ' ; 已更?nbsp; 1 行?BR> SQL > select * from dual; DU -- Z SQL > select count ( * ) from dual; COUNT ( * ) -- -------- 2 SQL> delete from dual; 已删?nbsp; 1 行?BR> SQL > select * from dual; DU -- Y SQL > select count ( * ) from dual; COUNT ( * ) -- -------- 1
可见每次操作只能影响到第一条记?管select , update , delete 所针对的范围是整个?.
]]> [Oracle] Oracle exp/imp导出导入工具的?[转] http://www.tkk7.com/Johncn/archive/2005/12/26/25502.htmlZhuJun ZhuJun Mon, 26 Dec 2005 14:19:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/26/25502.html http://www.tkk7.com/Johncn/comments/25502.html http://www.tkk7.com/Johncn/archive/2005/12/26/25502.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/25502.html http://www.tkk7.com/Johncn/services/trackbacks/25502.html 导出工具 exp 1. 它是操作pȝ下一个可执行的文?存放目录/ORACLE_HOME/bin exp导出工具数据库中数据备份压~成一个二q制pȝ文g.可以在不同OS间迁U?BR> 它有三种模式Q?BR>a. 用户模式Q?导出用户所有对象以及对象中的数据; b. 表模式: 导出用户所有表或者指定的表; c. 整个数据库: 导出数据库中所有对象?BR> 2. 导出工具exp交互式命令行方式的用的例子 $exp test/test123@appdb Enter array fetch buffer size: 4096 > 回R Export file: expdat.dmp > m.dmp 生成导出的文件名 (1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 3 Export table data (yes/no): yes > 回R Compress extents (yes/no): yes > 回R Export done in ZHS16GBK character set and ZHS16GBK NCHAR character set About to export specified tables via Conventional Path ... Table(T) or Partition(T ) to be exported: (RETURN to quit) > cmamenu 要导出的表名 . . exporting table CMAMENU 4336 rows exported Table(T) or Partition(T ) to be exported: (RETURN to quit) >要导出的表名n Table(T) or Partition(T ) to be exported: (RETURN to quit) > 回R Export terminated successfully without warnings. 3. 导出工具exp非交互式命o行方式的例子 $exp scott/tiger tables=(emp,dept) file=/directory/scott.dmp grants=y 说明:把scott用户里两个表emp,dept导出到文?directory/scott.dmp $exp scott/tiger tables=emp query="where job='salesman' and sal<1600" file=/directory/scott2.dmp 说明:在exp里面加上导出emp的查询条件job='salesman' and sal<1600 (但我个h很少q样?q是把满x件的记录生成临时表后,再exp会方便一? $exp parfile=username.par file=/directory1/username_1.dmp,/directory1/username_2.dmp filesize=2000M log=/directory2/username_exp.log 参数文gusername.par内容 userid=username/userpassword buffer=8192000 compress=n grants=y 说明:username.par为导出工具exp用的参数文g,里面具体参数可以Ҏ需要去修改 filesize指定生成的二q制备䆾文g的最大字节数 (可用来解x些OS?G物理文g的限制及加快压羃速度和方便刻历史数据光盘{?导入工具 imp 1. 它是操作pȝ下一个可执行的文?存放目录/ORACLE_HOME/bin imp导入工具EXP形成的二q制pȝ文g导入到数据库? 它有三种模式Q?BR>a. 用户模式Q?导出用户所有对象以及对象中的数据; b. 表模式: 导出用户所有表或者指定的表; c. 整个数据库: 导出数据库中所有对象?BR> 只有拥有IMP_FULL_DATABASE和DBA权限的用h能做整个数据库导?BR> imp步骤Q?BR>(1) create table (2) insert data (3) create index (4) create triggers,constraints 2.导入工具imp交互式命令行方式的例?BR>$ imp Import: Release 8.1.6.0.0 - Production on 星期?12?7 17:01:08 2001 (c) Copyright 1999 Oracle Corporation. All rights reserved. 用户? test 口o:**** q接? Oracle8i Enterprise Edition Release 8.1.6.0.0 - bit Production With the Partitioning option JServer Release 8.1.6.0.0 - Production 导入文g: expdat.dmp> /tmp/m.dmp 输入插入~冲区大(最ؓ 8192 ) 30720> l由常规路径导出由EXPORT:V08.01.06创徏的文?BR>警告: 此对象由 TEST 导出, 而不是当前用?BR>已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导?BR>只列出导入文件的内容(yes/no)Qno> ׃对象已存? 忽略创徏错误(yes/no)Qno> yes 导入权限(yes/no)Qyes> 导入表数?yes/no)Qyes> 导入整个导出文g(yes/no)Qno> yes . 正在TEST的对象导入到 SCOTT . . 正在导入?"CMAMENU" 4336行被导入 成功l止导入Q但出现警告? 3.导入工具imp非交互式命o行方式的例子 $ imp system/manager fromuser=jones tables=(accts) $ imp system/manager fromuser=scott tables=(emp,dept) $ imp system/manager fromuser=scott touser=joe tables=emp $ imp scott/tiger file = expdat.dmp full=y $ imp scott/tiger file = /mnt1/t1.dmp show=n buffer=2048000 ignore=n commit=y grants=y full=y log=/oracle_backup/log/imp_scott.log $ imp system/manager parfile=params.dat params.dat 内容 file=dba.dmp show=n ignore=n grants=y fromuser=scott tables=(dept,emp) 4.导入工具imp可能出现的问?BR> (1) 数据库对象已l存?BR>一般情? 导入数据前应该彻底删除目标数据下的表, 序列, 函数/q程,触发器等; 数据库对象已l存? 按缺省的imp参数, 则会导入p| 如果用了参数ignore=y, 会把exp文g内的数据内容导入 如果表有唯一关键字的U束条g, 不合条g不被导?BR>如果表没有唯一关键字的U束条g, 引赯录重?BR> (2) 数据库对象有d键约?BR>不符合主外键U束? 数据会导入失? 解决办法: 先导入主? 再导入依存表 disable目标导入对象的主外键U束, 导入数据? 再enable它们 (3) 权限不够 如果要把A用户的数据导入B用户? A用户需要有imp_full_database权限 (4) 导入大表( 大于80M ) ? 存储分配p| 默认的EXP? compress = Y, 也就是把所有的数据压羃在一个数据块? 导入? 如果不存在连l一个大数据? 则会导入p|. 导出80M以上的大表时, 记得compress= N, 则不会引赯U错? (5) imp和exp使用的字W集不同 如果字符集不? 导入会失? 可以改变unix环境变量或者NT注册表里NLS_LANG相关信息. 导入完成后再改回? (6) imp和exp版本不能往上兼?BR>imp可以成功导入低版本exp生成的文? 不能导入高版本exp生成的文?BR>Ҏ情况我们可以?BR>$ imp username/password@connect_string 说明: connect_string 是在/ORACLE_HOME/network/admin/tnsnames.ora 定义的本地或者远端数据库的名U?BR>注意事项: UNIX: /etc/hosts 要定义本地或者远端数据库服务器的L?BR>win98: windowshosts 和IP地址的对应关p? win2000: winntsystem32driversetchosts ]]>[HibernateW记] lg(Component)映射 http://www.tkk7.com/Johncn/archive/2005/12/22/25115.htmlZhuJun ZhuJun Thu, 22 Dec 2005 10:46:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/22/25115.html http://www.tkk7.com/Johncn/comments/25115.html http://www.tkk7.com/Johncn/archive/2005/12/22/25115.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/25115.html http://www.tkk7.com/Johncn/services/trackbacks/25115.html lg(Component)映射 多用来表C对象的从属关系(l合,聚合 ).比如一个学生可能有姓名,q龄,性别,成W {属?其中成W是另一个对?又有U目,分数 属?q里需要用lg映射来表是之间的关系. Java代码:
// 学生 class Student { private String name; private int age; private String sex; private Grade grade; } // 成W class Grade { private String subject; private float score; }
数据?
-- 学生?/SPAN> create table STUDENT ( ID char ( 32 ) not null , NAME varchar ( 16 ) not null , SEX char ( 1 ), AGE integer , primary key (ID) ); -- 成W?/SPAN> create table GRADE ( ID char ( 32 ) not null , student_id char ( 32 ) not null , SUBJECT varchar ( 10 ), SCORE float , primary key (ID), foreign key (student_id) ); Hibernate映射文g:
<? xml version="1.0" ?> <! DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" > < hibernate-mapping > < class name ="Student" table ="STUDENT" > < id name ="id" type ="string" unsaved-value ="null" > < column name ="ID" sql-type ="char(32)" /> < generator class ="uuid.hex" /> </ id > < property name ="name" type ="string" not-null ="true" > < column name ="NAME" length ="16" not-null ="true" /> </ property > < property name ="sex" type ="char" column ="SEX" /> < property name ="age" type ="int" column ="AGE" /> < component name ="grade" class ="Grade" > < property name ="subject" type ="string" column ="SUBJECT" not-null ="true" /> < property name ="score" type ="float" column ="SCORE" not-null ="true" /> </ component > </ class > </ hibernate-mapping > ]]>ORACLE常用ȝ问题1000问[转] http://www.tkk7.com/Johncn/archive/2005/12/16/24224.htmlZhuJun ZhuJun Fri, 16 Dec 2005 07:23:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/16/24224.html http://www.tkk7.com/Johncn/comments/24224.html http://www.tkk7.com/Johncn/archive/2005/12/16/24224.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/24224.html http://www.tkk7.com/Johncn/services/trackbacks/24224.html 阅读全文 ]]> [发掘Jakarta Commons] 使用LRUMap http://www.tkk7.com/Johncn/archive/2005/12/15/24088.htmlZhuJun ZhuJun Thu, 15 Dec 2005 11:59:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/15/24088.html http://www.tkk7.com/Johncn/comments/24088.html http://www.tkk7.com/Johncn/archive/2005/12/15/24088.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/24088.html http://www.tkk7.com/Johncn/services/trackbacks/24088.html LRUMap(L east R ecently U sed C ache)可用来保存最q用的几条记录,例如:保存Blog中的最q?0条留a.大多数情는作缓??EHCache )的一U策?具体使用Ҏ如下:
import java.util.Map; import org.apache.commons.collections.map.LRUMap; cache = new LRUMap( 5 ); // Populate the cache with 5 stock prices cache.put( " MSFT " , new Float( 0.03 ) ); cache.put( " TSC " , new Float( 0.001 ) ); cache.put( " LU " , new Float( 23.30 ) ); cache.put( " CSCO " , new Float( 242.20 ) ); cache.put( " P " , new Float( 10.23 ) ); // Now use some of the entries in the cache Float cscoPrice = (Float) cache.get( " CSCO " ); Float msPrice = (Float) cache.get( " MSFT " ); Float tscPrice = (Float) cache.get( " TSC " ); Float luPrice = (Float) cache.get( " LU " ); Float pPrice = (Float) cache.get( " P " ); Float msPrice2 = (Float) cache.get( " MSFT " ); // Add another price to the Map, this should kick out the LRU item. cache.put( " AA " , new Float( 203.20 ) ); 此时,~存中的元素? [CSCO] [MSFT] [TSC] [LU] [P] [AA] ׃LRU最q没有被讉K,所以当AA加入?׃过了缓存的最大容?5),所以被剔除了缓?
参考资? << Jakarta Commons Cookbook >> By Timothy M. O ' Brien Publisher : O ' Reilly Pub Date : November 2004 ISBN : 0 - 596 - 00706 - X Pages : 400
]]> SQL Server各种日期计算Ҏ[转] http://www.tkk7.com/Johncn/archive/2005/12/08/22963.htmlZhuJun ZhuJun Thu, 08 Dec 2005 04:40:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/08/22963.html http://www.tkk7.com/Johncn/comments/22963.html http://www.tkk7.com/Johncn/archive/2005/12/08/22963.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/22963.html http://www.tkk7.com/Johncn/services/trackbacks/22963.html ( 原文 )
通常Q你需要获得当前日期和计算一些其他的日期Q例如,你的E序可能需要判断一个月的第一天或者最后一天。你们大部分人大概都知道怎样把日期进行分Ԍq、月、日{)Q然后仅仅用分割出来的年、月、日{放在几个函C计算己所需要的日期Q在q篇?章里Q我告诉你如何使用DATEADD和DATEDIFF函数来计出在你的程序中可能你要用到的一些不同日期? 在用本文中的例子之前,你必L意以下的问题。大部分可能不是所有例子在不同的机器上执行的结果可能不一Pq完全由哪一天是一个星期的W一天这个设|决定。第一天(DATEFIRSTQ设定决定了你的pȝ使用哪一天作Z周的W一天。所有以下的?子都是以星期天作Z周的W一天来建立Q也是W一天设|ؓ7。假如你的第一天设|不一P你可能需要调整这些例子,使它和不同的W一天设|相W合。你可以通过@@DATEFIRST函数来检查第一天设|? Z理解q些例子Q我们先复习一下DATEDIFF和DATEADD函数。DATEDIFF函数计算两个日期之间的小时、天、周、月、年{时间间隔L。DATEADD函数计算一个日期通过l时间间隔加减来获得一个新的日期。要了解更多的DATEDI FF和DATEADD函数以及旉间隔可以阅读微Y联机帮助? 使用DATEDIFF和DATEADD函数来计日期,和本来从当前日期转换C需要的日期的考虑Ҏ有点不同。你必须从时间间隔这个方面来考虑。比如,从当前日期到你要得到的日期之间有多少旉间隔Q或者,从今天到某一天(比如1900-1-1Q之间有多少旉间隔Q等{。理解怎样着g旉间隔有助于你L的理解我的不同的日期计算例子? 一个月的第一?/B> W一个例子,我将告诉你如何从当前日期去这个月的最后一天。请注意Q这个例子以及这文章中的其他例子都只使用DATEDIFF和DATEADD函数来计我们想要的日期。每一个例子都通过计算但前的时间间隔,然后q行加减来得到想要计的日期? q是计算一个月W一天的SQL 脚本Q? SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) 我们把这个语句分开来看看它是如何工作的。最核心的函数是getdate()Q大部分人都知道q个是返回当前的日期和时间的函数。下一个执行的函数DATEDIFF(mm,0,getdate())是计当前日期和?900-01-01 00:00:00.000”这个日期之间的月数。记住:时期和时间变量和毫秒一h从?900-01-01 00:00:00.000”开始计的。这是Z么你可以在DATEDIFF函数中指定第一个时间表辑ּ为?”。下一个函数是DATEADDQ增加当前日期到?900-01-01”的月数。通过增加预定义的日期?900-01-01”和当前日期的月敎ͼ我们可以获得q个月的W一天。另外,计算出来的日期的旉部分会是?0:00:00.000”? q个计算的技巧是先计当前日期到?900-01-01”的旉间隔敎ͼ然后把它加到?900-01-01”上来获得特D的日期Q这个技巧可以用来计很多不同的日期。下一个例子也是用q个技巧从当前日期来生不同的日期?BR>本周的星期一 q里我是用周(wk)的时间间隔来计算哪一天是本周的星期一? SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) 一q的W一?/FONT> 现在用年(yy)的时间间隔来昄q一q的W一天? SELECT DATEADD(yy, DATEDIFF(yy,0,getdate()), 0) 季度的第一?/B> 假如你要计算q个季度的第一天,q个例子告诉你该如何做? SELECT DATEADD(qq, DATEDIFF(qq,0,getdate()), 0) 当天的半?/B> 曄需要通过getdate()函数Zq回旉值截掉时间部分,׃考虑到当前日期是不是在半夜。假如这Pq个例子使用DATEDIFF和DATEADD函数来获得半夜的旉炏V? SELECT DATEADD(dd, DATEDIFF(dd,0,getdate()), 0) 深入DATEDIFF和DATEADD函数计算 你可以明白,通过使用单的DATEDIFF和DATEADD函数计算Q你可以发现很多不同的可能有意义的日期? 目前为止的所有例子只是仅仅计当前的旉和?900-01-01”之间的旉间隔数量Q然后把它加到?900-01-01”的旉间隔上来计算出日期。假定你修改旉间隔的数量,或者用不同的旉间隔来调用DATEADD函数Q或者减L间间隔而不是增加,那么通过q些的调整你可以发现和多不同的日期? q里有四个例子用另外一个DATEADD函数来计最后一天来分别替换DATEADD函数前后两个旉间隔?上个月的最后一?/FONT> q是一个计上个月最后一天的例子。它通过从一个月的最后一天这个例子上减去3毫秒来获得。有一点要CQ在Sql Server中时间是_?毫秒。这是Z么我需要减?毫秒来获得我要的日期和时间? SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(mm,0,getdate()), 0)) 计算出来的日期的旉部分包含了一个Sql Server可以记录的一天的最后时??3:59:59:997?的时间? d的最后一?/FONT> q接上面的例子,Z要得到去q的最后一天,你需要在今年的第一天上减去3毫秒? SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)) 本月的最后一?/B> 现在Qؓ了获得本月的最后一天,我需要稍微修改一下获得上个月的最后一天的语句。修攚w要给用DATEDIFF比较当前日期和?900-01-01”返回的旉间隔上加1。通过?个月Q我计算Z个月的第一天,然后减去3毫秒Q这样就计算Zq个月的最后一天。这是计本月最后一天的SQL脚本? SELECT dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)) 本年的最后一?/B> 你现在应该掌握这个的做法Q这是计本q最后一天脚? SELECT dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0))? 本月的第一个星期一 好了Q现在是最后一个例子。这里我要计这个月的第一个星期一。这是计的脚本? select DATEADD(wk, DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate()) ), 0) 在这个例子里Q我使用了“本周的星期一”的脚本Qƈ作了一点点修改。修改的部分是把原来脚本中“getdate()”部分替换成计算本月的第6天,在计中用本月的W?天来替换当前日期使得计算可以获得q个月的W一个星期一? ȝ 我希望这些例子可以在你用DATEADD和DATEDIFF函数计算日期时给你一点启发。通过使用q个计算日期的时间间隔的数学ҎQ我发现Z昄两个日期之间间隔的有用历法是有h值的。注意,q只是计出q些日期的一U方法。要牢记Q还有很多方?可以得到相同的计结果。假如你有其他的ҎQ那很不错,要是你没有,我希望这些例子可以给你一些启发,当你要用DATEADD和DATEDIFF函数计算你程序可能要用到的日期时? 附录Q其他日期处理方? 1)L时分U?/FONT> declare @ datetime set @ = getdate() --'2003-7-1 10:00:00' SELECT @,DATEADD(day, DATEDIFF(day,0,@), 0) 2Q?FONT color=red>昄星期?/FONT> select datename(weekday,getdate()) 3Q如?FONT color=red>取得某个月的天数 declare @m int set @m=2 --月䆾 select datediff(day,'2003-'+cast(@m as varchar)+'-15' ,'2003-'+cast(@m+1 as varchar)+'-15') 另外Q取得本月天? select datediff(day,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate()) as varchar)+'-15' ,cast(month(GetDate()) as varchar)+'-'+cast(month(GetDate())+1 as varchar)+'-15') 或者用计本月的最后一天的脚本Q然后用DAY函数区最后一? SELECT Day(dateadd(ms,-3,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0))) 4Q?FONT color=red>判断是否闰年 Q? SELECT case day(dateadd(mm, 2, dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate()), 0)))) when 28 then 'q_' else '闰年' end 或? select case datediff(day,datename(year,getdate())+'-02-01',dateadd(mm,1,datename(year,getdate())+'-02-01')) when 28 then 'q_' else '闰年' end 5Q?FONT color=red>一个季度多天 declare @m tinyint,@time smalldatetime select @m=month(getdate()) select @m=case when @m between 1 and 3 then 1 when @m between 4 and 6 then 4 when @m between 7 and 9 then 7 else 10 end select @time=datename(year,getdate())+'-'+convert(varchar(10),@m)+'-01' select datediff(day,@time,dateadd(mm,3,@time)) ]]>自定义Windows服务 http://www.tkk7.com/Johncn/archive/2005/12/07/22838.htmlZhuJun ZhuJun Wed, 07 Dec 2005 03:58:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/07/22838.html http://www.tkk7.com/Johncn/comments/22838.html http://www.tkk7.com/Johncn/archive/2005/12/07/22838.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/22838.html http://www.tkk7.com/Johncn/services/trackbacks/22838.html 使用工具 instsrv.exe ?/SPAN>Srvany.exe 可将应用E序注册?/SPAN>Windows 服务 . instsrv : q个工具是把win32E序变成pȝ服务?BR> 基本用法Q?STRONG>instsrv [服务名] [应用E序l对路径] (增加服务) instsrv [服务名] REMOVE (删除服务) 但是q不是所有程序都适合做系l服务的Q注册成pȝ服务后就是无法启动的,q时需要用到srvany. srvany : q个工具是用来解决上面的工具中的问题,你注册的时候把它当作你要的服务Q在用它来启动你的应用程序?BR> 基本用法Q?/FONT>instsrv [服务名] [srvany的绝对\径] 具体步骤如下:
1. 注册服务 : path\instsrv 服务?/SPAN> path\srvany.exe
2. regedit 打开注册?/SPAN>
3. q入 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ 服务?/SPAN>
4. 右键 - 新徏 - ?/SPAN> 填入 Parameters
5. 打开 Parameters Q右?/SPAN>- 新徏 - 字符串?/SPAN> Application
6. 双击 Application 填入 应用E序的绝对\?/SPAN>, ?/SPAN>: D:\workspace\meip26\meip.exe
7. 右键 - 新徏 - 字符串?/SPAN>AppDirectory
8. 双击 AppDirectory 填入 应用E序的工作目?/SPAN>, ?/SPAN>: D:\workspace\meip26\
9. 启动服务?BR> 在Parameters里还可以d很多键| AppDirectory 工作目录 AppParameters 你的应用E序的参数?BR> AppEnvironment q行环境变量?BR>
]]>在DOS下恢复回收站中的文g[转] http://www.tkk7.com/Johncn/archive/2005/12/06/22771.htmlZhuJun ZhuJun Tue, 06 Dec 2005 12:49:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/06/22771.html http://www.tkk7.com/Johncn/comments/22771.html http://www.tkk7.com/Johncn/archive/2005/12/06/22771.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/22771.html http://www.tkk7.com/Johncn/services/trackbacks/22771.html 在Windows无法启动的时候,我们如何恢复回收站中的文件呢Q如果当时删除时q不知道删除了些什么文Ӟ能否恢复pȝq行呢?回答是肯定的Q就是用l典?DOS 命o来实现?
比如在双启动的系l里Q在Windows 98的环境下误删除了NT的系l文ӞDNT和Windows 98都无法启动?
下面介绍一U办法可以帮你解册个问题?首先q入到DOS模式(如果WINDOWS不能正常启动的话Q用带启动文件的软盘启动)Q进入到C: RECYCLED目录Q这是一个隐藏目录,如果你要恢复的文件原来在D盘,相应的目录是D:RECYCLED。用dir/a命o可以列出一堆DC开头的隐藏文gQDC1.txt, DC2.com...Q,q些是被你已经删除了的文g?
但是׃Windows在把文gU至回收站的时候,把文件名l改了,所以还需要找回原来的文g名。原来的文g名可以从RECYCLED目录下的INFO2 文g中找?用EDIT INFO2 )。INFO2 是一个二q制文gQ每一个被删除的文件在 INFO2 文g中有一D记录(800字节Q,其中可以扑ֈ文g名,其他的信息都不是ASCII字符Q那些ؕ码就不必它了?按找到的文g名用 COPY 命o拷到目标位置卛_Q如Q?COPY DC2.EXE C:WINDOWSCOMMANDDELTREE.EXE?
文g名是按顺序排列的Q第一个文件名是DC1.* 文g的原来的文g名,后缀名保持不变。如果被删除的是目录的话Q在RECYCLED下就有一个叫DC????的目录,用同LҎ可以扑֛原来的目录名?
要做好这些工作,你必M证有一张可以启动的软盘Q除有io.sys、msdos.sys ?command.com 外,最好里面有 edit.com 、attrib.exe文gQ相信懂一点DOS基础的h都知道这是拿来做什么用的。同时也敬告熟悉 Windows 95/98/ME/2000/NT的用P把常用的DOS命o也学一学,Windows用v来的舒服,但出了问题有时还得用DOSҎ来解冟?/FONT>
]]>JavaE序作成exe文g的几U方法[转] http://www.tkk7.com/Johncn/archive/2005/12/06/22769.htmlZhuJun ZhuJun Tue, 06 Dec 2005 12:41:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/06/22769.html http://www.tkk7.com/Johncn/comments/22769.html http://www.tkk7.com/Johncn/archive/2005/12/06/22769.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/22769.html http://www.tkk7.com/Johncn/services/trackbacks/22769.html
一、exe4j 说明Qexe4j可以Jar文g制作成exe文gQ但需jre支持Q也可将Jar文g攑֜外面?BR> 软g性质Q共享Y?BR> 下蝲地址Qhttp://www.ej-technologies.com/products/exe4j/overview.html二、JBuilder 说明Q新版本的JBuilder可以直接把工E制作成各系l的可执行文Ӟ包括Windowspȝ?BR> 软g性质Q商业Y?BR> 下蝲地址Q略。我是从eMule下蝲的?BR>三、NativeJ 说明Q与exe4j功能cM?BR> 软g性质Q共享Y?BR> 下蝲地址Qhttp://www.dobysoft.com/products/nativej/download.html四、Excelsior JET 说明Q可以直接将JavacL件制作成exe文gQ除AWT和Swing及第三方囑Ş接口外可不需jre支持QJava5.0不行Q?BR> 软g性质Q共享Y?BR> 下蝲地址Qhttp://excelsior-usa.com/home.html五、jshrink 说明Q可Jar文g打包qexe文g。同时具有淆功能(q才是它的主要功能)?BR> 软g性质Q共享Y?BR> 下蝲地址Qhttp://www.e-t.com/jshrink.html六、InstallAnywhere 说明Q打包工P对Java打包最好用。可打包成各操作pȝq行包。包括Windowspȝ?BR> 软g性质Q商业Y件?BR> 下蝲地址Qhttp://www.zerog.com/七、InstallShieldX 说明Q与InstallAnywherecMQ但比InstallAnywhere功能强大。相对的Q比较复杂,不易上手Q我现在q没学会?BR> ]]> 让JavaE序带着jre一起上路[转] http://www.tkk7.com/Johncn/archive/2005/12/06/22768.htmlZhuJun ZhuJun Tue, 06 Dec 2005 12:40:00 GMT http://www.tkk7.com/Johncn/archive/2005/12/06/22768.html http://www.tkk7.com/Johncn/comments/22768.html http://www.tkk7.com/Johncn/archive/2005/12/06/22768.html#Feedback 0 http://www.tkk7.com/Johncn/comments/commentRss/22768.html http://www.tkk7.com/Johncn/services/trackbacks/22768.html 用Java开发程序,发布时总要考虑的问题就是怎么在用者的机器上装好JRE。要考虑的问题很多:使用者有没有能力独自安装JREQ用者已有的JRE和我们需要的版本是不是一_会不会出现版本问题,{等?BR> 使用.NET要考虑的问题就些。现?NET CLRg已经很普及了Q看好多D版的Win XP都会自己安装最新的.NET CLRQ而且g它的安装界面也比JRE友好些。彻底解军_装JRE的问题的ҎQ就是让我们的应用程序自p着JREQ这P我们的程序就像传l的Win32应用E序一P双击可以执行,不用所在的机器上是否有JREQ是什么版本的JREQ无论怎样Q我有我自己的!要做到这一点,其实非常Ҏ?BR> 王森在他的《Java深度历险》(强力推荐q本书,内容而精Q的W一章就解释了JDKQJREQJVM之间的关pR解释了我们执行java.exe时发生的事情。其中提刎ͼjava.exe依照一套逻辑来寻扑֏以用的JREQ首先查找自己所在的目录下有没有JREQ据王森讲这栯不确切,我没有JDK全部的源代码Q在此无从考证Q;其次查找自己的父目录下有没有JREQ最后才是查询Windows的注册表?BR> 通常我们在安装好了JRE的机器上的Q何一个目录下都可以执行java.exe。因为它在安装时被复制到了windows的system32目录下,而后者无论如何都会在path环境变量中。这个java.exe最l必然会讉K注册表来定真正的JRE的所在地。若我们要求每一个应用程序都自带JREQ必然不能走q条路。但Q逻辑的第二条Ԍjava.exe会在它的父目录下查找JREQ解x案就在这一条中?BR> 假设我们的应用程序打好了包,叫做MyApp.jarQ放在MyApp的目录下。我们在MyApp目录下,可以执行java –jar MyApp.jar来运行我们的E序。我们安装的是JRE 1.5Q在C:\Program Files\Java\jre1.5.0下。现在,我们只需要简单的jre1.5.0目录搬到MyApp目录下,Z改个Ҏ写的名字比如叫jre。现在,我们的应用程序就象这P MyApp MyApp.jar Jre Jre1.5.0目录下的全部内容 Java.exe在jre目录下的bin目录中。根据第二条逻辑Qjava.exe会在它的父目录中查找jreQ实验证实,它会查找lib目录Q而lib在jre目录下。因此,q样java.exe׃定jre的所在然后正常执行javaE序Q不会去我们是否安装了JREQ注册表中是否有注册这些杂事了?BR> 试一下,在命令行下进入MyApp的目录下Q假讑֮在C盘,path指向MyApp下的JREQ?BR>set path=c:\MyApp\jre\bin 然后q行Q?BR>java –verbose –jar MyApp.jar 加上verbose参数以确定我们确实用了这一套被搬出了家的JRE?BR> E序可以q行Qƈ且在命o行输出的前几行,可以看到Q?BR> [Opened C:\MyApp\jre\lib\rt.jar] [Opened C:\MyApp\jre\lib\jsse.jar] [Opened C:\MyApp\jre\lib\jce.jar] [Opened C:\MyApp\jre\lib\charsets.jar] 因此E序d的确实是它的U有的JRE?BR> xQ我们似乎完成了d。但是现在我们的U有JRE仍不完美Q缺Ҏ太大。JRE 1.5有接q?0MBQ作为我们的U有的JREQ好多内定w是可以抛弃的。Jre目录下的license都可以不要,bin下的执行文g只需要保留java.exe或者javaw.exeQlib下只要保留rtQjsseQjceQcharsets几个库就可以了。除了i386和zi两个子目录外Q其余的子目录都可以不要。Zi下只需要保留自己地区的子目录和其下的一些文件就可以。Lib下除了库之外的属性文件等{都要保留。这h理一番,JRE仍然有接q?0MB。还可以l箋清理几个库文仉面不需要的内容Q这需要仔l的整理Q会很费功夫。最好能写出一个自动工具帮助我们整理它们。从Sun公司上下到的JMF里面附带的用Java写的媒体播放器就自带了JREQ只有几个MB?BR> 清理q后需要运行几遍我们的应用E序Q以保我们的JRE不缺东ѝ?BR> 如果我们希望能有一个程序直接启动我们的应用E序Q那p要费些功夫。最单的Ҏ是弄Z个快h式来Q但是快h式的路径不能是相对的Q不方便我们安装。我惛_的方案就是用Win32E序包装一下。在VS.NET下写一个Win32程序: int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ){ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) ); // Start the child process. if( !CreateProcess( "jre\\bin\\javaw.exe",//执行的程序名 "jre\\bin\\javaw.exe -jar MyApp.jar", // 带参数的执行E序 NULL, // Process handle not inheritable. NULL, // Thread handle not inheritable. FALSE, // Set handle inheritance to FALSE. 0, // No creation flags. NULL, // Use parent's environment block. NULL, // Use parent's starting directory. &si, // Pointer to STARTUPINFO structure. &pi ) // Pointer to PROCESS_INFORMATION structure. ) { ErrorExit( "CreateProcess failed." ); } // Wait until child process exits. WaitForSingleObject( pi.hProcess, INFINITE ); // Close process and thread handles. CloseHandle( pi.hProcess ); CloseHandle( pi.hThread );} 基本上是按照MSDN文中的例子照搬的。将它编译成一个EXE文gQ我们的d才全部完成。双击这个EXE文gQ我们的E序启动了,看v来和传统的Win32E序没有两样QJRE完全被隐藏在底层?BR> P.S. 使用了这个方案后Q我用Wise Installation System制作安装E序Q发C个非常奇怪的问题Q安装结束后Q安装程序似乎非要运行一个叫做GLJ什么什么,后缀是TMP的程序,q需要JVMQ结果就报错JVM.DLL找不到。安装L不成功。我已经掉了OCX / DLL / EXE自注册和卸蝲支持Qؓ什么还不对Q有谁知道是Z么吗Q? ]]>
վ֩ģ壺
㽶߹ۿ |
ѵӰ |
˳վ߲ӰԺ |
þþƷAVδʮ |
Ļ벻Ƶ |
ҹӰ |
ȫaëƬ**Ƶ |
뾫Ʒ |
վ߹ۿ |
һԻƬ |
ݺۺϾþþþ |
þҹҹ³³Ƭ |
91vavava
|
aëƬ100ѹۿ |
Ʒþþѿ
|
ͼƬһ |
ۺһʵ |
avһ |
ɫҹƵѲ |
ղ뾫Ʒ |
Ʒ |
߲ |
Ʒ߳ˮAƬ |
Ļһ |
4399Ӱѹۿֱ |
ۺϳַ |
ݺۺɫ |
AVH߹ۿ
|
ŷһ |
www߹ۿ |
ĻĻɫ |
һ߹ۿ |
þþþƷþþþþþ
|
þһ |
Ʒɫͼ |
߹ۿ |
ѶëƬƵ |
hƵѿ |
99ѾƷƵ |
aëƬëƬѹۿó |
ʮ˽߹ۿƵ |