??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲中文字幕久久久一区,久久久久久亚洲AV无码专区,中文亚洲AV片在线观看不卡http://www.tkk7.com/zhouf/articles/433940.htmlZhouFengZhouFengMon, 24 Jun 2019 02:55:00 GMThttp://www.tkk7.com/zhouf/articles/433940.htmlhttp://www.tkk7.com/zhouf/comments/433940.htmlhttp://www.tkk7.com/zhouf/articles/433940.html#Feedback0http://www.tkk7.com/zhouf/comments/commentRss/433940.htmlhttp://www.tkk7.com/zhouf/services/trackbacks/433940.html在开发项目的时候,有许多项目结构都是差不多的,使用的框架也一Pspring配置文g也一L(fng)Q只是每个项目的名称Q包名等不同Q如果按照之前的Ҏ(gu)Q可以拷贝一个项目,然后再做一些修改就好了(jin)。这也不是不可以Q只是我觉得Q应该还有更帅的招,Maven可以使用archetype创徏目Q那是否也可以创定义l构的项目了(jin)Q所以就?jin)解了(jin)一下通过Maven使用现有目创徏目模板。尝试了(jin)一下,很不错,可以自动处理包名{{换,几个命o(h)可以生成雷同结构的目Q在此记录一下过E?br />

1 准备好一个现有的目

既然做ؓ(f)模板目Q里面的配置都是做好?jin)的Q是一个可以用的项目,加入?jin)Eclipse支持Q项目中包含一些Eclipse配置文gQ本例中目目录?br />
D:\workspace\myprj

2 创徏模板工程

q入目目录后,q行生成archetype命o(h)
D:\workspace\myprj>mvn archetype:create-from-project
?x)在myprj目录下生成target目录Q其下生成如下目?br />
classes
generated-sources
generated-test-sources
m2e-wtp
maven-status
surefire-reports
test-classes
模板代码主要位于generated-sources目录?br />

3 修改模板代码

目中的所有代码都?x)自动替换?f)占位W,除了(jin)Eclipse配置文g之外Q接下来修改模板Q进入target\generated-sources\archetype\src\main\resources\archetype-resources\目录Q将Eclipse配置文g也加入占位符Q以方便新项目的生成Q比如修改下面两个文Ӟ加入占位WartifactId
文g1Q?project
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
        <name>${artifactId}</name>
        <comment></comment>
        <projects>
        </projects>
        <buildSpec>
                <buildCommand>
                        <name>org.eclipse.jdt.core.javabuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.wst.common.project.facet.core.builder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.wst.validation.validationbuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.m2e.core.maven2Builder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
        </buildSpec>
        <natures>
                <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
                <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
                <nature>org.eclipse.jdt.core.javanature</nature>
                <nature>org.eclipse.m2e.core.maven2Nature</nature>
                <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
                <nature>org.eclipse.wst.jsdt.core.jsNature</nature>
        </natures>
</projectDescription>
文g2Q?settings\org.eclipse.wst.common.component
<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="${artifactId}">
        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/resources"/>
        <property name="context-root" value="${artifactId}"/>
        <property name="java-output-path" value="/${artifactId}/target/classes"/>
    </wb-module>
</project-modules>

4 修改目文g列表

