??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色无码专区一区,亚洲国产成人片在线观看无码,亚洲精品天堂在线观看http://m.tkk7.com/zhouf/category/45699.htmlzh-cnSat, 06 May 2017 02:07:42 GMTSat, 06 May 2017 02:07:42 GMT60在webapp中用嵌入式数据库hsqldbhttp://m.tkk7.com/zhouf/articles/432477.htmlZhouFengZhouFengMon, 24 Apr 2017 14:23:00 GMThttp://m.tkk7.com/zhouf/articles/432477.htmlhttp://m.tkk7.com/zhouf/comments/432477.htmlhttp://m.tkk7.com/zhouf/articles/432477.html#Feedback0http://m.tkk7.com/zhouf/comments/commentRss/432477.htmlhttp://m.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方便启动数据库,可以写一个批处理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而数据库名ؓmycmsdb

3.使用Servlet启动数据?/div>
可以创徏一个自启动ServletQ用于启动数据库Q这U方式可以用客L工具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://m.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://m.tkk7.com/zhouf/articles/432476.html</guid><wfw:comment>http://m.tkk7.com/zhouf/comments/432476.html</wfw:comment><comments>http://m.tkk7.com/zhouf/articles/432476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zhouf/comments/commentRss/432476.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhouf/services/trackbacks/432476.html</trackback:ping><description><![CDATA[用过HSQLDB一D|_其作Z个小型数据库Q很是小巧,jar包也?M多,ȝ虽小Q五脏俱全。对于一此网站系l或是小型的应用pȝQ应该够满求了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核心的jar?br />sample:一些配|的模板<br /><br />数据库启?br />HSQLDBq行分ؓ三种模式Q分别ؓ内存模式Q进E模式,和服务器模式?br />在内存模式下Q所有的数据都将在内存中完成Q如果程序退出,则相应的数据也将同时被销毁。连接JDBC的实例ؓQjdbc:hsqldb:mem:dbname<br />在进E模式下Q是直接以文件方式进行操作,所有文件均写入文gQ关闭数据库后数据可以保留,q种模式下不能接受其他程序访?br />服务器模式,常用Q又分ؓ三种Q即Servet,WebServer,ServletQ详见官Ҏ(gu)档,服务器模式单独启动一个JVM用于提供数据库服务,q开放连接端口,其他E序可以通过jdbc或客Lq接Q这也是在开发和调试中常用的一U方式,在上U运行后Q可采用q程模式<br />以Server方式启动服务?br />修改bin/runServer.batQ另存ؓ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名ؓ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://m.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说明数据库已经启动好了Qƈ开启了监听端口9001Q现在可以通过客户端程序连接了<br />在bin目录下,有一个runManager.bat和一个runManagerSwing.batQ这两个批处理都可以打开自带的客LE序Q只是界面风格有所不同QrunManager要简z些Q下面介l一下runManagerSwing的用,双击打开后,需要填写连接信息,当然也可以在命o行里通过参数的方式进行连接,在弹出对话框里输入连接信?br /><img src="http://m.tkk7.com/images/blogjava_net/zhouf/runManagerSwingLogin.png" width="350" height="221" alt="" /><br />mybook是ؓ当前配置取的名字QURL里添加上bookdbQ如果不?001端口的话Q还需要添加端口,?/localhost:9001/bookdbQ登录后Q就可以q入到管理界面了<br /><img src="http://m.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<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()初始化数据,可以在理界面中看到数据了Q再q行java可以d数据QJDBCq接没有问题Q记得一定要在工E里引用lib/hsqldb.jar?br />此时在data目录下有很多book开头的文gQ只是后~有所不同Q有临时文gQ日志文Ӟ属性文件以及脚本文件等Q如果运行了shutdown命oQ则其他文g会自动清理,仅保留properties和script文gQ如果要带走数据库,把这两个文g带走好了?br />如果不希望每ơ打开理界面都弹出对话框要求输入内容Q可以在命o行里d参数Q拷贝一份bin/runManagerSwing.batq修改ؓ如下内容<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>另存为myBookManager.batQ下ơ直接运行这个批处理可能直接连接到数据库服务器Q不用再弹出q接对话框了Q前提是服务器正在运行中Q如果运行了shutdown关闭了服务器Q则需要重新启动服务器q行q接?br />xQ基本的hsqldb的用就完成了,文档里还有其它更多的配置和连接方式,详细情况请参阅doc目录下的文档?br />如果需要把hsqldb嵌入到webapp中运行,不用单独启动服务器,请关注后l文档,E后整理好再发布。自q了一下午才整理好q一,看来得提高效率了Q如果这文档能对大家所有帮助,那就太好了?img src ="http://m.tkk7.com/zhouf/aggbug/432476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhouf/" target="_blank">ZhouFeng</a> 2017-04-23 16:41 <a href="http://m.tkk7.com/zhouf/articles/432476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaDB数据库用笔?/title><link>http://m.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://m.tkk7.com/zhouf/articles/432256.html</guid><wfw:comment>http://m.tkk7.com/zhouf/comments/432256.html</wfw:comment><comments>http://m.tkk7.com/zhouf/articles/432256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/zhouf/comments/commentRss/432256.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/zhouf/services/trackbacks/432256.html</trackback:ping><description><![CDATA[<div>在做一些小的应用系l时Q用q嵌入式数据库,使用qHSQLDBQ这个比较小巧,在做了几个应用之后觉得挺好用的,因ؓ数据量不多,也能够满求,也就在嵌入式数据库这条\上越走越q了?/div><div>在JAVA里也有一个嵌入式数据库,也想试着用一下,便有了下面这日志。在安装jdk的时候会提示安装一个数据库Q如果勾选的话,则会在安装Java嵌入式数据库JavaDBQ在JAVA_HOME目录下多Z个db的目录(在jdk6版本里目录名为JavaDBQ,里面是与数据库有关的文件了Q如果安装jdk时没有选择安装Q可以在官网<a target="_blank">http://db.apache.org/derby/derby_downloads.html</a>上下载解压即可,l过了一D|间的摸烦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行里用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后缀的文件ؓLinuxq_下运行的脚本Qbat文g为Windowsq_使用的批处理</div><div>dblook:用于查看数据库的基本信息及DDL语句</div><div>ij:命o行客LE序Q提供与数据库的交互</div><div>NetworkServerControl:提供|络服务Q主要被startNetworkServer和stopNetworkServer调用</div><div>startNetworkServer:启动|络数据库模式,开启监?/div><div>stopNetworkServer:关闭|络数据库模式,停止监听</div><div>sysinfo:查看当前pȝ信息Q可用于数据库是否正确安装</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不存在,则创建,数据库文件存放位|ؓ当前目录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行方式,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如果此时再开启一个新的窗口,打开当前数据库,会报错,如果希望有多个客Lq接Q如开发阶D,一边在Eclipse里运行程序,一边在命o行里查看数据记录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 />-- 源数据库为:mydb<br />-- q接 URL 为: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>控制以输出结果ؓ<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>此时查看数据库内容ؓ<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于学习了JavaDBQ又试了一U嵌入式数据库,在做一些小目或是应用演示时很方便。在了解qJavaDB后,觉得JavaDB也是个不错的选择Q很多操作都做成了批处理方式Q在HSQLDB中也可以自己构造批处理Q在HSQLDB中有个图形界面可以用Q相对直观一些,对于体积来说QHSQLDB好像更小巧点Q他们都支持内存数据库,目前在数据库性能上没有做比较。ȝ来说QJavaDB是个不错的选择Q用v来比较方ѝ此文仅做简单介l,如果希望了解得更多,可参考官Ҏ(gu)档http://db.apache.org/derby/manuals/index.html#latest</div><div>有几个不同部分的文档Q与SQL相关的部分如创徏删除表的SQL怎么写,可以参考其中的《Derby Reference Manual?br />另外在学习JavaDB里找了一些资料,下面q一我觉得q不错,一q?br />参考资料:<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://m.tkk7.com/zhouf/aggbug/432256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/zhouf/" target="_blank">ZhouFeng</a> 2017-01-10 10:48 <a href="http://m.tkk7.com/zhouf/articles/432256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初试MyBatishttp://m.tkk7.com/zhouf/articles/383711.htmlZhouFengZhouFengSun, 22 Jul 2012 04:48:00 GMThttp://m.tkk7.com/zhouf/articles/383711.htmlhttp://m.tkk7.com/zhouf/comments/383711.htmlhttp://m.tkk7.com/zhouf/articles/383711.html#Feedback0http://m.tkk7.com/zhouf/comments/commentRss/383711.htmlhttp://m.tkk7.com/zhouf/services/trackbacks/383711.html在www.mybatis.org上可以找C载链接,我下载的是mybatis-3.1.1q个版本Q下载一个zip包,里面包含有主要的库文件mybatis-3.1.1.jarQ还有一些引用的jarQ一个PDF说明文档Q这个说明文档提供的是E文版Q可以在|上扑ֈ相应的中文版Q下载完成后Q就开始我的操作了?br />在MyEclipse里创Z一个java工程Q本来是打算在Web中用的Q没有创建Web工程Q只是想试一下MyBatisq东东,java工程可以了?br />创徏时引入MyBatis库和数据库驱动库Q创Z个空的工E?br />
准备好数据库Q此处用MySQL做练习,创徏一个bbs数据库,创徏一个tb_users表,l构如下
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| userid   | int(11)  | NO   | PRI |         |       |
| username | char(20) | NO   |     |         |       |
+----------+----------+------+-----+---------+-------+

