﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-藏经阁-文章分类-DataBase</title><link>http://www.blogjava.net/zhouf/category/45699.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 06 May 2017 02:07:42 GMT</lastBuildDate><pubDate>Sat, 06 May 2017 02:07:42 GMT</pubDate><ttl>60</ttl><item><title>在webapp中使用嵌入式数据库hsqldb</title><link>http://www.blogjava.net/zhouf/articles/432477.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Mon, 24 Apr 2017 14:23:00 GMT</pubDate><guid>http://www.blogjava.net/zhouf/articles/432477.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/432477.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/432477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/432477.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/432477.html</trackback:ping><description><![CDATA[<div>HSQLDB启动方便，不用安装，在之前的文档里已介绍过如何以服务器模式启动，并且通过JDBC连接，接下来介绍如何在webapp中嵌入hsqldb，让其可以随应用一起启动，比如和Tomcat服务器一起启动，不用单独启动数据库。这里有两种模式可以选择</div><div>一种是进程模式启动，按文件方式加载数据库，只有与Tomcat服务器在同一JVM中才能访问</div><div>另一种是用JAVA程序来启动服务器，以网络方式提供数据库服务，可以在Tomcat之外用hsqldb客户端来连接，方便调试</div><div>这两种数据文件都建议放在工程里，如下案例中是将数据库放在WEB-INF/db/目录下<br /><br /></div><div></div><div>1.加载hsqldb.jar</div><div>将hsqldb.jar文件加入到现有webapp工程中，拷贝hsqldb.jar至WEB-INF/lib/hsqldb.jar<br /><br /></div><div></div><div>2.创建WEB-INF/db/目录</div><div>在开发阶段，需要把数据文件放在工程中，而不是tomcat里，这样处理对打包，版本控制管理也方便</div><div>为了方便启动数据库，可以写一个批处理，如WEB-INF/startdb.bat，大家可根据自己的路径修改，内容如下<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&nbsp;db<br />@java&nbsp;-classpath&nbsp;../lib/hsqldb.jar&nbsp;org.hsqldb.server.Server&nbsp;--database.0&nbsp;file:mycms&nbsp;--dbname.0&nbsp;mycmsdb</div>文件名和数据库名可以不同，此处文件名为mycms，而数据库名为mycmsdb<br /><br /><div>3.使用Servlet启动数据库</div><div>可以创建一个自启动Servlet，用于启动数据库，这种方式可以使用客户端工具连接到应用数据库上，主要用于在线调试，或远程管理<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>&nbsp;com.zhouf.mydb;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;javax.servlet.ServletConfig;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.servlet.ServletException;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.servlet.annotation.WebServlet;<br /><span style="color: #0000FF; ">import</span>&nbsp;javax.servlet.http.HttpServlet;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;org.hsqldb.server.Server;<br /><br />@WebServlet(loadOnStartup=1)<br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;HsqldbServlet&nbsp;<span style="color: #0000FF; ">extends</span>&nbsp;HttpServlet&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">final</span>&nbsp;<span style="color: #0000FF; ">long</span>&nbsp;serialVersionUID&nbsp;=&nbsp;1L;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Server&nbsp;server&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Server();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;HsqldbServlet()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;TODO&nbsp;Auto-generated&nbsp;constructor&nbsp;stub</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;init(ServletConfig&nbsp;config)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;ServletException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.init(config);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path=<span style="color: #0000FF; ">this</span>.getServletContext().getRealPath("/WEB-INF/db/mycms");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("dbpath["+path+"]");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.setDatabaseName(0,&nbsp;"mycmsdb");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.setDatabasePath(0,&nbsp;path);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.setPort(9001);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.setSilent(<span style="color: #0000FF; ">true</span>);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thread&nbsp;thread=<span style="color: #0000FF; ">new</span>&nbsp;Thread(<span style="color: #0000FF; ">new</span>&nbsp;Runnable(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;run()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.start();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;thread.start();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;destroy()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">super</span>.destroy();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server.shutdown();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}</div>注意服务端口不要冲突<br /><br /><div>4.完成一个数据库连接类，用于处理数据库连接管理<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; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;DBManage&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Connection&nbsp;getConnection()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">根据连接配置获取数据库连接</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName("org.hsqldb.jdbcDriver").newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">连接Hsqldb&nbsp;Server</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn=&nbsp;DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/mycmsdb;shutdown=true","SA","");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">/*</span><span style="color: #008000; ">/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//直接获得In-process连接<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;path&nbsp;=&nbsp;DBManage.class.getResource("").toString();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;dbpath&nbsp;=&nbsp;path.substring(0,path.indexOf("classes"))&nbsp;+&nbsp;"db/mycms";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection("jdbc:hsqldb:"+dbpath,"SA","");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//</span><span style="color: #008000; ">*/</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;ex)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;conn;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div>上面的连接管理两种方式都支持，可选用，这样应用可以发布到tomcat里独立运行，也可以打包成war发布，这样一个带war文件就可以演示，相当愉快:D</div></div></div><img src ="http://www.blogjava.net/zhouf/aggbug/432477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2017-04-24 22:23 <a href="http://www.blogjava.net/zhouf/articles/432477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HSQLDB数据库使用介绍</title><link>http://www.blogjava.net/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.blogjava.net/zhouf/articles/432476.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/432476.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/432476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/432476.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/432476.html</trackback:ping><description><![CDATA[用过HSQLDB一段时间，其作为一个小型数据库，很是小巧，jar包也就1M多，麻省虽小，五脏俱全。对于一此网站系统或是小型的应用系统，应该足够满足要求了，主要是绿色环保，不需要进行安装，这点我很喜欢，特别是直接打包到web应用里，可以直接使用，用不着更换运行环境后，重新配置数据库连接。下面就介绍一下hsqldb的一些简单的使用<br /><br />下载HSQLDB<br />首先下载hsqldb，其官方网站为hsqldb.org，目前最新版本是2.4.0，最早用过1.9版本的，就觉得甚是喜欢，主页界面上有下载的链接，就一个压缩文件包，不需要区分操作系统。下载后解压即可<br /><br />目录结构介绍<br />bin:存放运行的批处理，可以参照着放入自己的批处理用于启动或管理数据库<br />data:用于存放数据文件的地方，新解压时为空，后面自己用的时候，可能放在里面，也可以放在其他地方<br />doc:文档，与数据库操作的所有文档都在里面，很详细，有什么问题可以在里面找找<br />lib:jar文件，HSQLDB核心的jar包<br />sample:一些配置的模板<br /><br />数据库启动<br />HSQLDB运行分为三种模式，分别为内存模式，进程模式，和服务器模式。<br />在内存模式下，所有的数据都将在内存中完成，如果程序退出，则相应的数据也将同时被销毁。连接JDBC的实例为：jdbc:hsqldb:mem:dbname<br />在进程模式下，是直接以文件方式进行操作，所有文件均写入文件，关闭数据库后数据可以保留，这种模式下不能接受其他程序访问<br />服务器模式，常用，又分为三种，即Servet,WebServer,Servlet，详见官方文档，服务器模式单独启动一个JVM用于提供数据库服务，并开放连接端口，其他程序可以通过jdbc或客户端连接，这也是在开发和调试中常用的一种方式，在上线运行后，可采用进程模式<br />以Server方式启动服务器<br />修改bin/runServer.bat，另存为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&nbsp;..\data<br />@java&nbsp;-classpath&nbsp;../lib/hsqldb.jar&nbsp;org.hsqldb.server.Server&nbsp;--database.0&nbsp;file:book&nbsp;--dbname.0&nbsp;bookdb</div>即在data目录下创建数据文件，文件名为book，启动服务的数据库名为bookdb，如果需要修改监听端口，可以使用--poot 9002，如果不修改端口，可以不用添加这个参数，默认端口为9001，启动后的显示如下<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&gt;myBookServer.bat<br /><br />D:\hsqldb-2.4.0\hsqldb\bin&gt;cd&nbsp;..\data<br />[Server@4517d9a3]:&nbsp;Startup&nbsp;sequence&nbsp;initiated&nbsp;from&nbsp;main()&nbsp;method<br />[Server@4517d9a3]:&nbsp;Could&nbsp;not&nbsp;load&nbsp;properties&nbsp;from&nbsp;file<br />[Server@4517d9a3]:&nbsp;Using&nbsp;cli/<span style="color: #0000FF; ">default</span>&nbsp;properties&nbsp;only<br />[Server@4517d9a3]:&nbsp;Initiating&nbsp;startup&nbsp;sequence<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><br />[Server@4517d9a3]:&nbsp;Server&nbsp;socket&nbsp;opened&nbsp;successfully&nbsp;in&nbsp;6&nbsp;ms.<br />[Server@4517d9a3]:&nbsp;Database&nbsp;[index=0,&nbsp;id=0,&nbsp;db=file:book,&nbsp;alias=bookdb]&nbsp;opened&nbsp;successfully&nbsp;in&nbsp;354&nbsp;ms.<br />[Server@4517d9a3]:&nbsp;Startup&nbsp;sequence&nbsp;completed&nbsp;in&nbsp;362&nbsp;ms.<br />[Server@4517d9a3]:&nbsp;2017-04-23&nbsp;15:22:33.599&nbsp;HSQLDB&nbsp;server&nbsp;2.4.0&nbsp;is&nbsp;online&nbsp;on&nbsp;port&nbsp;9001<br />[Server@4517d9a3]:&nbsp;To&nbsp;close&nbsp;normally,&nbsp;connect&nbsp;and&nbsp;execute&nbsp;SHUTDOWN&nbsp;SQL<br />[Server@4517d9a3]:&nbsp;From&nbsp;command&nbsp;line,&nbsp;use&nbsp;[Ctrl]+[C]&nbsp;to&nbsp;abort&nbsp;abruptly</div>看到这个提示，说明数据库已经启动好了，并开启了监听端口9001，现在可以通过客户端程序连接了<br />在bin目录下，有一个runManager.bat和一个runManagerSwing.bat，这两个批处理都可以打开自带的客户端程序，只是界面风格有所不同，runManager要简洁些，下面介绍一下runManagerSwing的使用，双击打开后，需要填写连接信息，当然也可以在命令行里通过参数的方式进行连接，在弹出对话框里输入连接信息<br /><img src="http://www.blogjava.net/images/blogjava_net/zhouf/runManagerSwingLogin.png" width="350" height="221" alt="" /><br />mybook是为当前配置取的名字，URL里添加上bookdb，如果不是9001端口的话，还需要添加端口，如//localhost:9001/bookdb，登录后，就可以进入到管理界面了<br /><img src="http://www.blogjava.net/images/blogjava_net/zhouf/hsql_manager.png" width="400" height="297" alt="" /><br />在这里操作HSQLDB，比如创建表，修改数据之类的，如果需要修改密码之类的操作，文档里有详解<br />创建表，插入数据，可以上图界面中运行如下命令<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&nbsp;TABLE&nbsp;TB_BOOKS(BOOKID&nbsp;INTEGER&nbsp;GENERATED&nbsp;BY&nbsp;DEFAULT&nbsp;AS&nbsp;IDENTITY&nbsp;NOT&nbsp;NULL&nbsp;PRIMARY&nbsp;KEY,BOOKNAME&nbsp;VARCHAR(30),AUTHOR&nbsp;VARCHAR(30));</div>创建一个book表，分别为bookid,bookname,author<br /><br />JDBC访问<br />接下来用JAVA写入数据并测试<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>&nbsp;com.zhouf.hsql;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.Connection;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.DriverManager;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.ResultSet;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.SQLException;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.Statement;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;HsqlTest&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;SQLException&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">initData();</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;getConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;conn.createStatement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery("select&nbsp;*&nbsp;from&nbsp;tb_books");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>(rs.next()){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString("bookname")&nbsp;+&nbsp;"=&gt;"&nbsp;+&nbsp;rs.getString("author"));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;Connection&nbsp;getConnection(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;<span style="color: #0000FF; ">null</span>;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName("org.hsqldb.jdbcDriver");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/bookdb",&nbsp;"SA",&nbsp;"");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(ClassNotFoundException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(SQLException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;conn;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;initData()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;SQLException{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;getConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;conn.createStatement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;10;&nbsp;i&nbsp;&lt;&nbsp;30;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;"insert&nbsp;into&nbsp;tb_books(bookname,author)&nbsp;values('BookName"+i+"','Author"+i+"')";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.addBatch(sql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.executeBatch();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</div>先调用initData()初始化数据，就可以在管理界面中看到数据了，再运行java可以读取数据，JDBC连接没有问题，记得一定要在工程里引用lib/hsqldb.jar库<br />此时在data目录下有很多book开头的文件，只是后缀有所不同，有临时文件，日志文件，属性文件以及脚本文件等，如果运行了shutdown命令，则其他文件会自动清理，仅保留properties和script文件，如果要带走数据库，把这两个文件带走就好了。<br />如果不希望每次打开管理界面都弹出对话框要求输入内容，可以在命令行里添加参数，拷贝一份bin/runManagerSwing.bat并修改为如下内容<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&nbsp;..\data<br />@java&nbsp;-classpath&nbsp;..\lib\hsqldb.jar&nbsp;org.hsqldb.util.DatabaseManagerSwing&nbsp;--url&nbsp;jdbc:hsqldb:hsql:<span style="color: #008000; ">//</span><span style="color: #008000;">localhost/bookdb&nbsp;--user&nbsp;SA<br /></span></div>另存为myBookManager.bat，下次直接运行这个批处理就可能直接连接到数据库服务器，不用再弹出连接对话框了，前提是服务器正在运行中，如果运行了shutdown关闭了服务器，则需要重新启动服务器进行连接。<br />至此，基本的hsqldb的使用就完成了，文档里还有其它更多的配置和连接方式，详细情况请参阅doc目录下的文档。<br />如果需要把hsqldb嵌入到webapp中运行，不用单独启动服务器，请关注后续文档，稍后整理好再发布。自己码了一下午才整理好这一篇，看来得提高效率了，如果这篇文档能对大家所有帮助，那就太好了。<img src ="http://www.blogjava.net/zhouf/aggbug/432476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2017-04-23 16:41 <a href="http://www.blogjava.net/zhouf/articles/432476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaDB数据库使用笔记</title><link>http://www.blogjava.net/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.blogjava.net/zhouf/articles/432256.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/432256.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/432256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/432256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/432256.html</trackback:ping><description><![CDATA[<div>在做一些小的应用系统时，用过嵌入式数据库，使用过HSQLDB，这个比较小巧，在做了几个应用之后觉得挺好用的，因为数据量不多，也能够满足要求，也就在嵌入式数据库这条路上越走越远了。</div><div>在JAVA里也有一个嵌入式数据库，也想尝试着用一下，便有了下面这篇日志。在安装jdk的时候会提示安装一个数据库，如果勾选的话，则会在安装Java嵌入式数据库JavaDB，在JAVA_HOME目录下多出一个db的目录（在jdk6版本里目录名为JavaDB），里面就是与数据库有关的文件了，如果安装jdk时没有选择安装，可以在官网<a href="http://db.apache.org/derby/derby_downloads.html" target="_blank">http://db.apache.org/derby/derby_downloads.html</a>上下载解压即可，经过了一段时间的摸索，现小结如下。<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\db，或%JAVA_HOME%\db，如果希望后面在命令行里用起来方便点，也可以将%DERBY_HOME%\db\bin添加到path里去<br /><br /><h3>2.目录介绍</h3><div>在DERBY_HOME目录下有两个目录bin和lib</div><div>bin:存放执行批处理文件，用于查看，启动和停止数据库的脚本</div><div>lib:存放所用到的jar包</div><div>bin目录下有几个主要的文件，有两个不同的方式，没有.bat后缀的文件为Linux平台下运行的脚本，bat文件为Windows平台使用的批处理</div><div>dblook:用于查看数据库的基本信息及DDL语句</div><div>ij:命令行客户端程序，提供与数据库的交互</div><div>NetworkServerControl:提供网络服务，主要被startNetworkServer和stopNetworkServer调用</div><div>startNetworkServer:启动网络数据库模式，开启监听</div><div>stopNetworkServer:关闭网络数据库模式，停止监听</div><div>sysinfo:查看当前系统信息，可用于检测数据库是否正确安装</div><div>几个以CP结束的批处理，主要用于在不同模式下设置CLASSPATH用的，如果把lib目录下的jar文件添加到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&gt;ij<br />ij&nbsp;版本&nbsp;10.11<br />ij&gt;&nbsp;connect&nbsp;'jdbc:derby:mydb;create=true';</div></div><div>加上create=true表明如果库mydb不存在，则创建，数据库文件存放位置为当前目录，接下来创建一个表，可以把三个字段定义信息写在一行里面，结束时要加分号</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&gt;&nbsp;create&nbsp;table&nbsp;stu(id&nbsp;int&nbsp;not&nbsp;null&nbsp;generated&nbsp;by&nbsp;default&nbsp;as&nbsp;identity,<br />&gt;&nbsp;stuname&nbsp;varchar(20),<br />&gt;&nbsp;email&nbsp;varchar(30));<br />已插入/更新/删除&nbsp;0&nbsp;行</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&gt;&nbsp;insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('Tom','tom@test.com');<br />已插入/更新/删除&nbsp;1&nbsp;行<br />ij&gt;&nbsp;select&nbsp;*&nbsp;from&nbsp;stu;<br />ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|STUNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|EMAIL<br />---------------------------------------------------------------<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|Tom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|tom@test.com<br /><br />已选择&nbsp;1&nbsp;行</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&gt;&nbsp;exit;</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 />-->G:\Java\jdk1.8.0_73\db\bin&gt;ij<br />ij&nbsp;版本&nbsp;10.11<br />ij&gt;&nbsp;connect&nbsp;'jdbc:derby:mydb';<br />ij&gt;&nbsp;select&nbsp;*&nbsp;from&nbsp;stu;<br />ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|STUNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|EMAIL<br />---------------------------------------------------------------<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|Tom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|tom@test.com<br /><br />已选择&nbsp;1&nbsp;行</div></div><div>查看当前表结构可以用describe &lt;表名&gt;</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&gt;&nbsp;describe&nbsp;stu;<br />COLUMN_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|TYPE_NAME|DEC&amp;|NUM&amp;|COLUM&amp;|COLUMN_DEF|CHAR_OCTE&amp;|IS_NULL&amp;<br />------------------------------------------------------------------------------<br />ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|INTEGER&nbsp;&nbsp;|0&nbsp;&nbsp;&nbsp;|10&nbsp;&nbsp;|10&nbsp;&nbsp;&nbsp;&nbsp;|GENERATED&amp;|NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|NO<br />STUNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|VARCHAR&nbsp;&nbsp;|NULL|NULL|20&nbsp;&nbsp;&nbsp;&nbsp;|NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|YES<br />EMAIL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|VARCHAR&nbsp;&nbsp;|NULL|NULL|30&nbsp;&nbsp;&nbsp;&nbsp;|NULL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|60&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|YES<br /><br />已选择&nbsp;3&nbsp;行<br />ij&gt;</div></div>这是在命令行方式下的基本使用<br /><br /><h3>4.在Java工程中使用JavaDB</h3><div>在Eclipse中创建一个Java工程，导入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>&nbsp;com.db;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.Connection;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.DriverManager;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.Statement;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;EmbedDB&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;driver&nbsp;=&nbsp;"org.apache.derby.jdbc.EmbeddedDriver";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;protocol&nbsp;=&nbsp;"jdbc:derby:db3;create=true";&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;在工程目录下创建数据库<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;private&nbsp;static&nbsp;String&nbsp;protocol&nbsp;=&nbsp;"jdbc:derby:db/db3;create=true";&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">在工程目录下db目录中创建数据库<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;private&nbsp;static&nbsp;String&nbsp;protocol&nbsp;=&nbsp;"jdbc:derby:D:/mydbs/db3;create=true";&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">在D:/mydbs/目录下创建数据库</span><span style="color: #008000; "><br /></span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(driver).newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Loaded&nbsp;the&nbsp;appropriate&nbsp;driver");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection(protocol);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;conn.createStatement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.executeUpdate("create&nbsp;table&nbsp;stu(id&nbsp;int&nbsp;not&nbsp;null&nbsp;generated&nbsp;by&nbsp;default&nbsp;as&nbsp;identity,stuname&nbsp;varchar(20),email&nbsp;varchar(30))");<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(String&nbsp;str&nbsp;:&nbsp;"one,two,three,four,five".split(","))&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;"insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('"&nbsp;+&nbsp;str&nbsp;+&nbsp;"','"&nbsp;+&nbsp;str&nbsp;+&nbsp;"@test.com')";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.addBatch(sql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.executeBatch();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("insert&nbsp;over");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><div>运行结果<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&nbsp;the&nbsp;appropriate&nbsp;driver<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('one','one@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('two','two@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('three','three@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('four','four@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('five','five@test.com')<br />insert&nbsp;over</div><br /><h3>5.网络数据库模式</h3><div>JavaDB是跑在JVM中的，如果此时再开启一个新的窗口，打开当前数据库，会报错，如果希望有多个客户端连接，如开发阶段，一边在Eclipse里运行程序，一边在命令行里查看数据记录，这种情况就可以使用JavaDB的网络启动模式<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&gt;startNetworkServer<br />Tue&nbsp;Jan&nbsp;10&nbsp;09:10:54&nbsp;CST&nbsp;2017&nbsp;:&nbsp;已使用基本服务器安全策略安装了&nbsp;Security&nbsp;Manager。<br />Tue&nbsp;Jan&nbsp;10&nbsp;09:11:04&nbsp;CST&nbsp;2017&nbsp;:&nbsp;Apache&nbsp;Derby&nbsp;网络服务器&nbsp;-&nbsp;10.11.1.2&nbsp;-&nbsp;(1629631)&nbsp;已启动并准备接受端口&nbsp;1527&nbsp;上的连接</div></div><div>表示当前窗口正在监听，即网络服务已开启</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&gt;dblook&nbsp;-d&nbsp;'jdbc:derby://localhost:1527/mydb'<br />--&nbsp;时间戳记：2017-01-10&nbsp;09:18:30.232<br />--&nbsp;源数据库为：mydb<br />--&nbsp;连接&nbsp;URL&nbsp;为：jdbc:derby://localhost:1527/mydb<br />--&nbsp;appendLogs:&nbsp;false<br /><br />--&nbsp;----------------------------------------------<br />--&nbsp;表的&nbsp;DDL&nbsp;语句<br />--&nbsp;----------------------------------------------<br /><br />CREATE&nbsp;TABLE&nbsp;"APP"."STU"&nbsp;("ID"&nbsp;INTEGER&nbsp;NOT&nbsp;NULL&nbsp;GENERATED&nbsp;BY&nbsp;DEFAULT&nbsp;AS&nbsp;IDENTITY&nbsp;(START&nbsp;WITH&nbsp;1,&nbsp;INCREMENT&nbsp;BY&nbsp;1),&nbsp;"STUNAME"&nbsp;VARCHAR(20),&nbsp;"EMAIL"&nbsp;VARCHAR(30));</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 />-->G:\Java\jdk1.8.0_73\db\bin&gt;ij<br />ij&nbsp;版本&nbsp;10.11<br />ij&gt;&nbsp;connect&nbsp;'jdbc:derby://localhost:1527/mydb'<br />ij&gt;&nbsp;show&nbsp;tables&nbsp;in&nbsp;app;<br />TABLE_SCHEM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|TABLE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|REMARKS<br />------------------------------------------------------------------------<br />APP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|STU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br /><br />已选择&nbsp;1&nbsp;行<br />ij&gt;&nbsp;select&nbsp;*&nbsp;from&nbsp;stu;<br />ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|STUNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|EMAIL<br />---------------------------------------------------------------<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|Tom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|tom@test.com<br /><br />已选择&nbsp;1&nbsp;行<br />ij&gt;</div><div>此时也可以在Eclipse中使用Java程序进行数据库访问，需要加载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>&nbsp;com.db;<br /><br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.Connection;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.DriverManager;<br /><span style="color: #0000FF; ">import</span>&nbsp;java.sql.Statement;<br /><br /><span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">class</span>&nbsp;ClientDB&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;driver&nbsp;=&nbsp;"org.apache.derby.jdbc.ClientDriver";<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;String&nbsp;protocol&nbsp;=&nbsp;"jdbc:derby://localhost:1527/mydb";<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">static</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">try</span>&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(driver).newInstance();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Loaded&nbsp;the&nbsp;appropriate&nbsp;driver");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection(protocol);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;conn.createStatement();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;&lt;&nbsp;10;&nbsp;i++)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;"insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user"&nbsp;+&nbsp;i&nbsp;+&nbsp;"','user"&nbsp;+&nbsp;i&nbsp;+&nbsp;"@test.com')";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(sql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.addBatch(sql);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.executeBatch();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("insert&nbsp;over");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.commit();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn.close();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">catch</span>&nbsp;(Exception&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<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&nbsp;the&nbsp;appropriate&nbsp;driver<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user1','user1@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user2','user2@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user3','user3@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user4','user4@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user5','user5@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user6','user6@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user7','user7@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user8','user8@test.com')<br />insert&nbsp;into&nbsp;stu(stuname,email)&nbsp;values('user9','user9@test.com')<br />insert&nbsp;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&gt;&nbsp;select&nbsp;*&nbsp;from&nbsp;stu;<br />ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|STUNAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|EMAIL<br />---------------------------------------------------------------<br />1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|Tom&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|tom@test.com<br />2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user1@test.com<br />3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user2@test.com<br />4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user3@test.com<br />5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user4@test.com<br />6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user5@test.com<br />7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user6@test.com<br />8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user7@test.com<br />9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user8@test.com<br />10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|user9@test.com<br /><br />已选择&nbsp;10&nbsp;行<br />ij&gt;</div></div><br /><h3>小结</h3>终于学习了JavaDB，又尝试了一种嵌入式数据库，在做一些小项目或是应用演示时很方便。在了解过JavaDB后，觉得JavaDB也是个不错的选择，很多操作都做成了批处理方式，在HSQLDB中也可以自己构造批处理，在HSQLDB中有个图形界面可以用，相对直观一些，对于体积来说，HSQLDB好像更小巧点，他们都支持内存数据库，目前在数据库性能上没有做比较。总的来说，JavaDB是个不错的选择，使用起来比较方便。此文仅做简单介绍，如果希望了解得更多，可参考官方文档http://db.apache.org/derby/manuals/index.html#latest</div><div>有几个不同部分的文档，与SQL相关的部分如创建删除表的SQL怎么写，可以参考其中的《Derby Reference Manual》<br />另外在学习JavaDB里找了一些资料，下面这一篇我觉得还不错，一并附上<br />参考资料：<a href="http://www.codejava.net/java-se/jdbc/connect-to-apache-derby-java-db-via-jdbc" 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.blogjava.net/zhouf/aggbug/432256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2017-01-10 10:48 <a href="http://www.blogjava.net/zhouf/articles/432256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>初试MyBatis</title><link>http://www.blogjava.net/zhouf/articles/383711.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Sun, 22 Jul 2012 04:48:00 GMT</pubDate><guid>http://www.blogjava.net/zhouf/articles/383711.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/383711.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/383711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/383711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/383711.html</trackback:ping><description><![CDATA[虽然MyBatis发布已经有一段时间了，一直想试试，可总是被中断，这次总算是跑了一下，对MyBatis有所了解。<br />在www.mybatis.org上可以找到下载链接，我下载的是mybatis-3.1.1这个版本，下载一个zip包，里面包含有主要的库文件mybatis-3.1.1.jar，还有一些引用的jar，一个PDF说明文档，这个说明文档提供的是E文版，可以在网上找到相应的中文版，下载完成后，就开始我的操作了。<br />在MyEclipse里创建了一个java工程，本来是打算在Web中使用的，没有创建Web工程，只是想试一下MyBatis这东东，java工程就可以了。<br />创建时引入MyBatis库和数据库驱动库，创建一个空的工程<br /><br />准备好数据库，此处用MySQL做练习，创建一个bbs数据库，创建一个tb_users表，结构如下<br /><div><div>+----------+----------+------+-----+---------+-------+</div><div>| Field &nbsp; &nbsp;| Type &nbsp; &nbsp; | Null | Key | Default | Extra |</div><div>+----------+----------+------+-----+---------+-------+</div><div>| userid &nbsp; | int(11) &nbsp;| NO &nbsp; | PRI | &nbsp; &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; |</div><div>| username | char(20) | NO &nbsp; | &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; |</div><div>+----------+----------+------+-----+---------+-------+</div></div><br />创建一个User类，与数据表对应<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.cuit.prj.domain;<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;User&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;userid;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">&nbsp;String&nbsp;userName;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;User()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;User(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;userid,&nbsp;String&nbsp;userName)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">super</span><span style="color: #000000; ">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.userid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;userid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.userName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;userName;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;getUserid()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;userid;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setUserid(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;userid)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.userid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;userid;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;String&nbsp;getUserName()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;userName;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;setUserName(String&nbsp;userName)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">this</span><span style="color: #000000; ">.userName&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;userName;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div>再创建一个UserMapper接口，里面提供了对User的相关操作<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><span style="color: #000000; ">&nbsp;com.cuit.prj.presistence;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.cuit.prj.domain.User;<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">interface</span><span style="color: #000000; ">&nbsp;UserMapper&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;selectUser(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;userid);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;insertUser(User&nbsp;user);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;updateUser(User&nbsp;user);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;deleteUser(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;userid);<br />}<br /></span></div>再创建一个UserMapper.xml，与UserMapper.java对应的一个配置文件，经本例测试，其中的id要和接口中的方法名一致<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; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;mapper<br />PUBLIC&nbsp;"-//mybatis.org//DTD&nbsp;Mapper&nbsp;3.0//EN"<br />"http://mybatis.org/dtd/mybatis-3-mapper.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mapper&nbsp;</span><span style="color: #FF0000; ">namespace</span><span style="color: #0000FF; ">="com.cuit.prj.presistence.UserMapper"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">select&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="selectUser"</span><span style="color: #FF0000; ">&nbsp;parameterType</span><span style="color: #0000FF; ">="int"</span><span style="color: #FF0000; ">&nbsp;resultType</span><span style="color: #0000FF; ">="com.cuit.prj.domain.User"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;tb_users&nbsp;where&nbsp;userid&nbsp;=&nbsp;#{userid}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">select</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">insert&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="insertUser"</span><span style="color: #FF0000; ">&nbsp;parameterType</span><span style="color: #0000FF; ">="com.cuit.prj.domain.User"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;insert&nbsp;into&nbsp;tb_users(userid,username)&nbsp;values&nbsp;(#{userid},#{userName})<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">insert</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">update&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="updateUser"</span><span style="color: #FF0000; ">&nbsp;parameterType</span><span style="color: #0000FF; ">="com.cuit.prj.domain.User"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;update&nbsp;tb_users&nbsp;set&nbsp;username&nbsp;=&nbsp;#{userName}&nbsp;where&nbsp;userid&nbsp;=&nbsp;#{userid}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">update</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">delete&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="deleteUser"</span><span style="color: #FF0000; ">&nbsp;parameterType</span><span style="color: #0000FF; ">="int"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;from&nbsp;tb_users&nbsp;where&nbsp;userid&nbsp;=&nbsp;#{userid}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">delete</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">mapper</span><span style="color: #0000FF; ">&gt;</span></div><div>在src下面创建MyBatis配置文件mybatis-conf.xml，配置文件名没有特殊规定，因为在后面的代码里需要指定文件名<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; ">&lt;?</span><span style="color: #FF00FF; ">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"&nbsp;</span><span style="color: #0000FF; ">?&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;!</span><span style="color: #FF00FF; ">DOCTYPE&nbsp;configuration<br />PUBLIC&nbsp;"-//mybatis.org//DTD&nbsp;Config&nbsp;3.0//EN"<br />"http://mybatis.org/dtd/mybatis-3-config.dtd"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">environments&nbsp;</span><span style="color: #FF0000; ">default</span><span style="color: #0000FF; ">="development"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">environment&nbsp;</span><span style="color: #FF0000; ">id</span><span style="color: #0000FF; ">="development"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">transactionManager&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="JDBC"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">dataSource&nbsp;</span><span style="color: #FF0000; ">type</span><span style="color: #0000FF; ">="POOLED"</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="driver"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="com.mysql.jdbc.Driver"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="url"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="jdbc:mysql://localhost/bbs"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="username"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="root"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">property&nbsp;</span><span style="color: #FF0000; ">name</span><span style="color: #0000FF; ">="password"</span><span style="color: #FF0000; ">&nbsp;value</span><span style="color: #0000FF; ">="1233"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">dataSource</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">environment</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">environments</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mappers</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;</span><span style="color: #800000; ">mapper&nbsp;</span><span style="color: #FF0000; ">resource</span><span style="color: #0000FF; ">="com/cuit/prj/presistence/UserMapper.xml"</span><span style="color: #FF0000; ">&nbsp;</span><span style="color: #0000FF; ">/&gt;</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">mappers</span><span style="color: #0000FF; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #0000FF; ">&lt;/</span><span style="color: #800000; ">configuration</span><span style="color: #0000FF; ">&gt;</span></div></div>创建一个获取连接的SessionFactory的类<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><span style="color: #000000; ">&nbsp;com.cuit.prj.sessionfactory;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.IOException;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;java.io.Reader;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.ibatis.io.Resources;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.ibatis.session.SqlSession;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.ibatis.session.SqlSessionFactory;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.ibatis.session.SqlSessionFactoryBuilder;<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;SessionFactory&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;SqlSession&nbsp;getSession(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlSession&nbsp;session&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;resource&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">mybatis-conf.xml</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reader&nbsp;reader&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;Resources.getResourceAsReader(resource);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlSessionFactory&nbsp;sqlMapper&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">new</span><span style="color: #000000; ">&nbsp;SqlSessionFactoryBuilder().build(reader);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;sqlMapper.openSession();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">&nbsp;(IOException&nbsp;e)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;session;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></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 />--><span style="color: #0000FF; ">package</span><span style="color: #000000; ">&nbsp;com.cuit.prj;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;org.apache.ibatis.session.SqlSession;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.cuit.prj.domain.User;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.cuit.prj.presistence.UserMapper;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; ">&nbsp;com.cuit.prj.sessionfactory.SessionFactory;<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;AppTest&nbsp;{<br /></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;main(String[]&nbsp;args)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Hello</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SqlSession&nbsp;session&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;SessionFactory.getSession();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UserMapper&nbsp;mapper&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;session.getMapper(UserMapper.</span><span style="color: #0000FF; ">class</span><span style="color: #000000; ">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;User&nbsp;user&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mapper.selectUser(</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(user.getUserName());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;session.close();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /></span></div>在数据库中添加两条记录，并提交<br /><div><div>+--------+----------+</div><div>| userid | username |</div><div>+--------+----------+</div><div>| 1 &nbsp; &nbsp; &nbsp;| user1 &nbsp; &nbsp;|</div><div>| 2 &nbsp; &nbsp; &nbsp;| user2 &nbsp; &nbsp;|</div><div>+--------+----------+</div></div>接下来就可以运行看看结果了。输出如下：<br /><div><div>Hello</div><div>user2</div></div><div>终于跑起来了，在处理了一系列的Exception之后看到的结果，上面的测试只是做了一个读取数据的操作，如果有新增或修改数据，需要调用session.commit()操作。<br />大概小结一下，用了MyBatis感觉还是很不错的，把SQL语句和JAVA代码分离开，喜欢自己掌控SQL语句的人们可能会喜欢MyBatis一些，不像Hibernate那样可以完全不用写SQL语句。只是配置文件和接口写起来还是有些麻烦，还有POJO类的生成，工作量还是不小哇，网上找到一个生成工具，下次研究一下再补充上来。</div><img src ="http://www.blogjava.net/zhouf/aggbug/383711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2012-07-22 12:48 <a href="http://www.blogjava.net/zhouf/articles/383711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HSQLDB外键使用</title><link>http://www.blogjava.net/zhouf/articles/367357.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Tue, 27 Dec 2011 09:59:00 GMT</pubDate><guid>http://www.blogjava.net/zhouf/articles/367357.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/367357.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/367357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/367357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/367357.html</trackback:ping><description><![CDATA[前段时间用了HSQLDB，感觉这个东东还不错，这两天在把一个以前MYSQL上的东东转到HSQLDB上来，除了一些类型需要转换以外，还有就是外键的处理，着实让我折腾了一番。因为是系统改造，没有使用ORM映射，若是使用Hibernate或MyBatis之类的来做，应该会避免这个语句的问题<br />在此用三个表的创建为例记录一下外键的写法<br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">create</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; ">&nbsp;notice(<br />&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;</span><span style="color: #000000; font-weight: bold; ">integer</span><span style="color: #000000; ">&nbsp;generated&nbsp;</span><span style="color: #0000FF; ">by</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">as</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">primary</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">key</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">30</span><span style="color: #000000; ">)<br />)<br /><br /></span><span style="color: #0000FF; ">create</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; ">&nbsp;tbuser(<br />&nbsp;&nbsp;&nbsp;&nbsp;userid&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">primary</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">key</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;username&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">30</span><span style="color: #000000; ">)<br />)<br /><br /></span><span style="color: #0000FF; ">create</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; ">&nbsp;noticecheck(<br />&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;</span><span style="color: #000000; font-weight: bold; ">integer</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">references</span><span style="color: #000000; ">&nbsp;notice(id)&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">delete</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">cascade</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;userid&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">)&nbsp;</span><span style="color: #0000FF; ">references</span><span style="color: #000000; ">&nbsp;tbuser(userid)&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">delete</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">cascade</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;checktime&nbsp;</span><span style="color: #000000; font-weight: bold; ">timestamp</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">current_timestamp</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">unique</span><span style="color: #000000; ">(id,userid)<br />)</span></div>另外noticecheck也可以使用如下的方式写语句<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; ">create</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">table</span><span style="color: #000000; ">&nbsp;noticecheck(<br />&nbsp;&nbsp;&nbsp;&nbsp;id&nbsp;</span><span style="color: #000000; font-weight: bold; ">integer</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;userid&nbsp;</span><span style="color: #000000; font-weight: bold; ">varchar</span><span style="color: #000000; ">(</span><span style="color: #800000; font-weight: bold; ">20</span><span style="color: #000000; ">),<br />&nbsp;&nbsp;&nbsp;&nbsp;checktime&nbsp;</span><span style="color: #000000; font-weight: bold; ">timestamp</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">&nbsp;</span><span style="color: #FF00FF; ">current_timestamp</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">unique</span><span style="color: #000000; ">(id,userid),<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">constraint</span><span style="color: #000000; ">&nbsp;noticecheck_fk_1&nbsp;</span><span style="color: #0000FF; ">foreign</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">key</span><span style="color: #000000; ">(id)&nbsp;</span><span style="color: #0000FF; ">references</span><span style="color: #000000; ">&nbsp;notice(id)&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">delete</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">cascade</span><span style="color: #000000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">constraint</span><span style="color: #000000; ">&nbsp;noticecheck_fk_2&nbsp;</span><span style="color: #0000FF; ">foreign</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">key</span><span style="color: #000000; ">(userid)&nbsp;</span><span style="color: #0000FF; ">references</span><span style="color: #000000; ">&nbsp;tbuser(userid)&nbsp;</span><span style="color: #0000FF; ">on</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">delete</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">cascade</span><span style="color: #000000; "><br />)</span></div>好啦，就这样，官方所给的文档全E文的，费劲。网上也少有这方面的资料，看来使用HSQLDB的还不多，记在这里了先：）<img src ="http://www.blogjava.net/zhouf/aggbug/367357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2011-12-27 17:59 <a href="http://www.blogjava.net/zhouf/articles/367357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle10g数据库导入导出（跨字符集） </title><link>http://www.blogjava.net/zhouf/articles/264871.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Sun, 25 Jul 2010 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/zhouf/articles/264871.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/264871.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/264871.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/264871.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/264871.html</trackback:ping><description><![CDATA[一导出：<br />
#!/bin/bash<br />
su - oracle -c "exp system/fakepass tables=$1 file=/data/$1.dmp"<br />
<br />
[root@web oracle8i]# dmp album<br />
<br />
Export: Release 10.1.0.3.0 - Production on 星期一 2月 5 01:56:55 2007<br />
<br />
Copyright (c) 1982, 2004, Oracle.&nbsp; All rights reserved.<br />
<br />
<br />
连接到: Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production<br />
With the Partitioning, OLAP and Data Mining options<br />
已导出 ZHS16CGB231280 字符集和 AL16UTF16 NCHAR 字符集<br />
服务器使用 ZHS16GBK 字符集 (可能的字符集转换)<br />
<br />
即将导出指定的表通过常规路径...<br />
. . 正在导出表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALBUM导出了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 590 行<br />
EXP-00091: 正在导出有问题的统计信息。<br />
EXP-00091: 正在导出有问题的统计信息。<br />
EXP-00091: 正在导出有问题的统计信息。<br />
导出成功终止, 但出现警告。<br />
二导入<br />
从 Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production<br />
With the Partitioning, OLAP and Data Mining options 断开<br />
[oracle@dev ~]$ imp system/fit2007 file=blogcat.dmp tables=blogcat<br />
<br />
Import: Release 10.2.0.1.0 - Production on 星期一 2月 5 01:44:39 2007<br />
<br />
Copyright (c) 1982, 2005, Oracle.&nbsp; All rights reserved.<br />
<br />
<br />
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production<br />
With the Partitioning, OLAP and Data Mining options<br />
<br />
经由常规路径由 EXPORT:V10.01.00 创建的导出文件<br />
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入<br />
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)<br />
导出客户机使用 ZHS16CGB231280 字符集 (可能的字符集转换)<br />
. 正在将 SYSTEM 的对象导入到 SYSTEM<br />
. 正在将 SYSTEM 的对象导入到 SYSTEM<br />
. . 正在导入表&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "BLOGCAT"导入了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1938 行<br />
成功终止导入, 没有出现警告。<br />
[oracle@dev ~]$ imp system/topsecret file=blogcat.dmp tables=blogcat<br />
三总结<br />
&nbsp;&nbsp; 2个oracle10g服务器，导出的在北京， 版本10.1.0.3.0， 使用 ZHS16GBK 字符集。<br />
&nbsp; 导入的在宝鸡，临时开发测试用，版本 10.2.0.1.0，AL32UTF8 字符集。<br />
&nbsp; 主要问题是2个服务器字符集不同，解决的关键是：在导入前，设置导入机器的NLS_LANG 与导出机器的NLS_LANG相同，为Simplified Chinese_china.ZHS16GBK<br />
&nbsp; 全部导出的dmp文件有1.8G，学校服务器带宽有限，所以采用了导出常用数据表的最新数据方法。<br />
<br />
转:http://www.zhuoda.org/hofman/78332.html<br />
<img src ="http://www.blogjava.net/zhouf/aggbug/264871.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2010-07-25 11:53 <a href="http://www.blogjava.net/zhouf/articles/264871.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决从JBOSS迁移到TOMCAT下的MYSQL乱码问题</title><link>http://www.blogjava.net/zhouf/articles/278085.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Tue, 26 May 2009 13:10:00 GMT</pubDate><guid>http://www.blogjava.net/zhouf/articles/278085.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/278085.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/278085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/278085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/278085.html</trackback:ping><description><![CDATA[弄了老半天,终于是把这个问题给搞定了,一个在JOBSS下跑得很好的程序,因为某些原因需要迁移到TOMCAT下面,可老是出现乱码的问题,情况如下<br />
数据库:MYSQL5.0<br />
数据库编码:UTF-8<br />
所有页面编码都统一用UTF-8<br />
在JBOSS下配置数据源,即修改mysql-ds.xml<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">datasources</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">local-tx-datasource</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">jndi-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">app</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">jndi-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">connection-url</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">jdbc:mysql://localhost/app</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">connection-url</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">driver-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">com.mysql.jdbc.Driver</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">driver-class</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">user-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">user</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">user-name</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">password</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">pwd</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">password</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">metadata</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">type-mapping</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">mySQL</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">type-mapping</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">metadata</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">local-tx-datasource</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">datasources</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
当把应用迁移到TOMCAT6下时,配置好TOMCAT下的数据源(修改contex.xml文件)<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;?</span><span style="color: rgb(255, 0, 255);">xml&nbsp;version='1.0'&nbsp;encoding='utf-8'</span><span style="color: rgb(0, 0, 255);">?&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);">&nbsp;The&nbsp;contents&nbsp;of&nbsp;this&nbsp;file&nbsp;will&nbsp;be&nbsp;loaded&nbsp;for&nbsp;each&nbsp;web&nbsp;application&nbsp;</span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Context</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">Resource&nbsp;</span><span style="color: rgb(255, 0, 0);">name</span><span style="color: rgb(0, 0, 255);">="jdbc/app"</span><span style="color: rgb(255, 0, 0);">&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth</span><span style="color: rgb(0, 0, 255);">="Container"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: rgb(0, 0, 255);">="javax.sql.DataSource"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;driverClassName</span><span style="color: rgb(0, 0, 255);">="com.mysql.jdbc.Driver"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url</span><span style="color: rgb(0, 0, 255);">="jdbc:mysql://localhost/app"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username</span><span style="color: rgb(0, 0, 255);">="user"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password</span><span style="color: rgb(0, 0, 255);">="pwd"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeAbandoned</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeAbandonedTimeout</span><span style="color: rgb(0, 0, 255);">="60"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;logAbandoned</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxActive</span><span style="color: rgb(0, 0, 255);">="700"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxIdle</span><span style="color: rgb(0, 0, 255);">="30"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxWait</span><span style="color: rgb(0, 0, 255);">="10000"</span><span style="color: rgb(255, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">&lt;!--</span><span style="color: rgb(0, 128, 0);">&nbsp;Default&nbsp;set&nbsp;of&nbsp;monitored&nbsp;resources&nbsp;</span><span style="color: rgb(0, 128, 0);">--&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">WatchedResource</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);">WEB-INF/web.xml</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">WatchedResource</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
<br />
</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">Context</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
因JBOSS和TOMCAT获取数据源连接的方式不同,又修改了获取连接的代码,启动之后是可以运行,页面读取数据正常,但写入数据库时,出现了乱码,我尝试着修改写入数据库的SQL语句的编码,但不管怎么修改都不能正常显示,后来试着通过URL直接修改连接的编码试试,于是把TOMCAT数据源配置里的URL指定为UTF-8的字符集<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);"> url="jdbc:mysql://localhost/app?useUnicode=true</span><span style="color: rgb(255, 0, 0);">&amp;amp;</span><span style="color: rgb(0, 0, 0);">characterEncoding=utf-8"<br />
</span></div>
这里再重新启动TOMCAT,运行后,数据写入正常,这个困扰我多天的问题终于解决了,之前没有想到这样的问题,以为JBOSS里也是用的TOMCAT,在JBOSS里配置的数据源都没有在URL里指定编码,没想到单独使用TOMCAT时会出现这样的问题,把今天的处理在这里作个记录,以便以后备查<br />
<br />
小结:<br />
当用MYSQL作数据库时,将应用程序从JBOSS迁移到TOMCAT,如果存在乱码的问题,可以考虑修改URL指定字符集<br />
<br />
<img src ="http://www.blogjava.net/zhouf/aggbug/278085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2009-05-26 21:10 <a href="http://www.blogjava.net/zhouf/articles/278085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL优化经验</title><link>http://www.blogjava.net/zhouf/articles/254124.html</link><dc:creator>ZhouFeng</dc:creator><author>ZhouFeng</author><pubDate>Tue, 10 Feb 2009 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/zhouf/articles/254124.html</guid><wfw:comment>http://www.blogjava.net/zhouf/comments/254124.html</wfw:comment><comments>http://www.blogjava.net/zhouf/articles/254124.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhouf/comments/commentRss/254124.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhouf/services/trackbacks/254124.html</trackback:ping><description><![CDATA[同时在线访问量继续增大 对于1G内存的服务器明显感觉到吃力严重时甚至每天都会死机 或者时不时的服务器卡一下 这个问题曾经困扰了我半个多月MySQL使用是很具伸缩性的算法，因此你通常能用很少的内存运行或给MySQL更多的被存以得到更好的性能。<br />
<br />
安装好mysql后，配制文件应该在/usr/local/mysql/share/mysql目录中，配制文件有几个，有my- huge.cnf my-medium.cnf my-large.cnf my-small.cnf,不同的流量的网站和不同配制的服务器环境，当然需要有不同的配制文件了。<br />
<br />
一般的情况下，my-medium.cnf这个配制文件就能满足我们的大多需要；一般我们会把配置文件拷贝到/etc/my.cnf 只需要修改这个配置文件就可以了，使用mysqladmin variables extended-status &#8211;u root &#8211;p 可以看到目前的参数，有３个配置参数是最重要的，即key_buffer_size,query_cache_size,table_cache。<br />
<br />
key_buffer_size只对MyISAM表起作用，<br />
<br />
key_buffer_size指定索引缓冲区的大小，它决定索引处理的速度，尤其是索引读的速度。一般我们设为16M,实际上稍微大一点的站点　这个数字是远远不够的，通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低，至少是1:100，1:1000更好（上述状态值可以使用SHOW STATUS LIKE &#8216;key_read%&#8217;获得）。 或者如果你装了phpmyadmin 可以通过服务器运行状态看到,笔者推荐用phpmyadmin管理mysql，以下的状态值都是本人通过phpmyadmin获得的实例分析:<br />
<br />
这个服务器已经运行了20天<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">key_buffer_size&nbsp;&#8211;&nbsp;128M&nbsp;<br />
key_read_requests&nbsp;&#8211;&nbsp;650759289&nbsp;<br />
key_reads&nbsp;-&nbsp;79112</span></div>
比例接近1:8000 健康状况非常好<br />
<br />
另外一个估计key_buffer_size的办法　把你网站数据库的每个表的索引所占空间大小加起来看看以此服务器为例:比较大的几个表索引加起来大概125M 这个数字会随着表变大而变大。<br />
<br />
从4.0.1开始，MySQL提供了查询缓冲机制。使用查询缓冲，MySQL将SELECT语句和查询结果存放在缓冲区中，今后对于同样的SELECT语句（区分大小写），将直接从缓冲区中读取结果。根据MySQL用户手册，使用查询缓冲最多可以达到238%的效率。<br />
<br />
通过调节以下几个参数可以知道query_cache_size设置得是否合理<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">Qcache&nbsp;inserts&nbsp;<br />
Qcache&nbsp;hits&nbsp;<br />
Qcache&nbsp;lowmem&nbsp;prunes&nbsp;<br />
Qcache&nbsp;free&nbsp;blocks&nbsp;<br />
Qcache&nbsp;total&nbsp;blocks</span></div>
Qcache_lowmem_prunes的值非常大，则表明经常出现缓冲不够的情况,同时Qcache_hits的值非常大，则表明查询缓冲使用非常频繁，此时需要增加缓冲大小Qcache_hits的值不大，则表明你的查询重复率很低，这种情况下使用查询缓冲反而会影响效率，那么可以考虑不用查询缓冲。此外，在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。<br />
<br />
Qcache_free_blocks，如果该值非常大，则表明缓冲区中碎片很多query_cache_type指定是否使用查询缓冲<br />
<br />
我设置:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">query_cache_size&nbsp;=&nbsp;32M&nbsp;<br />
query_cache_type=&nbsp;1 <br />
</span></div>
得到如下状态值:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">Qcache&nbsp;queries&nbsp;in&nbsp;cache&nbsp;12737&nbsp;表明目前缓存的条数&nbsp;<br />
Qcache&nbsp;inserts&nbsp;20649006&nbsp;<br />
Qcache&nbsp;hits&nbsp;79060095&nbsp;　看来重复查询率还挺高的&nbsp;<br />
Qcache&nbsp;lowmem&nbsp;prunes&nbsp;617913　有这么多次出现缓存过低的情况&nbsp;<br />
Qcache&nbsp;not&nbsp;cached&nbsp;189896&nbsp;　　&nbsp;<br />
Qcache&nbsp;free&nbsp;memory&nbsp;18573912　　目前剩余缓存空间&nbsp;<br />
Qcache&nbsp;free&nbsp;blocks&nbsp;5328&nbsp;这个数字似乎有点大　碎片不少&nbsp;<br />
Qcache&nbsp;total&nbsp;blocks&nbsp;30953 <br />
</span></div>
如果内存允许32M应该要往上加点<br />
<br />
table_cache指定表高速缓存的大小。每当MySQL访问一个表时，如果在表缓冲区中还有空间，该表就被打开并放入其中，这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables，可以决定是否需要增加table_cache的值。如果你发现open_tables等于table_cache，并且opened_tables在不断增长，那么你就需要增加table_cache的值了（上述状态值可以使用SHOW STATUS LIKE &#8216;Open%tables&#8217;获得）。注意，不能盲目地把table_cache设置成很大的值。如果设置得太高，可能会造成文件描述符不足，从而造成性能不稳定或者连接失败。<br />
<br />
对于有1G内存的机器，推荐值是128－256。<br />
<br />
笔者设置table_cache = 256<br />
<br />
得到以下状态:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">Open&nbsp;tables&nbsp;256&nbsp;<br />
Opened&nbsp;tables&nbsp;9046 <br />
</span></div>
虽然open_tables已经等于table_cache，但是相对于服务器运行时间来说,已经运行了20天，opened_tables的值也非常低。因此，增加table_cache的值应该用处不大。如果运行了6个小时就出现上述值 那就要考虑增大table_cache。<br />
<br />
如果你不需要记录2进制log 就把这个功能关掉，注意关掉以后就不能恢复出问题前的数据了，需要您手动备份，二进制日志包含所有更新数据的语句，其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外，如果做同步复制( Replication )的话，也需要使用二进制日志传送修改情况。<br />
<br />
log_bin指定日志文件，如果不提供文件名，MySQL将自己产生缺省文件名。MySQL会在文件名后面自动添加数字引，每次启动服务时，都会重新生成一个新的二进制文件。此外，使用log-bin-index可以指定索引文件；使用binlog-do-db可以指定记录的数据库；使用binlog-ignore-db可以指定不记录的数据库。注意的是：binlog-do-db和binlog-ignore-db一次只指定一个数据库，指定多个数据库需要多个语句。而且，MySQL会将所有的数据库名称改成小写，在指定数据库时必须全部使用小写名字，否则不会起作用。<br />
<br />
关掉这个功能只需要在他前面加上#号<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">#log-bin <br />
</span></div>
开启慢查询日志( slow query log ) 慢查询日志对于跟踪有问题的查询非常有用。它记录所有查过long_query_time的查询，如果需要，还可以记录不使用索引的记录。下面是一个慢查询日志的例子：<br />
<br />
开启慢查询日志，需要设置参数log_slow_queries、long_query_times、log-queries-not-using-indexes。<br />
<br />
log_slow_queries指定日志文件，如果不提供文件名，MySQL将自己产生缺省文件名。long_query_times指定慢查询的阈值，缺省是10秒。log-queries-not-using-indexes是4.1.0以后引入的参数，它指示记录不使用索引的查询。笔者设置long_query_time=10<br />
<br />
笔者设置:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">sort_buffer_size&nbsp;=&nbsp;1M&nbsp;<br />
max_connections=120&nbsp;<br />
wait_timeout&nbsp;=120&nbsp;<br />
back_log=100&nbsp;<br />
read_buffer_size&nbsp;=&nbsp;1M&nbsp;<br />
thread_cache=32&nbsp;<br />
interactive_timeout=120&nbsp;<br />
thread_concurrency&nbsp;=&nbsp;4 <br />
</span></div>
参数说明:<br />
<br />
back_log<br />
<br />
要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求，这就起作用，然后主线程花些时间(尽管很短) 检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接，你需要增加它，换句话说，这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。 Unix listen(2)系统调用的手册页应该有更多的细节。检查你的OS文档找出这个变量的最大值。试图设定back_log高于你的操作系统的限制将是无效的。<br />
<br />
max_connections<br />
<br />
并发连接数目最大，120 超过这个值就会自动恢复，出了问题能自动解决<br />
<br />
thread_cache<br />
<br />
没找到具体说明，不过设置为32后 20天才创建了400多个线程 而以前一天就创建了上千个线程 所以还是有用的<br />
<br />
thread_concurrency<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">#设置为你的cpu数目x2,例如，只有一个cpu,那么thread_concurrency=2&nbsp;<br />
#有2个cpu,那么thread_concurrency=4&nbsp;<br />
skip-innodb&nbsp;<br />
#去掉innodb支持</span></div>
代码:<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 0);">#&nbsp;Example&nbsp;MySQL&nbsp;config&nbsp;file&nbsp;for&nbsp;medium&nbsp;systems.&nbsp;<br />
#&nbsp;<br />
#&nbsp;This&nbsp;is&nbsp;for&nbsp;a&nbsp;system&nbsp;with&nbsp;little&nbsp;memory&nbsp;(32M&nbsp;-&nbsp;64M)&nbsp;where&nbsp;MySQL&nbsp;plays&nbsp;<br />
#&nbsp;an&nbsp;important&nbsp;part,&nbsp;or&nbsp;systems&nbsp;up&nbsp;to&nbsp;128M&nbsp;where&nbsp;MySQL&nbsp;is&nbsp;used&nbsp;together&nbsp;with&nbsp;<br />
#&nbsp;other&nbsp;programs&nbsp;(such&nbsp;as&nbsp;a&nbsp;web&nbsp;server)&nbsp;<br />
#&nbsp;<br />
#&nbsp;You&nbsp;can&nbsp;copy&nbsp;this&nbsp;file&nbsp;to&nbsp;<br />
#&nbsp;/etc/my.cnf&nbsp;to&nbsp;set&nbsp;global&nbsp;options,&nbsp;<br />
#&nbsp;mysql-data-dir/my.cnf&nbsp;to&nbsp;set&nbsp;server-specific&nbsp;options&nbsp;(in&nbsp;this&nbsp;<br />
#&nbsp;installation&nbsp;this&nbsp;directory&nbsp;is&nbsp;/var/lib/mysql)&nbsp;or&nbsp;<br />
#&nbsp;~/.my.cnf&nbsp;to&nbsp;set&nbsp;user-specific&nbsp;options.&nbsp;<br />
#&nbsp;<br />
#&nbsp;In&nbsp;this&nbsp;file,&nbsp;you&nbsp;can&nbsp;use&nbsp;all&nbsp;long&nbsp;options&nbsp;that&nbsp;a&nbsp;program&nbsp;supports.&nbsp;<br />
#&nbsp;If&nbsp;you&nbsp;want&nbsp;to&nbsp;know&nbsp;which&nbsp;options&nbsp;a&nbsp;program&nbsp;supports,&nbsp;run&nbsp;the&nbsp;program&nbsp;<br />
#&nbsp;with&nbsp;the&nbsp;"--help"&nbsp;option.&nbsp;<br />
<br />
<br />
#&nbsp;The&nbsp;following&nbsp;options&nbsp;will&nbsp;be&nbsp;passed&nbsp;to&nbsp;all&nbsp;MySQL&nbsp;clients&nbsp;<br />
[client]&nbsp;<br />
#password&nbsp;=&nbsp;your_password&nbsp;<br />
port&nbsp;=&nbsp;3306&nbsp;<br />
socket&nbsp;=&nbsp;/tmp/mysql.sock&nbsp;<br />
#socket&nbsp;=&nbsp;/var/lib/mysql/mysql.sock&nbsp;<br />
#&nbsp;Here&nbsp;follows&nbsp;entries&nbsp;for&nbsp;some&nbsp;specific&nbsp;programs&nbsp;<br />
<br />
<br />
#&nbsp;The&nbsp;MySQL&nbsp;server&nbsp;<br />
[mysqld]&nbsp;<br />
port&nbsp;=&nbsp;3306&nbsp;<br />
socket&nbsp;=&nbsp;/tmp/mysql.sock&nbsp;<br />
#socket&nbsp;=&nbsp;/var/lib/mysql/mysql.sock&nbsp;<br />
skip-locking&nbsp;<br />
key_buffer&nbsp;=&nbsp;128M&nbsp;<br />
max_allowed_packet&nbsp;=&nbsp;1M&nbsp;<br />
table_cache&nbsp;=&nbsp;256&nbsp;<br />
sort_buffer_size&nbsp;=&nbsp;1M&nbsp;<br />
net_buffer_length&nbsp;=&nbsp;16K&nbsp;<br />
myisam_sort_buffer_size&nbsp;=&nbsp;1M&nbsp;<br />
max_connections=120&nbsp;<br />
#addnew&nbsp;config&nbsp;<br />
wait_timeout&nbsp;=120&nbsp;<br />
back_log=100&nbsp;<br />
read_buffer_size&nbsp;=&nbsp;1M&nbsp;<br />
thread_cache=32&nbsp;<br />
skip-innodb&nbsp;<br />
skip-bdb&nbsp;<br />
skip-name-resolve&nbsp;<br />
join_buffer_size=512k&nbsp;<br />
query_cache_size&nbsp;=&nbsp;32M&nbsp;<br />
interactive_timeout=120&nbsp;<br />
long_query_time=10&nbsp;<br />
log_slow_queries=&nbsp;/usr/local/mysql4/logs/slow_query.log&nbsp;<br />
query_cache_type=&nbsp;1&nbsp;<br />
#&nbsp;Try&nbsp;number&nbsp;of&nbsp;CPU's*2&nbsp;for&nbsp;thread_concurrency&nbsp;<br />
thread_concurrency&nbsp;=&nbsp;4&nbsp;<br />
<br />
<br />
#end&nbsp;new&nbsp;config&nbsp;<br />
#&nbsp;Don't&nbsp;listen&nbsp;on&nbsp;a&nbsp;TCP/IP&nbsp;port&nbsp;at&nbsp;all.&nbsp;This&nbsp;can&nbsp;be&nbsp;a&nbsp;security&nbsp;enhancement,&nbsp;<br />
#&nbsp;if&nbsp;all&nbsp;processes&nbsp;that&nbsp;need&nbsp;to&nbsp;connect&nbsp;to&nbsp;mysqld&nbsp;run&nbsp;on&nbsp;the&nbsp;same&nbsp;host.&nbsp;<br />
#&nbsp;All&nbsp;interaction&nbsp;with&nbsp;mysqld&nbsp;must&nbsp;be&nbsp;made&nbsp;via&nbsp;Unix&nbsp;sockets&nbsp;or&nbsp;named&nbsp;pipes.&nbsp;<br />
#&nbsp;Note&nbsp;that&nbsp;using&nbsp;this&nbsp;option&nbsp;without&nbsp;enabling&nbsp;named&nbsp;pipes&nbsp;on&nbsp;Windows&nbsp;<br />
#&nbsp;(via&nbsp;the&nbsp;"enable-named-pipe"&nbsp;option)&nbsp;will&nbsp;render&nbsp;mysqld&nbsp;useless!&nbsp;<br />
#&nbsp;<br />
#skip-networking&nbsp;<br />
<br />
<br />
#&nbsp;Replication&nbsp;Master&nbsp;Server&nbsp;(default)&nbsp;<br />
#&nbsp;binary&nbsp;logging&nbsp;is&nbsp;required&nbsp;for&nbsp;replication&nbsp;<br />
#log-bin&nbsp;<br />
<br />
<br />
#&nbsp;required&nbsp;unique&nbsp;id&nbsp;between&nbsp;1&nbsp;and&nbsp;2^32&nbsp;-&nbsp;1&nbsp;<br />
#&nbsp;defaults&nbsp;to&nbsp;1&nbsp;if&nbsp;master-host&nbsp;is&nbsp;not&nbsp;set&nbsp;<br />
#&nbsp;but&nbsp;will&nbsp;not&nbsp;function&nbsp;as&nbsp;a&nbsp;master&nbsp;if&nbsp;omitted&nbsp;<br />
server-id&nbsp;=&nbsp;1&nbsp;<br />
<br />
<br />
#&nbsp;Replication&nbsp;Slave&nbsp;(comment&nbsp;out&nbsp;master&nbsp;section&nbsp;to&nbsp;use&nbsp;this)&nbsp;<br />
#&nbsp;<br />
#&nbsp;To&nbsp;configure&nbsp;this&nbsp;host&nbsp;as&nbsp;a&nbsp;replication&nbsp;slave,&nbsp;you&nbsp;can&nbsp;choose&nbsp;between&nbsp;<br />
#&nbsp;two&nbsp;methods&nbsp;:&nbsp;<br />
#&nbsp;<br />
#&nbsp;1)&nbsp;Use&nbsp;the&nbsp;CHANGE&nbsp;MASTER&nbsp;TO&nbsp;command&nbsp;(fully&nbsp;described&nbsp;in&nbsp;our&nbsp;manual)&nbsp;-&nbsp;<br />
#&nbsp;the&nbsp;syntax&nbsp;is:&nbsp;<br />
#&nbsp;<br />
#&nbsp;CHANGE&nbsp;MASTER&nbsp;TO&nbsp;MASTER_HOST=,&nbsp;MASTER_PORT=,&nbsp;<br />
#&nbsp;MASTER_USER=,&nbsp;MASTER_PASSWORD=&nbsp;;&nbsp;<br />
#&nbsp;<br />
#&nbsp;where&nbsp;you&nbsp;replace&nbsp;,&nbsp;,&nbsp;by&nbsp;quoted&nbsp;strings&nbsp;and&nbsp;<br />
#&nbsp;by&nbsp;the&nbsp;master's&nbsp;port&nbsp;number&nbsp;(3306&nbsp;by&nbsp;default).&nbsp;<br />
#&nbsp;<br />
#&nbsp;Example:&nbsp;<br />
#&nbsp;<br />
#&nbsp;CHANGE&nbsp;MASTER&nbsp;TO&nbsp;MASTER_HOST='125.564.12.1',&nbsp;MASTER_PORT=3306,&nbsp;<br />
#&nbsp;MASTER_USER='joe',&nbsp;MASTER_PASSWORD='secret';&nbsp;<br />
#&nbsp;<br />
#&nbsp;OR&nbsp;<br />
#&nbsp;<br />
#&nbsp;2)&nbsp;Set&nbsp;the&nbsp;variables&nbsp;below.&nbsp;However,&nbsp;in&nbsp;case&nbsp;you&nbsp;choose&nbsp;this&nbsp;method,&nbsp;then&nbsp;<br />
#&nbsp;start&nbsp;replication&nbsp;for&nbsp;the&nbsp;first&nbsp;time&nbsp;(even&nbsp;unsuccessfully,&nbsp;for&nbsp;example&nbsp;<br />
#&nbsp;if&nbsp;you&nbsp;mistyped&nbsp;the&nbsp;password&nbsp;in&nbsp;master-password&nbsp;and&nbsp;the&nbsp;slave&nbsp;fails&nbsp;to&nbsp;<br />
#&nbsp;connect),&nbsp;the&nbsp;slave&nbsp;will&nbsp;create&nbsp;a&nbsp;master.info&nbsp;file,&nbsp;and&nbsp;any&nbsp;later&nbsp;<br />
#&nbsp;change&nbsp;in&nbsp;this&nbsp;file&nbsp;to&nbsp;the&nbsp;variables'&nbsp;values&nbsp;below&nbsp;will&nbsp;be&nbsp;ignored&nbsp;and&nbsp;<br />
#&nbsp;overridden&nbsp;by&nbsp;the&nbsp;content&nbsp;of&nbsp;the&nbsp;master.info&nbsp;file,&nbsp;unless&nbsp;you&nbsp;shutdown&nbsp;<br />
#&nbsp;the&nbsp;slave&nbsp;server,&nbsp;delete&nbsp;master.info&nbsp;and&nbsp;restart&nbsp;the&nbsp;slaver&nbsp;server.&nbsp;<br />
#&nbsp;For&nbsp;that&nbsp;reason,&nbsp;you&nbsp;may&nbsp;want&nbsp;to&nbsp;leave&nbsp;the&nbsp;lines&nbsp;below&nbsp;untouched&nbsp;<br />
#&nbsp;(commented)&nbsp;and&nbsp;instead&nbsp;use&nbsp;CHANGE&nbsp;MASTER&nbsp;TO&nbsp;(see&nbsp;above)&nbsp;<br />
#&nbsp;<br />
#&nbsp;required&nbsp;unique&nbsp;id&nbsp;between&nbsp;2&nbsp;and&nbsp;2^32&nbsp;-&nbsp;1&nbsp;<br />
#&nbsp;(and&nbsp;different&nbsp;from&nbsp;the&nbsp;master)&nbsp;<br />
#&nbsp;defaults&nbsp;to&nbsp;2&nbsp;if&nbsp;master-host&nbsp;is&nbsp;set&nbsp;<br />
#&nbsp;but&nbsp;will&nbsp;not&nbsp;function&nbsp;as&nbsp;a&nbsp;slave&nbsp;if&nbsp;omitted&nbsp;<br />
#server-id&nbsp;=&nbsp;2&nbsp;<br />
#&nbsp;<br />
#&nbsp;The&nbsp;replication&nbsp;master&nbsp;for&nbsp;this&nbsp;slave&nbsp;-&nbsp;required&nbsp;<br />
#master-host&nbsp;=&nbsp;<br />
#&nbsp;<br />
#&nbsp;The&nbsp;username&nbsp;the&nbsp;slave&nbsp;will&nbsp;use&nbsp;for&nbsp;authentication&nbsp;when&nbsp;connecting&nbsp;<br />
#&nbsp;to&nbsp;the&nbsp;master&nbsp;-&nbsp;required&nbsp;<br />
#master-user&nbsp;=&nbsp;<br />
#&nbsp;<br />
#&nbsp;The&nbsp;password&nbsp;the&nbsp;slave&nbsp;will&nbsp;authenticate&nbsp;with&nbsp;when&nbsp;connecting&nbsp;to&nbsp;<br />
#&nbsp;the&nbsp;master&nbsp;-&nbsp;required&nbsp;<br />
#master-password&nbsp;=&nbsp;<br />
#&nbsp;<br />
#&nbsp;The&nbsp;port&nbsp;the&nbsp;master&nbsp;is&nbsp;listening&nbsp;on.&nbsp;<br />
#&nbsp;optional&nbsp;-&nbsp;defaults&nbsp;to&nbsp;3306&nbsp;<br />
#master-port&nbsp;=&nbsp;<br />
#&nbsp;<br />
#&nbsp;binary&nbsp;logging&nbsp;-&nbsp;not&nbsp;required&nbsp;for&nbsp;slaves,&nbsp;but&nbsp;recommended&nbsp;<br />
#log-bin&nbsp;<br />
<br />
<br />
#&nbsp;Point&nbsp;the&nbsp;following&nbsp;paths&nbsp;to&nbsp;different&nbsp;dedicated&nbsp;disks&nbsp;<br />
#tmpdir&nbsp;=&nbsp;/tmp/&nbsp;<br />
#log-update&nbsp;=&nbsp;/path-to-dedicated-directory/hostname&nbsp;<br />
<br />
<br />
#&nbsp;Uncomment&nbsp;the&nbsp;following&nbsp;if&nbsp;you&nbsp;are&nbsp;using&nbsp;BDB&nbsp;tables&nbsp;<br />
#bdb_cache_size&nbsp;=&nbsp;4M&nbsp;<br />
#bdb_max_lock&nbsp;=&nbsp;10000&nbsp;<br />
<br />
<br />
#&nbsp;Uncomment&nbsp;the&nbsp;following&nbsp;if&nbsp;you&nbsp;are&nbsp;using&nbsp;InnoDB&nbsp;tables&nbsp;<br />
#innodb_data_home_dir&nbsp;=&nbsp;/var/lib/mysql/&nbsp;<br />
#innodb_data_file_path&nbsp;=&nbsp;ibdata1:10M:autoextend&nbsp;<br />
#innodb_log_group_home_dir&nbsp;=&nbsp;/var/lib/mysql/&nbsp;<br />
#innodb_log_arch_dir&nbsp;=&nbsp;/var/lib/mysql/&nbsp;<br />
#&nbsp;You&nbsp;can&nbsp;set&nbsp;.._buffer_pool_size&nbsp;up&nbsp;to&nbsp;50&nbsp;-&nbsp;80&nbsp;%&nbsp;<br />
#&nbsp;of&nbsp;RAM&nbsp;but&nbsp;beware&nbsp;of&nbsp;setting&nbsp;memory&nbsp;usage&nbsp;too&nbsp;high&nbsp;<br />
#innodb_buffer_pool_size&nbsp;=&nbsp;16M&nbsp;<br />
#innodb_additional_mem_pool_size&nbsp;=&nbsp;2M&nbsp;<br />
#&nbsp;Set&nbsp;.._log_file_size&nbsp;to&nbsp;25&nbsp;%&nbsp;of&nbsp;buffer&nbsp;pool&nbsp;size&nbsp;<br />
#innodb_log_file_size&nbsp;=&nbsp;5M&nbsp;<br />
#innodb_log_buffer_size&nbsp;=&nbsp;8M&nbsp;<br />
#innodb_flush_log_at_trx_commit&nbsp;=&nbsp;1&nbsp;<br />
#innodb_lock_wait_timeout&nbsp;=&nbsp;50&nbsp;<br />
<br />
<br />
[mysqldump]&nbsp;<br />
quick&nbsp;<br />
max_allowed_packet&nbsp;=&nbsp;16M&nbsp;<br />
<br />
<br />
[mysql]&nbsp;<br />
no-auto-rehash&nbsp;<br />
#&nbsp;Remove&nbsp;the&nbsp;next&nbsp;comment&nbsp;character&nbsp;if&nbsp;you&nbsp;are&nbsp;not&nbsp;familiar&nbsp;with&nbsp;SQL&nbsp;<br />
#safe-updates&nbsp;<br />
<br />
<br />
[isamchk]&nbsp;<br />
key_buffer&nbsp;=&nbsp;20M&nbsp;<br />
sort_buffer_size&nbsp;=&nbsp;20M&nbsp;<br />
read_buffer&nbsp;=&nbsp;2M&nbsp;<br />
write_buffer&nbsp;=&nbsp;2M&nbsp;<br />
<br />
<br />
[myisamchk]&nbsp;<br />
key_buffer&nbsp;=&nbsp;20M&nbsp;<br />
sort_buffer_size&nbsp;=&nbsp;20M&nbsp;<br />
read_buffer&nbsp;=&nbsp;2M&nbsp;<br />
write_buffer&nbsp;=&nbsp;2M&nbsp;<br />
<br />
<br />
[mysqlhotcopy]&nbsp;<br />
interactive-timeout</span></div>
补充<br />
<br />
优化table_cachetable_cache指定表高速缓存的大小。每当MySQL访问一个表时，如果在表缓冲区中还有空间，该表就被打开并放入其中，这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables，可以决定是否需要增加 table_cache的值。如果你发现open_tables等于table_cache，并且opened_tables在不断增长，那么你就需要增加table_cache的值了（上述状态值可以使用SHOW STATUS LIKE &#8216;Open%tables&#8217;获得）。注意，不能盲目地把table_cache设置成很大的值。如果设置得太高，可能会造成文件描述符不足，从而造成性能不稳定或者连接失败。对于有1G内存的机器，推荐值是128－256。<br />
<br />
案例1：该案例来自一个不是特别繁忙的服务器table_cache &#8211; 512open_tables &#8211; 103opened_tables &#8211; 1273uptime &#8211; 4021421 (measured in seconds)该案例中table_cache似乎设置得太高了。在峰值时间，打开表的数目比table_cache要少得多。<br />
<br />
案例2：该案例来自一台开发服务器。table_cache &#8211; 64open_tables &#8211; 64opened-tables &#8211; 431uptime &#8211; 1662790 (measured in seconds)虽然open_tables已经等于table_cache，但是相对于服务器运行时间来说，opened_tables的值也非常低。因此，增加table_cache的值应该用处不大。案例3：该案例来自一个upderperforming的服务器table_cache &#8211; 64open_tables &#8211; 64opened_tables &#8211; 22423uptime &#8211; 19538该案例中table_cache设置得太低了。虽然运行时间不到6小时，open_tables达到了最大值，opened_tables的值也非常高。这样就需要增加table_cache的值。优化key_buffer_sizekey_buffer_size指定索引缓冲区的大小，它决定索引处理的速度，尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads，可以知道key_buffer_size 设置是否合理。比例key_reads / key_read_requests应该尽可能的低，至少是1:100，1:1000更好（上述状态值可以使用SHOW STATUS LIKE &#8216;key_read%&#8217;获得）。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表，但是内部的临时磁盘表是 MyISAM表，也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。对于1G内存的机器，如果不使用 MyISAM表，推荐值是16M（8-64M）。<br />
<br />
案例1：健康状况key_buffer_size &#8211; 402649088 (384M)key_read_requests &#8211; 597579931key_reads - 56188案例2：警报状态key_buffer_size &#8211; 16777216 (16M)key_read_requests &#8211; 597579931key_reads - 53832731案例1中比例低于1:10000，是健康的情况；案例2中比例达到1:11，警报已经拉响。<br />
<br />
本文出自:http://kb.discuz.net/index.php?title=MySQL优化经验
<img src ="http://www.blogjava.net/zhouf/aggbug/254124.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhouf/" target="_blank">ZhouFeng</a> 2009-02-10 20:48 <a href="http://www.blogjava.net/zhouf/articles/254124.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>