配置完成后,通过mvn生成新的目Ӟ上面的Eclipse配置文g也不?x)被攑օ新的工程里,需要在配置文g中加入这些文件的信息Q以?qing)标记哪些文件是需要用占位符替换的,修改target\generated-sources\archetype\src\main\resources\META-INF\maven\archetype-metadata.xml文gQ在现有文g中可以看到如下信?br />
<fileSet filtered="true" encoding="UTF-8">
    <directory>.settings</directory>
    <includes>
        <include>**/*.xml</include>
    </includes>
</fileSet>
也就是说Q默认情况下Qmvn只将.settings目录下的*.xml文g生成到项目中Q其中filtered="true"表示需要进行内容过滤替换占位符Q我们把需要添加的文g攑օ此配|,修改后结果如?/div>
<fileSet filtered="true" encoding="UTF-8">
    <directory>.settings</directory>
    <includes>
        <include>**/*.xml</include>
        <include>**/*.container</include>
        <include>**/*.component</include>
        <include>**/*.name</include>
        <include>**/*.jsdtscope</include>
        <include>**/*.prefs</include>
    </includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
    <directory></directory>
    <includes>
        <include>.classpath</include>
        <include>.project</include>
    </includes>
</fileSet>
如果需要过滤掉一些不需要的文gQ也可以在此配置。准备好后,可以安装了(jin)

5 模杉K目安装到本地仓库

q入/target/generated-sources/archetype/目录Q执行安?br />
D:\workspace\myprj\target\generated-sources\archetype>mvn install
此命令会(x)在maven仓库中生成archetype-catalog.xml文gQ仓库位|取决于maven配置文gsettings.xml中的讄Q内容如下,可以修改描述信息Q方便在创徏目时进行提C?br />
<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
    xmlns
="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance">
  <archetypes>
    <archetype>
      <groupId>com.zhouf</groupId>
      <artifactId>myprj-archetype</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <description>simple project with springmvc and jetty</description>
    </archetype>
  </archetypes>
</archetype-catalog>

6 创徏目?hu)?/h2>
执行生成命o(h)
D:\workspace>mvn archetype:generate -DarchetypeCatalog=local
此命令可以在M目录下执行,?x)在当前目录生成?br />
Choose archetype:
1: local -> com.zhouf:myprj-archetype (simple project with springmvc and jetty)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): : 1
Define value for property 'groupId': com.zhouf
Define value for property 'artifactId': demoprj1
Define value for property 'version' 1.0-SNAPSHOT: :
Define value for property 'package' com.zhouf: :
Confirm properties configuration:
groupId: com.zhouf
artifactId: demoprj1
version: 1.0-SNAPSHOT
package: com.zhouf
 Y: :
生成目demoprj1

7 导入Eclipseq行

生成的目导入到Eclipse环境中,直接部v到服务器上跑一个,试通过Q不需要修攚w|,?/div>
如果目是通过mvn jetty:runq行的,也可以省略中间加入Eclipse配置文g的操?/div>
转自我的书:(x)https://www.jianshu.com/p/fb5c0e39692f


ZhouFeng 2019-06-24 10:55 发表评论
]]>Tomcat配置cgiq行python脚本http://www.tkk7.com/zhouf/articles/433448.htmlZhouFengZhouFengSat, 20 Oct 2018 02:34:00 GMThttp://www.tkk7.com/zhouf/articles/433448.htmlhttp://www.tkk7.com/zhouf/comments/433448.htmlhttp://www.tkk7.com/zhouf/articles/433448.html#Feedback0http://www.tkk7.com/zhouf/comments/commentRss/433448.htmlhttp://www.tkk7.com/zhouf/services/trackbacks/433448.html
1、在web工程WEB-INF目录下创建目录cgiQ当然也可以是别的名?/div>
2、修改web.xmlQ开启如下设|,默认情况是注释掉?br />
<servlet>
    <servlet-name>cgi</servlet-name>
    <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
    <init-param>
        <param-name>clientinputTimeout</param-name>
        <param-value>100</param-value>
    </init-param>
    <init-param>
        <param-name>debug</param-name>
        <param-value>0</param-value>
    </init-param>
    <init-param>
        <param-name>passShellEnvironment</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>cgiPathPrefix</param-name>
        <param-value>WEB-INF/cgi</param-value>
    </init-param>
    <init-param>
        <param-name>executable</param-name>
        <param-value>D:/Anaconda3/python.exe</param-value>
    </init-param>
    <load-on-startup>5</load-on-startup>
</servlet>
注意修改python的\?/div>
cgiPathPrefix: 与Server能够讉K的脚本目录有养I与之前创建的目录相对?br />
3、开启cgi的mapping映射Q修改web.xmlQ开启如下设|?br />
<servlet-mapping>
    <servlet-name>cgi</servlet-name>
    <url-pattern>/cgi-bin/*</url-pattern>
</servlet-mapping>
讉K路径可以修改定义字符
4、修改content.xml文gQ在Context中添加privileged属?br />
<Context privileged="true">

5、在工程cgi目录写python文gQ如hello.py
print('Content-type: text/plain\n\n')

print('Hello python')
输出text/plain说明q是一个普通文本,一定注意之后要有两个换行(心(j)坑啦Q!Q!

6、运行工Eƈ试
http://localhost:8080/prj/cgi-bin/hello.py

所见结果,通过q种Ҏ(gu)可以在Tomcat环境下运行python脚本?jin),如果是已l用python脚本做好?jin)服务的话,q是可以考虑通过服务调用的方式与Tomcat工程q行整合Q在此记录一?/div>

ZhouFeng 2018-10-20 10:34 发表评论
]]>|页语音播报的实?/title><link>http://www.tkk7.com/zhouf/articles/432483.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Tue, 25 Apr 2017 10:48:00 GMT</pubDate><guid>http://www.tkk7.com/zhouf/articles/432483.html</guid><wfw:comment>http://www.tkk7.com/zhouf/comments/432483.html</wfw:comment><comments>http://www.tkk7.com/zhouf/articles/432483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhouf/comments/commentRss/432483.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhouf/services/trackbacks/432483.html</trackback:ping><description><![CDATA[<div>因ؓ(f)需要实现在面中进行语x(chng)C,有点像美团那个外卖的提示?#8220;(zhn)有新的订单Q请注意查收”Q于是开始搜L法,最后发C个开源项目,https://github.com/wenco/speech 用来实现语音播报Q上面有文说明。先clone下来试试</div><div>按照所l的代码Q运行v来没有问题,需要在面中放入一个标{,q写入要转换音的内容。ؓ(f)?jin)后面?f)?jin)调用方便,下面q行?jin)一些调整?/div><div>把播放按钮隐藏v来,让事件触发播放?/div><div>修改jQuery.speech.min.jsQ因面引用的文件是q个Q也可以单独创徏一个js在页面中引入Q写入以下内?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008000; ">//</span><span style="color: #008000; ">语音内容攑֜面元素中,如果没有则创?lt;div style="display: none" id="tts_content"></div></span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">function</span> say(arg) {<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; ">处理面元素</span><span style="color: #008000; "><br /></span>    <span style="color: #0000FF; ">if</span>($("#tts_content").length == 0){<br />        <span style="color: #008000; ">//</span><span style="color: #008000; ">存在元素</span><span style="color: #008000; "><br /></span>        $("<div style='display: none' id='tts_content'></div>").appendTo("body");<br />    }<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; ">处理传入参数</span><span style="color: #008000; "><br /></span>    <span style="color: #0000FF; ">if</span>(arg){<br />        $('#tts_content').text(arg);<br />    }<span style="color: #0000FF; ">else</span>{<br />        $('#tts_content').text("(zhn)有新的消息Q请注意查收");<br />    }<br />    <br />    <span style="color: #008000; ">//</span><span style="color: #008000; ">转化?/span><span style="color: #008000; "><br /></span>    $('#tts_content').speech({<br />        "speech": <span style="color: #0000FF; ">false</span>,<br />        "speed": 16<br />    });<br />}</div><div>调整?jin)播报速度Q在E序中自动创建需要的标签Q需要播报的内容Ҏ(gu)参数传入Q没有参C可以播报默认的消息,l过q样单的装后,在调用时Q就只需要调用say()Ҏ(gu)卛_Q不需要在面中放入标{,也方便放入其他事件中Q然后页面就可以q样?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; "><!</span><span style="color: #FF00FF; ">DOCTYPE html</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">meta </span><span style="color: #FF0000; ">charset</span><span style="color: #0000FF; ">="utf-8"</span><span style="color: #FF0000; "> </span><span style="color: #0000FF; ">/></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">></span>语音播报<span style="color: #0000FF; "></</span><span style="color: #800000; ">title</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "></</span><span style="color: #800000; ">head</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">style </span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="text/css"</span><span style="color: #0000FF; ">></span><span style="background-color: #F5F5F5; color: #800000; "><br />body</span><span style="background-color: #f5f5f5;">{</span><span style="background-color: #F5F5F5; color: #FF0000; ">background-color</span><span style="background-color: #f5f5f5;">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">#fff</span><span style="background-color: #f5f5f5;">;</span><span style="background-color: #F5F5F5; color: #FF0000; ">padding-top</span><span style="background-color: #f5f5f5;">:</span><span style="background-color: #F5F5F5; color: #0000FF; ">50px</span><span style="background-color: #f5f5f5;">;</span><span style="background-color: #f5f5f5;">}</span><span style="background-color: #F5F5F5; color: #800000; "><br /></span><span style="color: #0000FF; "></</span><span style="color: #800000; ">style</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">script </span><span style="color: #FF0000; ">src</span><span style="color: #0000FF; ">="js/jQuery/jQuery-2.1.4.min.js"</span><span style="color: #0000FF; ">></</span><span style="color: #800000; ">script</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">script </span><span style="color: #FF0000; ">src</span><span style="color: #0000FF; ">="js/speech/jQuery.speech.min.js"</span><span style="color: #0000FF; ">></</span><span style="color: #800000; ">script</span><span style="color: #0000FF; ">></span><br /><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">button </span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="kk"</span><span style="color: #0000FF; ">></span>说一?span style="color: #0000FF; "></</span><span style="color: #800000; ">button</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "><</span><span style="color: #800000; ">script</span><span style="color: #0000FF; ">></span><span style="background-color: #f5f5f5;"><br />$(</span><span style="background-color: #f5f5f5;">"</span><span style="background-color: #f5f5f5;">#kk</span><span style="background-color: #f5f5f5;">"</span><span style="background-color: #f5f5f5;">).click(</span><span style="background-color: #F5F5F5; color: #0000FF; ">function</span><span style="background-color: #f5f5f5;">() {<br />    say(</span><span style="background-color: #f5f5f5;">"</span><span style="background-color: #f5f5f5;">(zhn)有新的订单Q请注意查收</span><span style="background-color: #f5f5f5;">"</span><span style="background-color: #f5f5f5;">);<br />    </span><span style="background-color: #F5F5F5; color: #008000; ">//</span><span style="background-color: #F5F5F5; color: #008000; ">say();</span><span style="background-color: #F5F5F5; color: #008000; "><br /></span><span style="background-color: #f5f5f5;">});<br /></span><span style="color: #0000FF; "></</span><span style="color: #800000; ">script</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "></</span><span style="color: #800000; ">body</span><span style="color: #0000FF; ">></span><br /><span style="color: #0000FF; "></</span><span style="color: #800000; ">html</span><span style="color: #0000FF; ">></span></div>d按钮只是Z(jin)演示事g触发Q需要说什么内容就传入什么参敎ͼ如果不传入参敎ͼ则播报默认内宏V这L(fng)调用Q甚是简单,l于完成?jin)这L(fng)功能Q很帅,哈哈:D</div><div></div><div>致谢https://github.com/wenco/speech</div></div><img src ="http://www.tkk7.com/zhouf/aggbug/432483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhouf/" target="_blank">ZhouFeng</a> 2017-04-25 18:48 <a href="http://www.tkk7.com/zhouf/articles/432483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在webapp中用嵌入式数据库hsqldbhttp://www.tkk7.com/zhouf/articles/432477.htmlZhouFengZhouFengMon, 24 Apr 2017 14:23:00 GMThttp://www.tkk7.com/zhouf/articles/432477.htmlhttp://www.tkk7.com/zhouf/comments/432477.htmlhttp://www.tkk7.com/zhouf/articles/432477.html#Feedback0http://www.tkk7.com/zhouf/comments/commentRss/432477.htmlhttp://www.tkk7.com/zhouf/services/trackbacks/432477.htmlHSQLDB启动方便Q不用安装,在之前的文里已介绍q如何以服务器模式启动,q且通过JDBCq接Q接下来介绍如何在webapp中嵌入hsqldbQ让其可以随应用一起启动,比如和Tomcat服务器一起启动,不用单独启动数据库。这里有两种模式可以选择
一U是q程模式启动Q按文g方式加蝲数据库,只有与Tomcat服务器在同一JVM中才能访?/div>
另一U是用JAVAE序来启动服务器Q以|络方式提供数据库服务,可以在Tomcat之外用hsqldb客户端来q接Q方便调?/div>
q两U数据文仉攑֜工程里,如下案例中是数据库攑֜WEB-INF/db/目录?br />
1.加蝲hsqldb.jar
hsqldb.jar文g加入到现有webapp工程中,拯hsqldb.jar至WEB-INF/lib/hsqldb.jar

2.创徏WEB-INF/db/目录
在开发阶D,需要把数据文g攑֜工程中,而不是tomcat里,q样处理Ҏ(gu)包,版本控制理也方?/div>
Z(jin)方便启动数据库,可以写一个批处理Q如WEB-INF/startdb.batQ大家可Ҏ(gu)自己的\径修改,内容如下
cd db
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mycms --dbname.0 mycmsdb
文g名和数据库名可以不同Q此处文件名为mycmsQ而数据库名ؓ(f)mycmsdb

3.使用Servlet启动数据?/div>
可以创徏一个自启动ServletQ用于启动数据库Q这U方式可以用客L(fng)工具q接到应用数据库上,主要用于在线调试Q或q程理
package com.zhouf.mydb;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

import org.hsqldb.server.Server;

@WebServlet(loadOnStartup=1)
public class HsqldbServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    
    private Server server = new Server();
       
    public HsqldbServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        String path=this.getServletContext().getRealPath("/WEB-INF/db/mycms");
        System.out.println("dbpath["+path+"]");
        
        server.setDatabaseName(0, "mycmsdb");
        server.setDatabasePath(0, path);
        server.setPort(9001);
        server.setSilent(true);
        Thread thread=new Thread(new Runnable(){
            public void run() {
                server.start();
            }
        });
        thread.start();
    }

    public void destroy() {
        super.destroy();
        server.shutdown();
    }
    
}
注意服务端口不要冲突

4.完成一个数据库q接c,用于处理数据库连接管?br />
public class DBManage {

    public static Connection getConnection() {
        Connection conn = null;
        try {
            
            //Ҏ(gu)q接配置获取数据库连?/span>
            Class.forName("org.hsqldb.jdbcDriver").newInstance();
            
            //*
            
//q接Hsqldb Server
            conn= DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/mycmsdb;shutdown=true","SA","");
            /*/
            
            //直接获得In-processq接
            String path = DBManage.class.getResource("").toString();
            String dbpath = path.substring(0,path.indexOf("classes")) + "db/mycms";

            conn = DriverManager.getConnection("jdbc:hsqldb:"+dbpath,"SA","");
            //