创徏一个Userc,与数据表对应
package com.cuit.prj.domain;

public class User {
    
private int userid;
    
private String userName;
    
    
public User() {
        
super();
    }
    
public User(int userid, String userName) {
        
super();
        
this.userid = userid;
        
this.userName = userName;
    }
    
public int getUserid() {
        
return userid;
    }
    
public void setUserid(int userid) {
        
this.userid = userid;
    }
    
public String getUserName() {
        
return userName;
    }
    
public void setUserName(String userName) {
        
this.userName = userName;
    }
}
再创Z个UserMapper接口Q里面提供了对User的相x?br />
package com.cuit.prj.presistence;

import com.cuit.prj.domain.User;

public interface UserMapper {
    User selectUser(
int userid);
    
void insertUser(User user);
    
void updateUser(User user);
    
void deleteUser(int userid);
}
再创Z个UserMapper.xmlQ与UserMapper.java对应的一个配|文Ӟl本例测试,其中的id要和接口中的Ҏ(gu)名一?br />
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"
>
<mapper namespace="com.cuit.prj.presistence.UserMapper">
    
<select id="selectUser" parameterType="int" resultType="com.cuit.prj.domain.User">
        select *
        from tb_users where userid = #{userid}
    
</select>

    
<insert id="insertUser" parameterType="com.cuit.prj.domain.User">
        insert into tb_users(userid,username) values (#{userid},#{userName})
    
</insert>

    
<update id="updateUser" parameterType="com.cuit.prj.domain.User">
        update tb_users set username = #{userName} where userid = #{userid}
    
</update>

    
<delete id="deleteUser" parameterType="int">
        delete from tb_users where userid = #{userid}
    
</delete>
</mapper>
在src下面创徏MyBatis配置文gmybatis-conf.xmlQ配|文件名没有Ҏ(gu)规定Q因为在后面的代码里需要指定文件名
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"
>
<configuration>
    
<environments default="development">
        
<environment id="development">
            
<transactionManager type="JDBC" />
            
<dataSource type="POOLED">
                
<property name="driver" value="com.mysql.jdbc.Driver" />
                
<property name="url" value="jdbc:mysql://localhost/bbs" />
                
<property name="username" value="root" />
                
<property name="password" value="1233" />
            
</dataSource>
        
</environment>
    
</environments>
    
<mappers>
        
<mapper resource="com/cuit/prj/presistence/UserMapper.xml" />
    
</mappers>
</configuration>
创徏一个获取连接的SessionFactory的类
package com.cuit.prj.sessionfactory;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SessionFactory {
    
public static SqlSession getSession(){
        SqlSession session 
= null;
        String resource 
= "mybatis-conf.xml";
        
try {
            Reader reader 
= Resources.getResourceAsReader(resource);
            SqlSessionFactory sqlMapper 
= new SqlSessionFactoryBuilder().build(reader);
            session 
= sqlMapper.openSession();
        } 
catch (IOException e) {
            e.printStackTrace();
        }
        
return session;
    }
}
做好上述准备后,写一个主Ҏ(gu)调用试Q如?br />
package com.cuit.prj;

import org.apache.ibatis.session.SqlSession;
import com.cuit.prj.domain.User;
import com.cuit.prj.presistence.UserMapper;
import com.cuit.prj.sessionfactory.SessionFactory;

public class AppTest {
    public static void main(String[] args) {
        System.out.println(
"Hello");
        SqlSession session 
= SessionFactory.getSession();
        
try {
            UserMapper mapper 
= session.getMapper(UserMapper.class);

            User user 
= mapper.selectUser(2);
            System.out.println(user.getUserName());
        } 
finally {
            session.close();
        }
    }
}
在数据库中添加两条记录,q提?br />
+--------+----------+
| userid | username |
+--------+----------+
| 1      | user1    |
| 2      | user2    |
+--------+----------+
接下来就可以q行看看l果了。输出如下:
Hello
user2
l于跑v来了Q在处理了一pd的Exception之后看到的结果,上面的测试只是做了一个读取数据的操作Q如果有新增或修Ҏ(gu)据,需要调用session.commit()操作?br />大概结一下,用了MyBatis感觉q是很不错的Q把SQL语句和JAVA代码分离开Q喜Ƣ自己掌控SQL语句的h们可能会喜欢MyBatis一些,不像Hibernate那样可以完全不用写SQL语句。只是配|文件和接口写v来还是有些麻烦,q有POJOcȝ生成Q工作量q是不小哇,|上扑ֈ一个生成工P下次研究一下再补充上来?/div>

ZhouFeng 2012-07-22 12:48 发表评论
]]>HSQLDB外键使用http://m.tkk7.com/zhouf/articles/367357.htmlZhouFengZhouFengTue, 27 Dec 2011 09:59:00 GMThttp://m.tkk7.com/zhouf/articles/367357.htmlhttp://m.tkk7.com/zhouf/comments/367357.htmlhttp://m.tkk7.com/zhouf/articles/367357.html#Feedback0http://m.tkk7.com/zhouf/comments/commentRss/367357.htmlhttp://m.tkk7.com/zhouf/services/trackbacks/367357.html在此用三个表的创Zؓ例记录一下外键的写法
create table notice(
    id 
integer generated by default as primary key,
    title 
varchar(30)
)

