﻿<?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-peacess-随笔分类-数据库设计篇</title><link>http://www.blogjava.net/peacess/category/11157.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 26 Jul 2007 16:45:47 GMT</lastBuildDate><pubDate>Thu, 26 Jul 2007 16:45:47 GMT</pubDate><ttl>60</ttl><item><title>清空数据库数据（表）的一个解决方案</title><link>http://www.blogjava.net/peacess/archive/2006/11/09/80208.html</link><dc:creator>中东</dc:creator><author>中东</author><pubDate>Thu, 09 Nov 2006 09:18:00 GMT</pubDate><guid>http://www.blogjava.net/peacess/archive/2006/11/09/80208.html</guid><wfw:comment>http://www.blogjava.net/peacess/comments/80208.html</wfw:comment><comments>http://www.blogjava.net/peacess/archive/2006/11/09/80208.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/peacess/comments/commentRss/80208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/peacess/services/trackbacks/80208.html</trackback:ping><description><![CDATA[
		<br />     在做数据库开发中，经常都要清空（delete）数据或删除（drop）所有的表。然而，外键的存在，给这个工作带来了很大的不便。这里用jdbc写一个通用的类，产生出清空或删除表的顺序。<br />以下代码在mysql与oracle下面运行正常<br /><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, 255);">package createData.tryDemo;<br /><br />import java.sql.Connection;<br />import java.sql.DatabaseMetaData;<br />import java.sql.ResultSet;<br />import java.sql.SQLException;<br />import java.sql.Statement;<br />import java.util.ArrayList;<br />import java.util.Iterator;<br />import java.util.List;<br /><br />/**<br /> * 外键工具<br /> * 1，返回清空（删除）数据库表的先后顺序<br /> * 2，找出数据库中的外键环<br /> * 3，找出数据库中的对同一个表的重复外键关联<br /> * <br /> * 注：外键环（不知道在数据库中，对此情况有没有别的命名）<br /> *  情况1，外键表是自己 （自外键环、小外键环、单外键环）<br /> *  情况2，aTable的外键表是bTable，而bTable的外键表又是aTable（双外键环）<br /> *  情况3，就是多个表之间形成的外键环（多外键环）<br /> * @author wpeace<br /> *<br /> */<br />public class ExportedKeysTools<br />{<br />    public static void main(String[] args)<br />    {<br />        //得到一个数据库的连接，这里就不细说了<br />        Connection connection = null;<br />        <br />        List&lt;String&gt; tables = ExportedKeysTools.getDeleteOrder(connection);<br />        <br />        System.out.print(tables);<br />        //清空数据,以oracle为例<br />        StringBuilder scrip = new StringBuilder();<br />        for(String it : tables)<br />        {<br />            scrip.append(String.format("delete from %s;\r\n", it));<br />        }<br />        System.out.print(scrip);<br />        //删除所有表,以oracle为例<br />        <br />        for(String it : tables)<br />        {<br />            scrip.append(String.format("drop table %s;\r\n", it));<br />        }<br />        System.out.print(scrip);<br />        <br />        //提示关闭连接！！！<br /><br />    }<br />    public static List&lt;String&gt; getDeleteOrder(Connection connection)<br />    {<br />        String userName = null;<br />        try<br />        {<br />            userName = connection.getMetaData().getUserName();<br />        }<br />        catch (SQLException e)<br />        {<br />            e.printStackTrace();<br />        }<br />        return ExportedKeysTools.getDeleteOrder(connection, userName);<br />    }<br />    /**<br />     * 返回清空（删除）数据库表的先后顺序<br />     * @param connection jdbc连接<br />     * @param userName 如果为null的话，在oracle数据库下面是所有的用户的所有表。<br />     * 在mysql下是当前用用户的，这个与数据库厂商的jdbc驱动有关系<br />     * @return 返回清空（删除）数据库表的先后顺序<br />     */<br />    public static List&lt;String&gt; getDeleteOrder(Connection connection,String userName)<br />    {<br />        ResultSet reTables = null;<br />        ResultSet refk = null;<br />        try<br />        {<br />            DatabaseMetaData dm = connection.getMetaData();<br />            //如果是oracle数据库的话，清空闪回表<br />            if(dm.getDatabaseProductName().toUpperCase().indexOf("ORACLE")&gt;=0)<br />            {<br />                Statement state = connection.createStatement();<br />                state.execute("PURGE RECYCLEBIN");<br />                state.close();<br />            }<br />            //取得表<br />            reTables = dm.getTables(null, userName, null, new String[]{"TABLE","VIEW"});<br />            List&lt;TableMeta&gt; tableMetaList = new ArrayList&lt;TableMeta&gt;();<br />            while(reTables.next())<br />            {<br />                String tableName = reTables.getString("TABLE_NAME").trim(); <br />                if(tableName == null || tableName.length()&lt;1)<br />                {<br />                    continue;<br />                }<br />                TableMeta tem = new TableMeta(tableName);<br />                tableMetaList.add(tem);<br />                //取得外键表<br />                refk = dm.getExportedKeys(null, userName, tableName);<br />                while(refk.next())<br />                {<br />                    String fkTableName = refk.getString("FKTABLE_NAME").trim();<br />                    if(fkTableName == null || fkTableName.length() &lt; 1 ||<br />                            fkTableName.equals(tableName)) //去掉主外键是自己的小环<br />                    {<br />                        continue;<br />                    }<br />                    tem.addFK(fkTableName);<br />                }<br />                if(refk != null)refk.close();<br />            }<br />            <br />            Iterator&lt;TableMeta&gt; iterator = tableMetaList.iterator();<br />            TableMeta tableMeta = iterator.next();<br />            List&lt;String&gt; deleteOrder = new ArrayList&lt;String&gt;();<br />            int counts = tableMetaList.size();<br />            for(;true;)<br />            {<br />                //没有外键了<br />                if(!tableMeta.isFKTable())<br />                {<br />                    iterator.remove();<br />                    deleteOrder.add(tableMeta.tableName);<br />                    <br />                    //清除表所使用的所有外键表<br />                    for(TableMeta it : tableMetaList)<br />                    {<br />                        it.deleteFK(tableMeta.tableName);<br />                    }<br />                }<br /><br />                if(!iterator.hasNext())<br />                {<br />                    //一次循环完成后，如果tableMeta的长度（也不为零）没有减少，<br />                    //那么说明在tableMeta中的表之间有循环外键关联的“环”，要退出整个循环<br />                    //不然此处就会有一个死循环，此时在tableMeta中的表的设计也许是有问题的<br />                    //如果要分析<br />                    if(tableMetaList.size() == counts || tableMetaList.size() &lt; 1)<br />                    {<br />                        break;<br />                    }<br />                    iterator = tableMetaList.iterator();<br />                }<br />                tableMeta = iterator.next();<br />            }<br />           return deleteOrder;<br />        }<br />        catch (SQLException e)<br />        {<br />            if(refk != null)<br />                try<br />                {<br />                    refk.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            if(reTables != null)<br />                try<br />                {<br />                    reTables.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            e.printStackTrace();<br />        }<br />        return null;<br />    }<br />    /**<br />     * 返回外键环<br />     * @param connection 连接<br />     * @param userName 用户名，可以为空<br />     * @return 返回外键环<br />     */<br />    public static List&lt;String&gt; getExportedKeysLoop(Connection connection,String userName)<br />    {<br />        ResultSet reTables = null;<br />        ResultSet refk = null;<br />        try<br />        {<br />            DatabaseMetaData dm = connection.getMetaData();<br />            //如果是oracle数据库的话，清空闪回表<br />            if(dm.getDatabaseProductName().toUpperCase().indexOf("ORACLE")&gt;=0)<br />            {<br />                Statement state = connection.createStatement();<br />                state.execute("PURGE RECYCLEBIN");<br />                state.close();<br />            }<br />            //取得表<br />            reTables = dm.getTables(null, userName, null, new String[]{"TABLE","VIEW"});<br />            List&lt;TableMeta&gt; tableMetaList = new ArrayList&lt;TableMeta&gt;();<br />            while(reTables.next())<br />            {<br />                String tableName = reTables.getString("TABLE_NAME").trim(); <br />                if(tableName == null || tableName.length()&lt;1)<br />                {<br />                    continue;<br />                }<br />                TableMeta tem = new TableMeta(tableName);<br />                tableMetaList.add(tem);<br />                //取得外键表<br />                refk = dm.getExportedKeys(null, userName, tableName);<br />                while(refk.next())<br />                {<br />                    String fkTableName = refk.getString("FKTABLE_NAME").trim();<br />                    if(fkTableName == null || fkTableName.length() &lt; 1 ||<br />                            fkTableName.equals(tableName)) //去掉主外键是自己的小环<br />                    {<br />                        continue;<br />                    }<br />                    tem.addFK(fkTableName);<br />                }<br />                if(refk != null)refk.close();<br />            }<br />            <br />            Iterator&lt;TableMeta&gt; iterator = tableMetaList.iterator();<br />            TableMeta tableMeta = iterator.next();<br />            List&lt;String&gt; exportedKeysLoop = new ArrayList&lt;String&gt;();<br />            int counts = tableMetaList.size();<br />            for(;true;)<br />            {<br />                //没有外键了<br />                if(!tableMeta.isFKTable())<br />                {<br />                    iterator.remove();                    <br />                    //清除表所使用的所有外键表<br />                    for(TableMeta it : tableMetaList)<br />                    {<br />                        it.deleteFK(tableMeta.tableName);<br />                    }<br />                }<br /><br />                if(!iterator.hasNext())<br />                {<br />                    //一次循环完成后，如果tableMeta的长度（也不为零）没有减少，<br />                    //那么说明在tableMeta中的表之间有循环外键关联的“环”，要退出整个循环<br />                    //不然此处就会有一个死循环，此时在tableMeta中的表的设计也许是有问题的<br />                    //如果要分析<br />                    if(tableMetaList.size() == counts || tableMetaList.size() &lt; 1)<br />                    {<br />                        for(TableMeta it : tableMetaList)<br />                        {<br />                            exportedKeysLoop.add(it.tableName);<br />                        }<br />                        break;<br />                    }<br />                    iterator = tableMetaList.iterator();<br />                }<br />                tableMeta = iterator.next();<br />            }<br />           return exportedKeysLoop;<br />        }<br />        catch (SQLException e)<br />        {<br />            if(refk != null)<br />                try<br />                {<br />                    refk.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            if(reTables != null)<br />                try<br />                {<br />                    reTables.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            e.printStackTrace();<br />        }<br />        return null;<br />    }<br />    /**<br />     * 有重复外键的表<br />     * @param connection 连接<br />     * @param userName 用户名，可以为空<br />     * @return 有重复外键的表<br />     */<br />    public static List&lt;String&gt; getRepeatExportedKeys(Connection connection,String userName)<br />    {<br />        ResultSet reTables = null;<br />        ResultSet refk = null;<br />        try<br />        {<br />            DatabaseMetaData dm = connection.getMetaData();<br />            //如果是oracle数据库的话，清空闪回表<br />            if(dm.getDatabaseProductName().toUpperCase().indexOf("ORACLE")&gt;=0)<br />            {<br />                Statement state = connection.createStatement();<br />                state.execute("PURGE RECYCLEBIN");<br />                state.close();<br />            }<br />            <br />            List&lt;String&gt; repeatExportedKeys = new ArrayList&lt;String&gt;();<br />            //取得表<br />            reTables = dm.getTables(null, userName, null, new String[]{"TABLE","VIEW"});<br />            while(reTables.next())<br />            {<br />                String tableName = reTables.getString("TABLE_NAME").trim(); <br />                if(tableName == null || tableName.length()&lt;1)<br />                {<br />                    continue;<br />                }<br />                TableMeta tem = new TableMeta(tableName);<br />                //取得外键表<br />                refk = dm.getExportedKeys(null, userName, tableName);<br />                while(refk.next())<br />                {<br />                    String fkTableName = refk.getString("FKTABLE_NAME").trim();<br />                    if(fkTableName == null || fkTableName.length() &lt; 1)<br />                    {<br />                        continue;<br />                    }<br />                    if(tem.findFK(fkTableName))<br />                    {<br />                        repeatExportedKeys.add(tem.tableName);<br />                        break;<br />                    }<br />                 }<br />                if(refk != null)refk.close();<br />            }<br />           return repeatExportedKeys;<br />        }<br />        catch (SQLException e)<br />        {<br />            if(refk != null)<br />                try<br />                {<br />                    refk.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            if(reTables != null)<br />                try<br />                {<br />                    reTables.close();<br />                }<br />                catch (SQLException e1)<br />                {<br />                    e1.printStackTrace();<br />                }<br />            e.printStackTrace();<br />        }<br />        return null;<br />    }<br />    public static class TableMeta{<br />        //表名<br />        public String tableName;<br />        //外键表<br />        private List&lt;String&gt; fkTable = new ArrayList&lt;String&gt;(1);<br />        public TableMeta(String table)<br />        {<br />            this.tableName = table;<br />        }<br />        public boolean findFK(String table)<br />        {<br />            return fkTable.contains(table);<br />        }<br />        public void deleteFK(String table)<br />        {<br />            fkTable.remove(table);<br />        }<br />        //是否存在外键表<br />        public boolean isFKTable()<br />        {<br />            return fkTable.size() &gt; 0;<br />        }<br />        public void addFK(String table)<br />        {<br />            //重名处理<br />            if(!findFK(table))<br />            {<br />                fkTable.add(table);<br />            }<br />        }<br />    }<br /><br />}<br /><br /></span><span style="color: rgb(0, 0, 0);"><br /></span></div><br /><br /><br /><br /><img src ="http://www.blogjava.net/peacess/aggbug/80208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/peacess/" target="_blank">中东</a> 2006-11-09 17:18 <a href="http://www.blogjava.net/peacess/archive/2006/11/09/80208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gwt在eclipse、tomcat（数据库连接池）---tomcat数据连接池（oracle10g）</title><link>http://www.blogjava.net/peacess/archive/2006/06/29/55778.html</link><dc:creator>中东</dc:creator><author>中东</author><pubDate>Thu, 29 Jun 2006 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/peacess/archive/2006/06/29/55778.html</guid><wfw:comment>http://www.blogjava.net/peacess/comments/55778.html</wfw:comment><comments>http://www.blogjava.net/peacess/archive/2006/06/29/55778.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/peacess/comments/commentRss/55778.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/peacess/services/trackbacks/55778.html</trackback:ping><description><![CDATA[tomcat5.5 数据库连接池配置（oracle10g）<br><br>注：引用自什么地方的不记得的（在原来的基础上作了大量改变），所以没有给出引用的地方<br><br>在webapps下有如下目录结构与文件（如果没有就自己建一个）<br><br>+---tt<br>|&nbsp;&nbsp; test.jsp<br>|&nbsp;&nbsp; +---META-INF<br>|&nbsp;&nbsp; \---WEB-INF<br>|&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; web.xml<br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +---classes<br>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \---lib<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br><br>1，把oracle的jdbc驱动（jdbc14.jar，对于不同的配置方式驱动可以不一样，这是一个纯java的驱动）<br>&nbsp;&nbsp; 复制到tomcat的目录&#8220;common/lin&#8221;下<br><br>2，打开文件&#8220;conf/server.xml&#8221; 加入以下的配置<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;Resource<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="jdbc/webEDI"&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;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"&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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password="webEDI"&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; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 登陆数据库的密码&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="oracle.jdbc.OracleDriver"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxIdle="2"&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;&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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxWait="5000"&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;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="webEDI"&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;&nbsp;&nbsp; &nbsp;&nbsp; 数据库的用户名<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:oracle:thin:@192.168.1.11:1521:KFERP"&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; 数据库的url&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="4"/&gt;<br>&nbsp;&nbsp;&nbsp; 具体对每一个参数的说明，见tomcat的帮助文档<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; 这里还有别外的一个方法（要求已经下载并部署了&#8220;admin&#8221;）<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A 在浏览器中输入&#8220;http://local:8080/admin&#8221;,并输入tomcat的密码进入下一界面<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;B 单击根分支（一定是根分支）下的&#8220;resources&#8221;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;C 单击 &#8220;data sources&#8221; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;D 在右边的&#8220;data source actions&#8221; 中选择&#8220;create new datasource&#8221;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;E 接下写入正确的内容与上面的手动配置的内容相同<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;F 保存（&#8220;save&#8221;）<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;G 提交改变（&#8220;commit change&#8221;）<br>&nbsp;&nbsp; &nbsp;<br>3，打开文件&#8220;conf/context.xml&#8221; 加入以下配置<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;ResourceLink name="jdbc/webEDI" global="jdbc/webEDI" type="javax.sql.DataSource"/&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;注意：&#8220;global&#8221;的值一定要与步骤2中配置的&#8220;name&#8221;的值相同，在本步骤中的&#8220;name&#8221;值可以自义<br><br>4，修改web应用的配置文件&#8220;web.xml&#8221;，加入如下配置<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;resource-ref&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;res-ref-name&gt;jdbc/webEDI&lt;/res-ref-name&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;res-type&gt;javax.sql.DataSource&lt;/res-type&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;res-auth&gt;Container&lt;/res-auth&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/resource-ref&gt;<br><br>5，编写测试文件&#8220;test.jsp&#8221; 内容如下<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;%@ page contentType="text/html; charset=GBK"%&gt;<br>&lt;%@ page import="java.sql.*,<br>&nbsp;&nbsp;&nbsp; javax.naming.*"%&gt;<br>&lt;% <br>try {<br>&nbsp;&nbsp;&nbsp; Context initCtx = new InitialContext();<br>&nbsp;&nbsp;&nbsp; Context ctx = (Context) initCtx.lookup("java:comp/env");<br>&nbsp;&nbsp;&nbsp; Object obj = (Object) ctx.lookup("jdbc/webEDI"); <br>&nbsp;&nbsp;&nbsp; javax.sql.DataSource ds = (javax.sql.DataSource)obj;<br>&nbsp;&nbsp;&nbsp; Connection conn = ds.getConnection();<br>&nbsp;&nbsp;&nbsp; Statement stmt = conn.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.sql.ResultSet.CONCUR_READ_ONLY);<br>&nbsp;&nbsp;&nbsp; String strSQL = "SELECT * FROM F_FORECAST_LINE"; <br>&nbsp;&nbsp;&nbsp; ResultSet rs = stmt.executeQuery(strSQL);<br>&nbsp;&nbsp;&nbsp; out.println("asdfasdf");<br>&nbsp; &nbsp;&nbsp; &nbsp;for(;rs.next();)<br>&nbsp; &nbsp;&nbsp; &nbsp;{<br>&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;out.println(rs.toString());<br>&nbsp; &nbsp;&nbsp; &nbsp;}<br>%&gt; <br>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br>&lt;html&gt;<br>...<br>&lt;/html&gt; <br>&lt;% <br>&nbsp;&nbsp;&nbsp; rs.close(); <br>&nbsp;&nbsp;&nbsp; stmt.close(); <br>&nbsp;&nbsp;&nbsp; conn.close();<br>} catch (Exception e) {<br>&nbsp;&nbsp;&nbsp; e.printStackTrace();<br>&nbsp;&nbsp;&nbsp; throw e;<br>}<br>%&gt;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>6，重起动tomcat <br><br>7，在浏览器中输入&#8220;http://localhost:8080/tt/test.jsp&#8221; <img src ="http://www.blogjava.net/peacess/aggbug/55778.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/peacess/" target="_blank">中东</a> 2006-06-29 16:43 <a href="http://www.blogjava.net/peacess/archive/2006/06/29/55778.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计工具选择与比较</title><link>http://www.blogjava.net/peacess/archive/2006/05/16/46328.html</link><dc:creator>中东</dc:creator><author>中东</author><pubDate>Tue, 16 May 2006 01:42:00 GMT</pubDate><guid>http://www.blogjava.net/peacess/archive/2006/05/16/46328.html</guid><wfw:comment>http://www.blogjava.net/peacess/comments/46328.html</wfw:comment><comments>http://www.blogjava.net/peacess/archive/2006/05/16/46328.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/peacess/comments/commentRss/46328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/peacess/services/trackbacks/46328.html</trackback:ping><description><![CDATA[最后更新时间：2006-5-16<br /><br />主流工具：powerdesigner、erwin、visio、er/studio<br />插件工具：together2006、myeclipse、sqlexplore<br /><br />powerdesigner：易用 功能强大，<br />    专业的数据库设计工具<br />    <br />    试用记录<br />        1，反向工程（oracle）<br />            选择表方便，可根据不同的用户来选择<br />            有运行进度，系统cpu资源使用不多<br />        2，把一个数据反向出来后，内容太多，看不出什么条理来，对于了解数据库的结构，还没有大的帮助啊<br />        3，在物理模型中它的脚本操作不太好，没有办法把一个写好的脚本转化为视图<br />        4，显示功能也不好（物理模型），我没有找到隐藏列的显示方式<br /><br />visio：简单易用（有中文的），对MS的支持很好<br />    数据库设计只是他的一小部分内容，是非专业的数据库设计工具<br />    只能在M的平台上<br /><br />    试用记录<br />        1，反向工程（oracle）<br />           驱动，用oracle service 时出错，最后用了odbc（记住要安装oracle的客户端），这样也只支持数据库的表主外键，视图存储过程都不支持<br /><br />            选择表，特别的不方便，它会列出所有表，并且只能一个表一个的选择，不支持（shift操作）<br />            无运行进度，系统cpu资源使用不多<br />今天就这么多了，后继...<br /><img src ="http://www.blogjava.net/peacess/aggbug/46328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/peacess/" target="_blank">中东</a> 2006-05-16 09:42 <a href="http://www.blogjava.net/peacess/archive/2006/05/16/46328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>