*/
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return conn;
    }
}
上面的连接管理两U方式都支持Q可选用Q这样应用可以发布到tomcat里独立运行,也可以打包成war发布Q这样一个带war文g可以演C,相当愉快:D


ZhouFeng 2017-04-24 22:23 发表评论
]]>HSQLDB数据库用介l?/title><link>http://www.tkk7.com/zhouf/articles/432476.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Sun, 23 Apr 2017 08:41:00 GMT</pubDate><guid>http://www.tkk7.com/zhouf/articles/432476.html</guid><wfw:comment>http://www.tkk7.com/zhouf/comments/432476.html</wfw:comment><comments>http://www.tkk7.com/zhouf/articles/432476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhouf/comments/commentRss/432476.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhouf/services/trackbacks/432476.html</trackback:ping><description><![CDATA[用过HSQLDB一D|_(d)其作Z个小型数据库Q很是小巧,jar包也?M多,ȝ虽小Q五脏俱全。对于一此网站系l或是小型的应用pȝQ应该够满求了(jin)Q主要是l色环保Q不需要进行安装,q点我很喜欢Q特别是直接打包到web应用里,可以直接使用Q用不着更换q行环境后,重新配置数据库连接。下面就介绍一下hsqldb的一些简单的使用<br /><br />下蝲HSQLDB<br />首先下蝲hsqldbQ其官方|站为hsqldb.orgQ目前最新版本是2.4.0Q最早用q?.9版本的,p得甚是喜Ƣ,主页界面上有下蝲的链接,׃个压~文件包Q不需要区分操作系l。下载后解压卛_<br /><br />目录l构介绍<br />bin:存放q行的批处理Q可以参照着攑օ自己的批处理用于启动或管理数据库<br />data:用于存放数据文g的地方,新解压时为空Q后面自q的时候,可能攑֜里面Q也可以攑֜其他地方<br />doc:文Q与数据库操作的所有文都在里面,很详l,有什么问题可以在里面找找<br />lib:jar文gQHSQLDB核心(j)的jar?br />sample:一些配|的模板<br /><br />数据库启?br />HSQLDBq行分ؓ(f)三种模式Q分别ؓ(f)内存模式Q进E模式,和服务器模式?br />在内存模式下Q所有的数据都将在内存(sh)完成Q如果程序退出,则相应的数据也将同时被销毁。连接JDBC的实例ؓ(f)Qjdbc:hsqldb:mem:dbname<br />在进E模式下Q是直接以文件方式进行操作,所有文件均写入文gQ关闭数据库后数据可以保留,q种模式下不能接受其他程序访?br />服务器模式,常用Q又分ؓ(f)三种Q即Servet,WebServer,ServletQ详见官Ҏ(gu),服务器模式单独启动一个JVM用于提供数据库服务,q开放连接端口,其他E序可以通过jdbc或客L(fng)q接Q这也是在开发和调试中常用的一U方式,在上U运行后Q可采用q程模式<br />以Server方式启动服务?br />修改bin/runServer.batQ另存(sh)ؓ(f)myBookServer<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->cd ..\data<br />@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:book --dbname.0 bookdb</div>卛_data目录下创建数据文Ӟ文g名ؓ(f)bookQ启动服务的数据库名为bookdbQ如果需要修改监听端口,可以使用--poot 9002Q如果不修改端口Q可以不用添加这个参敎ͼ默认端口?001Q启动后的显C如?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->D:\hsqldb-2.4.0\hsqldb\bin>myBookServer.bat<br /><br />D:\hsqldb-2.4.0\hsqldb\bin>cd ..\data<br />[Server@4517d9a3]: Startup sequence initiated from main() method<br />[Server@4517d9a3]: Could not load properties from file<br />[Server@4517d9a3]: Using cli/<span style="color: #0000FF; ">default</span> properties only<br />[Server@4517d9a3]: Initiating startup sequence<img src="http://www.tkk7.com/Images/dot.gif" alt="" /><br />[Server@4517d9a3]: Server socket opened successfully in 6 ms.<br />[Server@4517d9a3]: Database [index=0, id=0, db=file:book, alias=bookdb] opened successfully in 354 ms.<br />[Server@4517d9a3]: Startup sequence completed in 362 ms.<br />[Server@4517d9a3]: 2017-04-23 15:22:33.599 HSQLDB server 2.4.0 is online on port 9001<br />[Server@4517d9a3]: To close normally, connect and execute SHUTDOWN SQL<br />[Server@4517d9a3]: From command line, use [Ctrl]+[C] to abort abruptly</div>看到q个提示Q说明数据库已经启动好了(jin)Qƈ开启了(jin)监听端口9001Q现在可以通过客户端程序连接了(jin)<br />在bin目录下,有一个runManager.bat和一个runManagerSwing.batQ这两个批处理都可以打开自带的客L(fng)E序Q只是界面风格有所不同QrunManager要简z些Q下面介l一下runManagerSwing的用,双击打开后,需要填写连接信息,当然也可以在命o(h)行里通过参数的方式进行连接,在弹出对话框里输入连接信?br /><img src="http://www.tkk7.com/images/blogjava_net/zhouf/runManagerSwingLogin.png" width="350" height="221" alt="" /><br />mybook是ؓ(f)当前配置取的名字QURL里添加上bookdbQ如果不?001端口的话Q还需要添加端口,?/localhost:9001/bookdbQ登录后Q就可以q入到管理界面了(jin)<br /><img src="http://www.tkk7.com/images/blogjava_net/zhouf/hsql_manager.png" width="400" height="297" alt="" /><br />在这里操作HSQLDBQ比如创Q修Ҏ(gu)据之cȝQ如果需要修改密码之cȝ操作Q文里有详?br />创徏表,插入数据Q可以上囄面中q行如下命o(h)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->CREATE TABLE TB_BOOKS(BOOKID INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL PRIMARY KEY,BOOKNAME VARCHAR(30),AUTHOR VARCHAR(30));</div>创徏一个book表,分别为bookid,bookname,author<br /><br />JDBC讉K<br />接下来用JAVA写入数据q测?br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span> com.zhouf.hsql;<br /><br /><span style="color: #0000FF; ">import</span> java.sql.Connection;<br /><span style="color: #0000FF; ">import</span> java.sql.DriverManager;<br /><span style="color: #0000FF; ">import</span> java.sql.ResultSet;<br /><span style="color: #0000FF; ">import</span> java.sql.SQLException;<br /><span style="color: #0000FF; ">import</span> java.sql.Statement;<br /><br /><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> HsqlTest {<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> main(String[] args) <span style="color: #0000FF; ">throws</span> SQLException {<br />        <span style="color: #008000; ">//</span><span style="color: #008000; ">initData();</span><span style="color: #008000; "><br /></span>        Connection conn = getConnection();<br />        Statement stmt = conn.createStatement();<br />        ResultSet rs = stmt.executeQuery("select * from tb_books");<br />        <span style="color: #0000FF; ">while</span>(rs.next()){<br />            System.out.println(rs.getString("bookname") + "=>" + rs.getString("author"));<br />        }<br />        rs.close();<br />        stmt.close();<br />        conn.close();<br /><br />    }<br />    <br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> Connection getConnection(){<br />        Connection conn = <span style="color: #0000FF; ">null</span>;<br />        <span style="color: #0000FF; ">try</span> {<br />            Class.forName("org.hsqldb.jdbcDriver");<br />            conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/bookdb", "SA", "");<br />        } <span style="color: #0000FF; ">catch</span> (ClassNotFoundException e) {<br />            e.printStackTrace();<br />        } <span style="color: #0000FF; ">catch</span> (SQLException e) {<br />            e.printStackTrace();<br />        }<br />        <span style="color: #0000FF; ">return</span> conn;<br />    }<br />    <br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> initData() <span style="color: #0000FF; ">throws</span> SQLException{<br />        <br />        Connection conn = getConnection();<br />        Statement stmt = conn.createStatement();<br />        <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 10; i < 30; i++) {<br />            String sql = "insert into tb_books(bookname,author) values('BookName"+i+"','Author"+i+"')";<br />            System.out.println(sql);<br />            stmt.addBatch(sql);<br />        }<br />        <br />        stmt.executeBatch();<br />        stmt.close();<br />        conn.close();<br />    }<br /><br />}</div>先调用initData()初始化数据,可以在理界面中看到数据了(jin)Q再q行java可以d数据QJDBCq接没有问题Q记得一定要在工E里引用lib/hsqldb.jar?br />此时在data目录下有很多book开头的文gQ只是后~有所不同Q有临时文gQ日志文Ӟ属性文件以?qing)脚本文件等Q如果运行了(jin)shutdown命o(h)Q则其他文g?x)自动清理,仅保留properties和script文gQ如果要带走数据库,把这两个文g带走好?jin)?br />如果不希望每ơ打开理界面都弹出对话框要求输入内容Q可以在命o(h)行里d参数Q拷贝一份bin/runManagerSwing.batq修改ؓ(f)如下内容<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->cd ..\data<br />@java -classpath ..\lib\hsqldb.jar org.hsqldb.util.DatabaseManagerSwing --url jdbc:hsqldb:hsql:<span style="color: #008000; ">//</span><span style="color: #008000;">localhost/bookdb --user SA<br /></span></div>另存?sh)myBookManager.batQ下ơ直接运行这个批处理可能直接连接到数据库服务器Q不用再弹出q接对话框了(jin)Q前提是服务器正在运行中Q如果运行了(jin)shutdown关闭?jin)服务器Q则需要重新启动服务器q行q接?br />x(chng)Q基本的hsqldb的用就完成?jin),文里还有其它更多的配置和连接方式,详细情况请参阅doc目录下的文?br />如果需要把hsqldb嵌入到webapp中运行,不用单独启动服务器,请关注后l文,E后整理好再发布。自q?jin)一下午才整理好q一,看来得提高效率了(jin)Q如果这文能对大家所有帮助,那就太好?jin)?img src ="http://www.tkk7.com/zhouf/aggbug/432476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhouf/" target="_blank">ZhouFeng</a> 2017-04-23 16:41 <a href="http://www.tkk7.com/zhouf/articles/432476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaDB数据库用笔?/title><link>http://www.tkk7.com/zhouf/articles/432256.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Tue, 10 Jan 2017 02:48:00 GMT</pubDate><guid>http://www.tkk7.com/zhouf/articles/432256.html</guid><wfw:comment>http://www.tkk7.com/zhouf/comments/432256.html</wfw:comment><comments>http://www.tkk7.com/zhouf/articles/432256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/zhouf/comments/commentRss/432256.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/zhouf/services/trackbacks/432256.html</trackback:ping><description><![CDATA[<div>在做一些小的应用系l时Q用q嵌入式数据库,使用qHSQLDBQ这个比较小巧,在做?jin)几个应用之后觉得挺好用的,因?f)数据量不多,也能够满求,也就在嵌入式数据库这条\上越走越q了(jin)?/div><div>在JAVA里也有一个嵌入式数据库,也想试着用一下,便有?jin)下面这日志。在安装jdk的时候会(x)提示安装一个数据库Q如果勾选的话,则会(x)在安装Java嵌入式数据库JavaDBQ在JAVA_HOME目录下多Z个db的目录(在jdk6版本里目录名为JavaDBQ,里面是与数据库有关的文件了(jin)Q如果安装jdk时没有选择安装Q可以在官网<a target="_blank">http://db.apache.org/derby/derby_downloads.html</a>上下载解压即可,l过?jin)一D|间的摸烦(ch)Q现结如下?br /><br /><h3>1.配置环境变量</h3><div>在用之前,需要配|环境变量DERBY_HOME指向db所在目录,本机JAVA_HOME为G:\Java\jdk1.8.0_73,则DERBY_HOME应该配置为G:\Java\jdk1.8.0_73\dbQ或%JAVA_HOME%\dbQ如果希望后面在命o(h)行里用v来方便点Q也可以?DERBY_HOME%\db\bind到path里去<br /><br /><h3>2.目录介绍</h3><div>在DERBY_HOME目录下有两个目录bin和lib</div><div>bin:存放执行批处理文Ӟ用于查看Q启动和停止数据库的脚本</div><div>lib:存放所用到的jar?/div><div>bin目录下有几个主要的文Ӟ有两个不同的方式Q没?bat后缀的文件ؓ(f)Linuxq_下运行的脚本Qbat文g为Windowsq_使用的批处理</div><div>dblook:用于查看数据库的基本信息?qing)DDL语句</div><div>ij:命o(h)行客L(fng)E序Q提供与数据库的交互</div><div>NetworkServerControl:提供|络服务Q主要被startNetworkServer和stopNetworkServer调用</div><div>startNetworkServer:启动|络数据库模式,开启监?/div><div>stopNetworkServer:关闭|络数据库模式,停止监听</div><div>sysinfo:查看当前pȝ信息Q可用于(g)数据库是否正确安装</div><div>几个以CPl束的批处理Q主要用于在不同模式下设|CLASSPATH用的Q如果把lib目录下的jar文gd到CLASSPATH中,可以不用通过执行批处理来讄CLASSPATH?br /><br /><h3>3.用命令行方式开启数据库</h3><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->G:\Java\jdk1.8.0_73\db\bin>ij<br />ij 版本 10.11<br />ij> connect 'jdbc:derby:mydb;create=true';</div></div><div>加上create=true表明如果库mydb不存在,则创建,数据库文件存放位|ؓ(f)当前目录Q接下来创徏一个表Q可以把三个字段定义信息写在一行里面,l束时要加分?/div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ij> create table stu(id int not null generated by default as identity,<br />> stuname varchar(20),<br />> email varchar(30));<br />已插?更新/删除 0 ?/div></div><div>向表中写入一条记录,q进行查?/div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ij> insert into stu(stuname,email) values('Tom','tom@test.com');<br />已插?更新/删除 1 ?br />ij> select * from stu;<br />ID         |STUNAME             |EMAIL<br />---------------------------------------------------------------<br />1          |Tom                 |tom@test.com<br /><br />已选择 1 ?/div></div><div>退出命令行状?/div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ij> exit;</div></div><div>重新q入命o(h)行方式,q行数据验证</div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->G:\Java\jdk1.8.0_73\db\bin>ij<br />ij 版本 10.11<br />ij> connect 'jdbc:derby:mydb';<br />ij> select * from stu;<br />ID         |STUNAME             |EMAIL<br />---------------------------------------------------------------<br />1          |Tom                 |tom@test.com<br /><br />已选择 1 ?/div></div><div>查看当前表结构可以用describe <表名></div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ij> describe stu;<br />COLUMN_NAME         |TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&<br />------------------------------------------------------------------------------<br />ID                  |INTEGER  |0   |10  |10    |GENERATED&|NULL      |NO<br />STUNAME             |VARCHAR  |NULL|NULL|20    |NULL      |40        |YES<br />EMAIL               |VARCHAR  |NULL|NULL|30    |NULL      |60        |YES<br /><br />已选择 3 ?br />ij></div></div>q是在命令行方式下的基本使用<br /><br /><h3>4.在Java工程中用JavaDB</h3><div>在Eclipse中创Z个Java工程Q导入derby.jar包,代码如下</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span> com.db;<br /><br /><span style="color: #0000FF; ">import</span> java.sql.Connection;<br /><span style="color: #0000FF; ">import</span> java.sql.DriverManager;<br /><span style="color: #0000FF; ">import</span> java.sql.Statement;<br /><br /><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> EmbedDB {<br /><br />    <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> String driver = "org.apache.derby.jdbc.EmbeddedDriver";<br />    <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> String protocol = "jdbc:derby:db3;create=true"; <span style="color: #008000; ">//</span><span style="color: #008000; "> 在工E目录下创徏数据?br />    </span><span style="color: #008000; ">//</span><span style="color: #008000; "> private static String protocol = "jdbc:derby:db/db3;create=true";    </span><span style="color: #008000; ">//</span><span style="color: #008000; ">在工E目录下db目录中创建数据库<br />    </span><span style="color: #008000; ">//</span><span style="color: #008000; "> private static String protocol = "jdbc:derby:D:/mydbs/db3;create=true";    </span><span style="color: #008000; ">//</span><span style="color: #008000; ">在D:/mydbs/目录下创建数据库</span><span style="color: #008000; "><br /></span><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> main(String[] args) {<br />        <span style="color: #0000FF; ">try</span> {<br />            Class.forName(driver).newInstance();<br />            System.out.println("Loaded the appropriate driver");<br />            Connection conn = DriverManager.getConnection(protocol);<br />            Statement stmt = conn.createStatement();<br />            stmt.executeUpdate("create table stu(id int not null generated by default as identity,stuname varchar(20),email varchar(30))");<br /><br />            <span style="color: #0000FF; ">for</span> (String str : "one,two,three,four,five".split(",")) {<br />                String sql = "insert into stu(stuname,email) values('" + str + "','" + str + "@test.com')";<br />                System.out.println(sql);<br />                stmt.addBatch(sql);<br />            }<br />            stmt.executeBatch();<br />            System.out.println("insert over");<br />            conn.commit();<br /><br />            stmt.close();<br />            conn.close();<br /><br />        } <span style="color: #0000FF; ">catch</span> (Exception e) {<br />            e.printStackTrace();<br />        }<br />    }<br />}</div><div>q行l果<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Loaded the appropriate driver<br />insert into stu(stuname,email) values('one','one@test.com')<br />insert into stu(stuname,email) values('two','two@test.com')<br />insert into stu(stuname,email) values('three','three@test.com')<br />insert into stu(stuname,email) values('four','four@test.com')<br />insert into stu(stuname,email) values('five','five@test.com')<br />insert over</div><br /><h3>5.|络数据库模?/h3><div>JavaDB是跑在JVM中的Q如果此时再开启一个新的窗口,打开当前数据库,?x)报错,如果希望有多个客L(fng)q接Q如开发阶D,一边在Eclipse里运行程序,一边在命o(h)行里查看数据记录Q这U情况就可以使用JavaDB的网l启动模?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->G:\Java\jdk1.8.0_73\db\bin>startNetworkServer<br />Tue Jan 10 09:10:54 CST 2017 : 已用基本服务器安全{略安装?nbsp;Security Manager?br />Tue Jan 10 09:11:04 CST 2017 : Apache Derby |络服务?nbsp;- 10.11.1.2 - (1629631) 已启动ƈ准备接受端口 1527 上的q接</div></div><div>表示当前H口正在监听Q即|络服务已开?/div><div>查看数据库的基本情况可以用dblook<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->G:\Java\jdk1.8.0_73\db\bin>dblook -d 'jdbc:derby://localhost:1527/mydb'<br />-- 旉戌Q?017-01-10 09:18:30.232<br />-- 源数据库为:(x)mydb<br />-- q接 URL 为:(x)jdbc:derby://localhost:1527/mydb<br />-- appendLogs: false<br /><br />-- ----------------------------------------------<br />-- 表的 DDL 语句<br />-- ----------------------------------------------<br /><br />CREATE TABLE "APP"."STU" ("ID" INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1), "STUNAME" VARCHAR(20), "EMAIL" VARCHAR(30));</div></div>以命令行方式q行数据库连接ƈ试<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->G:\Java\jdk1.8.0_73\db\bin>ij<br />ij 版本 10.11<br />ij> connect 'jdbc:derby://localhost:1527/mydb'<br />ij> show tables in app;<br />TABLE_SCHEM         |TABLE_NAME                    |REMARKS<br />------------------------------------------------------------------------<br />APP                 |STU                           |<br /><br />已选择 1 ?br />ij> select * from stu;<br />ID         |STUNAME             |EMAIL<br />---------------------------------------------------------------<br />1          |Tom                 |tom@test.com<br /><br />已选择 1 ?br />ij></div><div>此时也可以在Eclipse中用JavaE序q行数据库访问,需要加载derbyclient.jar包,代码如下<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span> com.db;<br /><br /><span style="color: #0000FF; ">import</span> java.sql.Connection;<br /><span style="color: #0000FF; ">import</span> java.sql.DriverManager;<br /><span style="color: #0000FF; ">import</span> java.sql.Statement;<br /><br /><span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">class</span> ClientDB {<br /><br />    <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> String driver = "org.apache.derby.jdbc.ClientDriver";<br />    <span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> String protocol = "jdbc:derby://localhost:1527/mydb";<br /><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> main(String[] args) {<br />        <span style="color: #0000FF; ">try</span> {<br />            Class.forName(driver).newInstance();<br />            System.out.println("Loaded the appropriate driver");<br />            Connection conn = DriverManager.getConnection(protocol);<br />            Statement stmt = conn.createStatement();<br />            <span style="color: #0000FF; ">for</span> (<span style="color: #0000FF; ">int</span> i = 1; i < 10; i++) {<br />                String sql = "insert into stu(stuname,email) values('user" + i + "','user" + i + "@test.com')";<br />                System.out.println(sql);<br />                stmt.addBatch(sql);<br />            }<br />            stmt.executeBatch();<br />            System.out.println("insert over");<br />            conn.commit();<br /><br />            stmt.close();<br />            conn.close();<br /><br />        } <span style="color: #0000FF; ">catch</span> (Exception e) {<br />            e.printStackTrace();<br />        }<br />    }<br />}</div><div>控制以输出结果ؓ(f)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Loaded the appropriate driver<br />insert into stu(stuname,email) values('user1','user1@test.com')<br />insert into stu(stuname,email) values('user2','user2@test.com')<br />insert into stu(stuname,email) values('user3','user3@test.com')<br />insert into stu(stuname,email) values('user4','user4@test.com')<br />insert into stu(stuname,email) values('user5','user5@test.com')<br />insert into stu(stuname,email) values('user6','user6@test.com')<br />insert into stu(stuname,email) values('user7','user7@test.com')<br />insert into stu(stuname,email) values('user8','user8@test.com')<br />insert into stu(stuname,email) values('user9','user9@test.com')<br />insert over</div></div><div>此时查看数据库内容ؓ(f)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->ij> select * from stu;<br />ID         |STUNAME             |EMAIL<br />---------------------------------------------------------------<br />1          |Tom                 |tom@test.com<br />2          |user1               |user1@test.com<br />3          |user2               |user2@test.com<br />4          |user3               |user3@test.com<br />5          |user4               |user4@test.com<br />6          |user5               |user5@test.com<br />7          |user6               |user6@test.com<br />8          |user7               |user7@test.com<br />9          |user8               |user8@test.com<br />10         |user9               |user9@test.com<br /><br />已选择 10 ?br />ij></div></div><br /><h3>结</h3>l于学习(fn)?jin)JavaDBQ又试?jin)一U嵌入式数据库,在做一些小目或是应用演示时很方便。在?jin)解qJavaDB后,觉得JavaDB也是个不错的选择Q很多操作都做成?jin)批处理方式Q在HSQLDB中也可以自己构造批处理Q在HSQLDB中有个图形界面可以用Q相对直观一些,对于体积来说QHSQLDB好像更小巧点Q他们都支持内存数据库,目前在数据库性能上没有做比较。ȝ来说QJavaDB是个不错的选择Q用v来比较方ѝ此文仅做简单介l,如果希望?jin)解得更多,可参考官Ҏ(gu)http://db.apache.org/derby/manuals/index.html#latest</div><div>有几个不同部分的文Q与SQL相关的部分如创徏删除表的SQL怎么写,可以参考其中的《Derby Reference Manual?br />另外在学?fn)JavaDB里找?jin)一些资料,下面q一我觉得q(sh)错,一q?br />参考资料:(x)<a target="_blank">http://www.codejava.net/java-se/jdbc/connect-to-apache-derby-java-db-via-jdbc</a></div></div></div></div></div><img src ="http://www.tkk7.com/zhouf/aggbug/432256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/zhouf/" target="_blank">ZhouFeng</a> 2017-01-10 10:48 <a href="http://www.tkk7.com/zhouf/articles/432256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat+Eclipse环境下用Jenkins2.38搭徏持箋(hu)集成(CI)环境http://www.tkk7.com/zhouf/articles/432234.htmlZhouFengZhouFengMon, 02 Jan 2017 03:51:00 GMThttp://www.tkk7.com/zhouf/articles/432234.htmlhttp://www.tkk7.com/zhouf/comments/432234.htmlhttp://www.tkk7.com/zhouf/articles/432234.html#Feedback0http://www.tkk7.com/zhouf/comments/commentRss/432234.htmlhttp://www.tkk7.com/zhouf/services/trackbacks/432234.html