create table tbuser(
    userid 
varchar(20primary key,
    username 
varchar(30)
)

create table noticecheck(
    id 
integer references notice(id) on delete cascade,
    userid 
varchar(20references tbuser(userid) on delete cascade,
    checktime 
timestamp default current_timestamp,
    
unique(id,userid)
)
另外noticecheck也可以用如下的方式写语?br />
create table noticecheck(
    id 
integer,
    userid 
varchar(20),
    checktime 
timestamp default current_timestamp,
    
unique(id,userid),
    
constraint noticecheck_fk_1 foreign key(id) references notice(id) on delete cascade,
    
constraint noticecheck_fk_2 foreign key(userid) references tbuser(userid) on delete cascade
)
好啦Q就q样Q官Ҏ(gu)l的文档全E文的Q费劌Ӏ网上也有q方面的资料Q看来用HSQLDB的还不多Q记在这里了先:Q?img src ="http://m.tkk7.com/zhouf/aggbug/367357.html" width = "1" height = "1" />

ZhouFeng 2011-12-27 17:59 发表评论
]]>
Oracle10g数据库导入导出(跨字W集Q?http://m.tkk7.com/zhouf/articles/264871.htmlZhouFengZhouFengSun, 25 Jul 2010 03:53:00 GMThttp://m.tkk7.com/zhouf/articles/264871.htmlhttp://m.tkk7.com/zhouf/comments/264871.htmlhttp://m.tkk7.com/zhouf/articles/264871.html#Feedback0http://m.tkk7.com/zhouf/comments/commentRss/264871.htmlhttp://m.tkk7.com/zhouf/services/trackbacks/264871.html #!/bin/bash
su - oracle -c "exp system/fakepass tables=$1 file=/data/$1.dmp"

[root@web oracle8i]# dmp album

Export: Release 10.1.0.3.0 - Production on 星期一 2?5 01:56:55 2007

Copyright (c) 1982, 2004, Oracle.  All rights reserved.


q接? Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
已导?ZHS16CGB231280 字符集和 AL16UTF16 NCHAR 字符?br /> 服务器?ZHS16GBK 字符?(可能的字W集转换)

卛_导出指定的表通过常规路径...
. . 正在导出?nbsp;                          ALBUM导出?nbsp;        590 ?br /> EXP-00091: 正在导出有问题的l计信息?br /> EXP-00091: 正在导出有问题的l计信息?br /> EXP-00091: 正在导出有问题的l计信息?br /> 导出成功l止, 但出现警告?br /> 二导?br /> ?Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options 断开
[oracle@dev ~]$ imp system/fit2007 file=blogcat.dmp tables=blogcat

Import: Release 10.2.0.1.0 - Production on 星期一 2?5 01:44:39 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


q接? Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

l由常规路径?EXPORT:V10.01.00 创徏的导出文?br /> 已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导?br /> 导入服务器?AL32UTF8 字符?(可能的字W集转换)
导出客户Z?ZHS16CGB231280 字符?(可能的字W集转换)
. 正在?SYSTEM 的对象导入到 SYSTEM
. 正在?SYSTEM 的对象导入到 SYSTEM
. . 正在导入?nbsp;                      "BLOGCAT"导入?nbsp;       1938 ?br /> 成功l止导入, 没有出现警告?br /> [oracle@dev ~]$ imp system/topsecret file=blogcat.dmp tables=blogcat
三ȝ
   2个oracle10g服务器,导出的在北京Q?版本10.1.0.3.0Q?使用 ZHS16GBK 字符集?br />   导入的在宝鸡Q时开发测试用Q版?10.2.0.1.0QAL32UTF8 字符集?br />   主要问题?个服务器字符集不同,解决的关键是Q在导入前,讄导入机器的NLS_LANG 与导出机器的NLS_LANG相同QؓSimplified Chinese_china.ZHS16GBK
  全部导出的dmp文g?.8GQ学校服务器带宽有限Q所以采用了导出常用数据表的最新数据方法?br />
?http://www.zhuoda.org/hofman/78332.html


ZhouFeng 2010-07-25 11:53 发表评论
]]>
解决从JBOSSq移到TOMCAT下的MYSQLq问题http://m.tkk7.com/zhouf/articles/278085.htmlZhouFengZhouFengTue, 26 May 2009 13:10:00 GMThttp://m.tkk7.com/zhouf/articles/278085.htmlhttp://m.tkk7.com/zhouf/comments/278085.htmlhttp://m.tkk7.com/zhouf/articles/278085.html#Feedback0http://m.tkk7.com/zhouf/comments/commentRss/278085.htmlhttp://m.tkk7.com/zhouf/services/trackbacks/278085.html 数据?MYSQL5.0
数据库编?UTF-8
所有页面编码都l一用UTF-8
在JBOSS下配|数据源,即修改mysql-ds.xml
<?xml version="1.0" encoding="UTF-8"?>