1.下蝲安装Jenkins

可以?a target="_blank">http://mirrors.jenkins-ci.org上下载安装包Q也可以选择在官|(https://jenkins.ioQ上下蝲war?http://mirrors.jenkins.io/war-stable/latest/jenkins.war)或是安装?http://mirrors.jenkins-ci.org/windows/jenkins-2.38.zip)Q写q篇文章时最新版本ؓ(f)2.38。如果选择安装包方式,下蝲后安装即可,安装完成后会(x)自动启动览器向|Ҏ(gu)提示操作完成安装
本机下蝲安装包,安装到C:\JenkinsQ如下配|也是基于此目录q行Q下载及(qing)安装q程截图如下

选择Download Jenkins

下拉选择相应的操作系l版本,也可以直接下载war包,本文下蝲Windows版本的安装包Q安装过E指定安装目录即可,安装完成后,?x)自动启动浏览器q行配置

Ҏ(gu)面提示Q在文g中找到密码填?br />
选择插gQ本例选择W二,自己定义插gQ打开W二w的默认选择和推荐插件一P如果不做修改Q就相当于选择推荐插g安装

安装完成后,讄理员̎?br />
保存l束安装

点击开始进入Jenkins界面

2.启动Jenkins

Jenkins默认工作目录?x)在当前用户目录下创?jenkins目录Q也可以通过讄环境变量来修改,例如Q?
set JENKINS_HOME=C:\jenkins
然后重新启动jenkinsQ可以放在与安装目录不同的地?br /> q入安装目录C:\JenkinsQ用命o(h)行方式启?br />
java -jar jenkins.war
默认端口?080Q如果需要指定端口,可以使用如下参数指定Q如指定端口?000
java -jar jenkins.war --httpPort=9000
也可以修改目录下的jenkins.xml配置文gQ将其中的httpPort修改卛_
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

3.部v应用到Jenkins

之前的工E是ZTomcat+Eclipse开发的Q工E不是用Maven理的,后面对工程q行?jin)改造,用Ant~译Q添加了(jin)build.xml文gQ在Ant中需要找到Tomcat目录Qؓ(f)?jin)灵zM点,在系l里d?jin)Tomcat的环境变量CATALINA_HOMEQ以?qing)Ant环境的安装,q是对原有工E的攚w,如果新的工程采用Maven方式的话Q应该会(x)没有q么ȝ(ch)Q附上build.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<project basedir="." default="build" name="xi">
    <property environment="env"/>
    <property name="tomcat.home" value="${env.CATALINA_HOME}" />
    <property name="tomcat.lib" value="${env.CATALINA_HOME}/lib" />
    <property name="web.root" value="${env.CATALINA_HOME}/webapps"/>
    <property name="ant.home" value="${env.ANT_HOME}" />
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.7"/>
    <property name="source" value="1.7"/>
    <property name="webRoot.dir" value="${basedir}/WebContent" />
    <property name="src.dir" value="${basedir}/src" />
    <property name="lib.dir" value="${webRoot.dir}/WEB-INF/lib" />  
    <property name="log.file" value="${tomcat.home}/webapps/log.info"/> 

    <tstamp> 
        <format property="build.time" pattern="yyyy-MM-dd HH:mm:ss" /> 
    </tstamp>


    <path id="prj.classpath">
        <pathelement location="build/classes"/>
        <fileset dir="${tomcat.lib}">  
            <include name="*.jar" />  
        </fileset>
        <fileset dir="${lib.dir}">  
            <include name="*.jar" />  
        </fileset>
    </path>
    <path id="tomcat.classpath">
        <fileset dir="${tomcat.lib}">  
            <include name="*.jar" />  
        </fileset>
        <fileset dir="${tomcat.home}/bin">  
            <include name="*.jar" />  
        </fileset>
    </path>

    <target name="init">
        <echo message="---------- init ----------"></echo>
        <mkdir dir="build/classes"/>
        <copy includeemptydirs="false" todir="build/classes">
            <fileset dir="src">
                <exclude name="**/*.java"/>
            </fileset>
        </copy>
    </target>
    
    <target name="clean">
        <echo message="---------- clean ----------"></echo>
        <delete dir="build/classes"/>
        <delete file="build/${ant.project.name}.war"></delete>
    </target>

    <target name="compile" depends="init">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="build/classes" includeantruntime="false"  encoding="UTF-8">
            <src path="src"/>
            <classpath refid="prj.classpath"/>
        </javac>
        <delete file="build/classes/gen-conf.xml"/>
    </target>

    <target name="build" depends="compile" description="make war">
        <war destfile="build/${ant.project.name}.war" basedir="WebContent" webxml="WebContent/WEB-INF/web.xml">
            <!-- lib dir="${lib.dir}"></lib -->
            <classes dir="${basedir}/build/classes"></classes>
        </war>
    </target>

    <target name="deploy" depends="build" description="deploy to tomcat"> 
        <echo message="----------deploy to tomcat----------"></echo>
        <delete file="${tomcat.home}/webapps/${ant.project.name}.war" /> 
        <delete dir="${tomcat.home}/webapps/${ant.project.name}" /> 
        <copy file="build/${ant.project.name}.war" todir="${tomcat.home}/webapps" /> 
    </target>

    <target name="undeploy" description="deploy to tomcat"> 
        <echo message="---------- undeploy project ----------"></echo>
        <delete file="${tomcat.home}/webapps/${ant.project.name}.war" /> 
        <delete dir="${tomcat.home}/webapps/${ant.project.name}" /> 
    </target> 

    