<datasources>
  
<local-tx-datasource>
    
<jndi-name>app</jndi-name>
    
<connection-url>jdbc:mysql://localhost/app</connection-url>
    
<driver-class>com.mysql.jdbc.Driver</driver-class>
    
<user-name>user</user-name>
    
<password>pwd</password>
  
    
<metadata>
       
<type-mapping>mySQL</type-mapping>
    
</metadata>
  
</local-tx-datasource>
</datasources>
当把应用q移到TOMCAT6下时,配置好TOMCAT下的数据?修改contex.xml文g)
<?xml version='1.0' encoding='utf-8'?>

<!-- The contents of this file will be loaded for each web application -->
<Context>

<Resource name="jdbc/app" 
        auth
="Container"
        type
="javax.sql.DataSource"
        driverClassName
="com.mysql.jdbc.Driver"
        url
="jdbc:mysql://localhost/app"
        username
="user"
        password
="pwd"
        removeAbandoned
="true"
        removeAbandonedTimeout
="60"
        logAbandoned
="true"
        maxActive
="700"
        maxIdle
="30"
        maxWait
="10000" />

    
<!-- Default set of monitored resources -->
    
<WatchedResource>WEB-INF/web.xml</WatchedResource>

</Context>
因JBOSS和TOMCAT获取数据源连接的方式不同,又修改了获取q接的代?启动之后是可以运?面d数据正常,但写入数据库?出现了ؕ?我尝试着修改写入数据库的SQL语句的编?但不怎么修改都不能正常显C?后来试着通过URL直接修改q接的编码试?于是把TOMCAT数据源配|里的URL指定为UTF-8的字W集
url="jdbc:mysql://localhost/app?useUnicode=true&amp;characterEncoding=utf-8"
q里再重新启动TOMCAT,q行?数据写入正常,q个困扰我多天的问题l于解决?之前没有惛_q样的问?以ؓJBOSS里也是用的TOMCAT,在JBOSS里配|的数据源都没有在URL里指定编?没想到单独用TOMCAT时会出现q样的问?把今天的处理在这里作个记?以便以后备查