</project>
q样写是Z(jin)在Jenkins里调用Ant完成~译和部|的工作?br /> 在Jenkins里创建项目,当前选择的是自由目Q写好项目名Uͼ后箋(hu)是寚w目进行配|,如果不希望保留过多的旧构建,可以讄丢弃。另外还需要获取源码的服务器,默认支持CVS和SubversionQ也可以通过插g支持GitQ因当前目托管于SVNQ配|如下图

后面是如何触发的配置Q如下设|ؓ(f)每天6:30q行构徏Q每一个小时检查一下源码,主要是获取到代码后的动作讄

在动作设|里用Windows的批处理方式q行Q原本考虑在服务器上做一个批处理Q由Jenkins调用Q经试需要用l对路径Q不知是不是某个地方没配|好Q后来就改用q种方式Q对服务q行启动停止控制Q对工程q行部v
l测试,此方式可以用Q当前用来解决Tomcat+Eclipse环境下的工程自动构徏问题Q写在这个地方做个记录,如果有机?x),试一下MavenQ看看是不是要简单点

ZhouFeng 2017-01-02 11:51 发表评论
]]>
jQuery打印插gprintPagehttp://www.tkk7.com/zhouf/articles/printpage.htmlZhouFengZhouFengTue, 29 Nov 2016 03:53:00 GMThttp://www.tkk7.com/zhouf/articles/printpage.htmlhttp://www.tkk7.com/zhouf/comments/432017.htmlhttp://www.tkk7.com/zhouf/articles/printpage.html#Feedback0http://www.tkk7.com/zhouf/comments/commentRss/432017.htmlhttp://www.tkk7.com/zhouf/services/trackbacks/432017.html阅读全文