结:
当用MYSQL作数据库?应用程序从JBOSSq移到TOMCAT,如果存在q的问?可以考虑修改URL指定字符?br />


ZhouFeng 2009-05-26 21:10 发表评论
]]>
MySQL优化l验http://m.tkk7.com/zhouf/articles/254124.htmlZhouFengZhouFengTue, 10 Feb 2009 12:48:00 GMThttp://m.tkk7.com/zhouf/articles/254124.htmlhttp://m.tkk7.com/zhouf/comments/254124.htmlhttp://m.tkk7.com/zhouf/articles/254124.html#Feedback0http://m.tkk7.com/zhouf/comments/commentRss/254124.htmlhttp://m.tkk7.com/zhouf/services/trackbacks/254124.html
安装好mysql后,配制文g应该?usr/local/mysql/share/mysql目录中,配制文g有几个,有my- huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的|站和不同配制的服务器环境,当然需要有不同的配制文件了?br />
一般的情况下,my-medium.cnfq个配制文gp满我们的大多需要;一般我们会把配|文件拷贝到/etc/my.cnf 只需要修改这个配|文件就可以了,使用mysqladmin variables extended-status –u root –p 可以看到目前的参敎ͼ有3个配|参数是最重要的,即key_buffer_size,query_cache_size,table_cache?br />
key_buffer_size只对MyISAM表v作用Q?br />
key_buffer_size指定索引~冲区的大小Q它军_索引处理的速度Q尤其是索引ȝ速度。一般我们设?6M,实际上稍微大一点的站点 q个数字是远q不够的Q通过查状态值Key_read_requests和Key_reads,可以知道key_buffer_size讄是否合理。比例key_reads / key_read_requests应该可能的低,臛_?:100Q?:1000更好Q上q状态值可以用SHOW STATUS LIKE ‘key_read%’获得Q?或者如果你装了phpmyadmin 可以通过服务器运行状态看?W者推荐用phpmyadmin理mysqlQ以下的状态值都是本人通过phpmyadmin获得的实例分?

q个服务器已l运行了20?br />
key_buffer_size – 128M 
key_read_requests – 650759289 
key_reads - 79112
比例接近1:8000 健康状况非常?br />
另外一个估计key_buffer_size的办法 把你|站数据库的每个表的索引所占空间大加h看看以此服务器ؓ?比较大的几个表烦引加h大概125M q个数字会随着表变大而变大?br />
?.0.1开始,MySQL提供了查询缓冲机制。用查询缓ԌMySQLSELECT语句和查询结果存攑֜~冲ZQ今后对于同LSELECT语句Q区分大写Q,直接从~冲Zdl果。根据MySQL用户手册Q用查询缓冲最多可以达?38%的效率?br />
通过调节以下几个参数可以知道query_cache_size讄得是否合?br />
Qcache inserts 
Qcache hits 
Qcache lowmem prunes 
Qcache free blocks 
Qcache total blocks
Qcache_lowmem_prunes的值非常大Q则表明l常出现~冲不够的情?同时Qcache_hits的值非常大Q则表明查询~冲使用非常频繁Q此旉要增加缓冲大Qcache_hits的g大,则表明你的查询重复率很低Q这U情况下使用查询~冲反而会影响效率Q那么可以考虑不用查询~冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不用查询缓册Ӏ?br />
Qcache_free_blocksQ如果该值非常大Q则表明~冲Z片很多query_cache_type指定是否使用查询~冲