ZhouFeng 2016-11-29 11:53 发表评论
]]>
Tomcat8日志配置为log4j日志pȝhttp://www.tkk7.com/zhouf/articles/Tomcat8-log4j-config.htmlZhouFengZhouFengSat, 30 Apr 2016 11:48:00 GMThttp://www.tkk7.com/zhouf/articles/Tomcat8-log4j-config.htmlhttp://www.tkk7.com/zhouf/comments/430314.htmlhttp://www.tkk7.com/zhouf/articles/Tomcat8-log4j-config.html#Feedback0http://www.tkk7.com/zhouf/comments/commentRss/430314.htmlhttp://www.tkk7.com/zhouf/services/trackbacks/430314.htmlTomcat控制台启动日志是由java.util.logging.Logger实现的,我只是希望能自己定义输出格式Q找?jin)下文Q发现在%CATALINA_HOME%\conf目录下面有个logging.properties文gQ里面有内容ؓ(f)Q?/div>
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
q里的formatter需要通过cL实现Q要是能在这里直接写formatter格式字串好?jin),l箋(hu)研究下吧?/div>

?sh)脑上安装的是Tomcat8Q找?jin)下官网上的文Q有关于使用Log4j作ؓ(f)日志的配|?/div>
http://tomcat.apache.org/tomcat-8.0-doc/logging.html#Using_Log4j
p下了(jin)Q下面是官网的实现步骤,文中描述?CATALINA_HOME%是指Tomcat安装目录