我设|?
query_cache_size = 32M 
query_cache_type= 1
得到如下状态?
Qcache queries in cache 12737 表明目前~存的条?nbsp;
Qcache inserts 20649006 
Qcache hits 79060095  看来重复查询率还挺高?nbsp;
Qcache lowmem prunes 617913 有这么多ơ出现缓存过低的情况 
Qcache not cached 189896    
Qcache free memory 18573912  目前剩余~存I间 
Qcache free blocks 5328 q个数字g有点大 片不少 
Qcache total blocks 30953
如果内存允许32M应该要往上加?br />
table_cache指定表高速缓存的大小。每当MySQL讉K一个表Ӟ如果在表~冲Zq有I间Q该表就被打开q放入其中,q样可以更快地访问表内容。通过查峰值时间的状态值Open_tables和Opened_tablesQ可以决定是否需要增加table_cache的倹{如果你发现open_tables{于table_cacheQƈ且opened_tables在不断增长,那么你就需要增加table_cache的gQ上q状态值可以用SHOW STATUS LIKE ‘Open%tables’获得Q。注意,不能盲目地把table_cache讄成很大的倹{如果设|得太高Q可能会造成文g描述W不I从而造成性能不稳定或者连接失败?br />
对于?G内存的机器,推荐值是128Q?56?br />
W者设|table_cache = 256

得到以下状?
Open tables 256 
Opened tables 9046
虽然open_tables已经{于table_cacheQ但是相对于服务器运行时间来?已经q行?0天,opened_tables的g非常低。因此,增加table_cache的值应该用处不大。如果运行了6个小时就出现上述?那就要考虑增大table_cache?br />
如果你不需要记?q制log 把q个功能xQ注意关掉以后就不能恢复出问题前的数据了Q需要?zhn)手动备䆾Q二q制日志包含所有更新数据的语句Q其目的是在恢复数据库时用它来把数据可能恢复到最后的状态。另外,如果做同步复? Replication )的话Q也需要用二q制日志传送修Ҏ(gu)c?br />
log_bin指定日志文gQ如果不提供文g名,MySQL自׃生缺省文件名。MySQL会在文g名后面自动添加数字引Q每ơ启动服务时Q都会重新生成一个新的二q制文g。此外,使用log-bin-index可以指定索引文gQ用binlog-do-db可以指定记录的数据库Q用binlog-ignore-db可以指定不记录的数据库。注意的是:binlog-do-db和binlog-ignore-db一ơ只指定一个数据库Q指定多个数据库需要多个语句。而且QMySQL会将所有的数据库名U改成小写,在指定数据库时必d部用小写名字,否则不会起作用?br />
xq个功能只需要在他前面加??br />
#log-bin
开启慢查询日志( slow query log ) 慢查询日志对于跟t有问题的查询非常有用。它记录所有查qlong_query_time的查询,如果需要,q可以记录不使用索引的记录。下面是一个慢查询日志的例子:

开启慢查询日志Q需要设|参数l(f)og_slow_queries、long_query_times、log-queries-not-using-indexes?br />
log_slow_queries指定日志文gQ如果不提供文g名,MySQL自׃生缺省文件名。long_query_times指定慢查询的阈|~省?0U。log-queries-not-using-indexes?.1.0以后引入的参敎ͼ它指C录不使用索引的查询。笔者设|long_query_time=10

W者设|?
sort_buffer_size = 1M 
max_connections=120 
wait_timeout =120 
back_log=100 
read_buffer_size = 1M 
thread_cache=32 
interactive_timeout=120 
thread_concurrency = 4
参数说明:

back_log

要求MySQL能有的连接数量。当主要MySQLU程在一个很短时间内得到非常多的q接hQ这pv作用Q然后主U程׃旉(管很短) 查连接ƈ且启动一个新U程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短旉内有很多q接Q你需要增加它Q换句话_q值对到来的TCP/IPq接的侦听队列的大小。你的操作系l在q个队列大小上有它自q限制?Unix listen(2)pȝ调用的手册页应该有更多的l节。检查你的OS文档扑ևq个变量的最大倹{试图设定back_log高于你的操作pȝ的限制将是无效的?br />
max_connections

q发q接数目最大,120 过q个值就会自动恢复,Z问题能自动解?br />
thread_cache

没找到具体说明,不过讄?2?20天才创徏?00多个U程 而以前一天就创徏了上千个U程 所以还是有用的

thread_concurrency
#讄Z的cpu数目x2,例如Q只有一个cpu,那么thread_concurrency=2 
#?个cpu,那么thread_concurrency=4 
skip-innodb 
#Linnodb支持
代码:
# Example MySQL config file for medium systems. 

# This is for a system with little memory (32M - 64M) where MySQL plays 
# an important part, or systems up to 128M where MySQL is used together with 
# other programs (such as a web server) 

# You can copy this file to 
# /etc/my.cnf to set global options, 
# mysql-data-dir/my.cnf to set server-specific options (in this 
# installation this directory is /var/lib/mysql) or 
# ~/.my.cnf to set user-specific options. 

# In this file, you can use all long options that a program supports. 
# If you want to know which options a program supports, run the program 
# with the "--help" option. 


# The following options will be passed to all MySQL clients 
[client] 
#password = your_password 
port = 3306 
socket = /tmp/mysql.sock 
#socket = /var/lib/mysql/mysql.sock 
# Here follows entries for some specific programs 


# The MySQL server 
[mysqld] 
port = 3306 
socket = /tmp/mysql.sock 
#socket = /var/lib/mysql/mysql.sock 
skip-locking 
key_buffer = 128M 
max_allowed_packet = 1M 
table_cache = 256 
sort_buffer_size = 1M 
net_buffer_length = 16K 
myisam_sort_buffer_size = 1M 
max_connections=120 
#addnew config 
wait_timeout =120 
back_log=100 
read_buffer_size = 1M 
thread_cache=32 
skip-innodb 
skip-bdb 
skip-name-resolve 
join_buffer_size=512k 
query_cache_size = 32M 
interactive_timeout=120 
long_query_time=10 
log_slow_queries= /usr/local/mysql4/logs/slow_query.log 
query_cache_type= 1 
# Try number of CPU's*2 for thread_concurrency 
thread_concurrency = 4 


#end new config 
# Don't listen on a TCP/IP port at all. This can be a security enhancement, 
# if all processes that need to connect to mysqld run on the same host. 
# All interaction with mysqld must be made via Unix sockets or named pipes. 
# Note that using this option without enabling named pipes on Windows 
# (via the "enable-named-pipe" option) will render mysqld useless! 

#skip-networking 


# Replication Master Server (default) 
# binary logging is required for replication 
#log-bin 


# required unique id between 1 and 2^32 - 1 
# defaults to 1 if master-host is not set 
# but will not function as a master if omitted 
server-id = 1 


# Replication Slave (comment out master section to use this) 

# To configure this host as a replication slave, you can choose between 
# two methods : 

# 1) Use the CHANGE MASTER TO command (fully described in our manual) - 
# the syntax is: 

# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=, 
# MASTER_USER=, MASTER_PASSWORD= ; 

# where you replace , , by quoted strings and 
# by the master's port number (3306 by default). 

# Example: 

# CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, 
# MASTER_USER='joe', MASTER_PASSWORD='secret'; 

# OR 

# 2) Set the variables below. However, in case you choose this method, then 
# start replication for the first time (even unsuccessfully, for example 
# if you mistyped the password in master-password and the slave fails to 
# connect), the slave will create a master.info file, and any later 
# change in this file to the variables' values below will be ignored and 
# overridden by the content of the master.info file, unless you shutdown 
# the slave server, delete master.info and restart the slaver server. 
# For that reason, you may want to leave the lines below untouched 
# (commented) and instead use CHANGE MASTER TO (see above) 

# required unique id between 2 and 2^32 - 1 
# (and different from the master) 
# defaults to 2 if master-host is set 
# but will not function as a slave if omitted 
#server-id = 2 

# The replication master for this slave - required 
#master-host = 

# The username the slave will use for authentication when connecting 
# to the master - required 
#master-user = 

# The password the slave will authenticate with when connecting to 
# the master - required 
#master-password = 

# The port the master is listening on. 
# optional - defaults to 3306 
#master-port = 

# binary logging - not required for slaves, but recommended 
#log-bin 


# Point the following paths to different dedicated disks 
#tmpdir = /tmp/ 
#log-update = /path-to-dedicated-directory/hostname 


# Uncomment the following if you are using BDB tables 
#bdb_cache_size = 4M 
#bdb_max_lock = 10000 


# Uncomment the following if you are using InnoDB tables 
#innodb_data_home_dir = /var/lib/mysql/ 
#innodb_data_file_path = ibdata1:10M:autoextend 
#innodb_log_group_home_dir = /var/lib/mysql/ 
#innodb_log_arch_dir = /var/lib/mysql/ 
# You can set .._buffer_pool_size up to 50 - 80 % 
# of RAM but beware of setting memory usage too high 
#innodb_buffer_pool_size = 16M 
#innodb_additional_mem_pool_size = 2M 
# Set .._log_file_size to 25 % of buffer pool size 
#innodb_log_file_size = 5M 
#innodb_log_buffer_size = 8M 
#innodb_flush_log_at_trx_commit = 1 
#innodb_lock_wait_timeout = 50 


[mysqldump] 
quick 
max_allowed_packet = 16M 


[mysql] 
no-auto-rehash 
# Remove the next comment character if you are not familiar with SQL 
#safe-updates 


[isamchk] 
key_buffer = 20M 
sort_buffer_size = 20M 
read_buffer = 2M 
write_buffer = 2M 


[myisamchk] 
key_buffer = 20M 
sort_buffer_size = 20M 
read_buffer = 2M 
write_buffer = 2M 


[mysqlhotcopy] 
interactive-timeout
补充

优化table_cachetable_cache指定表高速缓存的大小。每当MySQL讉K一个表Ӟ如果在表~冲Zq有I间Q该表就被打开q放入其中,q样可以更快地访问表内容。通过查峰值时间的状态值Open_tables和Opened_tablesQ可以决定是否需要增?table_cache的倹{如果你发现open_tables{于table_cacheQƈ且opened_tables在不断增长,那么你就需要增加table_cache的gQ上q状态值可以用SHOW STATUS LIKE ‘Open%tables’获得Q。注意,不能盲目地把table_cache讄成很大的倹{如果设|得太高Q可能会造成文g描述W不I从而造成性能不稳定或者连接失败。对于有1G内存的机器,推荐值是128Q?56?br />
案例1Q该案例来自一个不是特别繁忙的服务器table_cache – 512open_tables – 103opened_tables – 1273uptime – 4021421 (measured in seconds)该案例中table_cacheg讄得太高了。在峰值时_打开表的数目比table_cache要少得多?br />
案例2Q该案例来自一台开发服务器。table_cache – 64open_tables – 64opened-tables – 431uptime – 1662790 (measured in seconds)虽然open_tables已经{于table_cacheQ但是相对于服务器运行时间来_opened_tables的g非常低。因此,增加table_cache的值应该用处不大。案?Q该案例来自一个upderperforming的服务器table_cache – 64open_tables – 64opened_tables – 22423uptime – 19538该案例中table_cache讄得太低了。虽然运行时间不?时Qopen_tables辑ֈ了最大|opened_tables的g非常高。这样就需要增加table_cache的倹{优化key_buffer_sizekey_buffer_size指定索引~冲区的大小Q它军_索引处理的速度Q尤其是索引ȝ速度。通过查状态值Key_read_requests和Key_readsQ可以知道key_buffer_size 讄是否合理。比例key_reads / key_read_requests应该可能的低,臛_?:100Q?:1000更好Q上q状态值可以用SHOW STATUS LIKE ‘key_read%’获得Q。key_buffer_size只对MyISAM表v作用。即使你不用MyISAM表,但是内部的时磁盘表?MyISAM表,也要使用该倹{可以用检查状态值created_tmp_disk_tables得知详情。对?G内存的机器,如果不?MyISAM表,推荐值是16MQ?-64MQ?br />
案例1Q健L况key_buffer_size – 402649088 (384M)key_read_requests – 597579931key_reads - 56188案例2Q警报状态key_buffer_size – 16777216 (16M)key_read_requests – 597579931key_reads - 53832731案例1中比例低?:10000Q是健康的情况;案例2中比例达?:11Q警报已l拉响?br />
本文:http://kb.discuz.net/index.php?title=MySQL优化l验

ZhouFeng 2009-02-10 20:48 发表评论
]]>
վ֩ģ壺 ƵƷ| ͵͵޸| ޲AVӰƬ߲| 99ƷƵ| ˿wwwƵ| Ʒþһ| avһùŴ| þ99޸ۿҳ| aƵapp| þݺҹҹѹۿ | ĻwwwӰԺѹۿ| ձѲ| йͽxxxxxѿ| ĻӰӾþþ| AVרAV| 99|| þþþ޾Ʒ| av뾫ƷװƬ| һ| Ļ뱬av| 91Ʒѹۿ| ߹ۿӾѰ | 91˾Ʒ޾Ʒ| AVŮ18ëƬˮ| ŷרһ| avһ| ߿һ| ղ2021| ޹Ƶ| ޹պ߳ѿ| ˳վ߹ۿŶ | 99þۺϹƷ| avþþþòվ| 99ѹۿ| ѹվ߹ۿƵ| Ʒһ16 | þþþavӰ| ޾Ʒվ߹ۿ޹| Ƶ| ձۺϸ| һ岻 |