1. 准备日志配置文g
官网上有一个配|文Ӟ先拿来用下,后面Ҏ(gu)自己的需要再慢慢作调_(d)保存?CATALINA_HOME%\lib\log4j.properties
log4j.rootLogger=INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=INFO, HOST-MANAGER

2. 需要下载Log4j的jar?/div>
1.2的版本下载如?/div>
http://logging.apache.org/log4j/1.2/download.html
3. 下蝲Tomcat8的扩展组?/div>
是在下载Tomcat8的那个页?a >http://tomcat.apache.org/download-80.cgiQ下面点有个ExtrasQ里面有两项JULI adapters jar ?JULI log4j jar的下载,下蝲后的两个文g为tomcat-juli.jarQtomcat-juli-adapters.jar
4. 准备和替?/div>
把下载的log4j.jar和tomcat-juli-adapters.jar攑ֈ%CATALINA_HOME%\lib
把下载的tomcat-juli.jar替换?CATALINA_HOME%\bin\tomcat-juli.jar
5. 删除%CATALINA_HOME%\conf\logging.properties文g
6. 重新启动Tomcat

上面是官网l出的操作步骤,l果可行Q只是第一ơ运行时Q控制台什么都没有Q原来日志配|文仉?/div>
log4j.rootLogger=INFO, CATALINA
p出到文g里去?jin),把CONSOLE加上
log4j.rootLogger=INFO, CATALINA,CONSOLE
q里重新启动TomcatQ就可以看到原来的日志信息了(jin)?/div>
到此Q将Tomcat配置为log4j日志pȝ改造结束了(jin)Q要实现自己定义日志格式Q那折腾一下这个log4j.properties?/div>


ZhouFeng 2016-04-30 19:48 发表评论
]]>在Tomcat7中添加外部Contexthttp://www.tkk7.com/zhouf/articles/414152.htmlZhouFengZhouFengTue, 27 May 2014 02:59:00 GMThttp://www.tkk7.com/zhouf/articles/414152.htmlhttp://www.tkk7.com/zhouf/comments/414152.htmlhttp://www.tkk7.com/zhouf/articles/414152.html#Feedback0http://www.tkk7.com/zhouf/comments/commentRss/414152.htmlhttp://www.tkk7.com/zhouf/services/trackbacks/414152.html其一是修改server.xmlQ在<Host>标签中添加context配置Q如?br />
<Context path="/book" docBase="D:\eclipse\workspace\book\WebRoot" />
另一U是在conf\Catalina\localhost目录下添加配|文Ӟ如prj.xmlQ内容如?br />
<?xml version='1.0' encoding='utf-8'?>
<Context 
    
crossContext="true" 
    docBase
="D:\eclipse\workspace\prj\WebRoot"
    path
="/prj">
</Context>
搞定Q第二种的话如果不需要了(jin)Q直接删除文件就是了(jin)Q不用修改server.xml配置文gQ这个我喜欢?br />在官|的文档上没扑ֈQ还是在|上扄Q在些记录一下,以备?img src ="http://www.tkk7.com/zhouf/aggbug/414152.html" width = "1" height = "1" />

ZhouFeng 2014-05-27 10:59 发表评论
]]>
վ֩ģ壺 ޾ƷƬ߹ۿƷĻ| þþþƷ| tsվ| ߹ۿƵ| ѼƵվ| ĻۺϾþ| jzzjzzѹۿƬ| ҹʱ| Ƶ߿| ߹ۿxxxx| ӰԺһҳСƵ߹ۿ| þþ޾Ʒ| һѸ| ˿Ƶ2019| ޾Ʒ߹ۿ| ˳ƵƵ| Ѹ| Ʒþþþþ޾Ʒ| ޾ƷĻ| ҹƷһ߲ŷ| ޾Ʒ۵Ӱ߹ۿ| Ƶ| ͼͼԴۺվ| Ʒϵ߹ۿ| ȫëƬѲ| ŷղ| ˾ƷƵ| þþ޾Ʒ| aձѿ| ۺ| ŮƵƵa| ձ˵ɫwwwһ| jizz| ҹ1000| þþƷһԡ| 2019Ļ߹ۿ| þù޾ƷӰԺ| һësuvÿĹվ| ձһvr| պƷר| ˊ]Ƭѹۿ|