<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<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>郑州网建 - 数据库</title><link>http://camnpr.com/</link><description>Good Good Study ,Day Day Up! - </description><generator>RainbowSoft Studio Z-Blog 1.8 Walle Build 100427</generator><language>zh-CN</language><copyright>豫ICP备10013645号 Copyright 2009-2022 camnpr.com</copyright><pubDate>Mon, 09 Mar 2026 01:43:33 +0800</pubDate><item><title>MongoDB设置访问权限、设置用户</title><author>raodaor@163.com (raodaor)</author><link>http://camnpr.com/database/2272.html</link><pubDate>Mon, 28 Nov 2016 18:08:14 +0800</pubDate><guid>http://camnpr.com/database/2272.html</guid><description><![CDATA[<p>MongoDB已经使用很长一段时间了，基于MongoDB的数据存储也一直没有使用到权限访问（MongoDB默认设置为无权限访问限制），今天特地花了一点时间研究了一下，研究成果如下：</p><p>注：研究成果基于Windows平台</p><p>MongoDB在本机安装部署好后</p><p>1. 输入命令：show dbs，你会发现它内置有两个数据库，一个名为admin，一个名为local。local好像没啥用，如果哪位在使用过程中发现了这个local表的用途，希望能够留言提醒，那我们就专心来说说admin表</p><p>2. 输入命令：use admin，你会发现该DB下包含了一个system.users表，呵呵，没错，这个表就等同于MsSql中的用户表，用来存放超级管理员的，那我们就往它里面添加一个超级管理员试试看</p><p>3. 输入命令：db.addUser('sa','sa')，这里我添加一个超级管理员用户，username为sa，password也为sa，即然我们添加了超级管理员，那咱们就来测试下，看看咱们再次连接MongoDB需不需要提示输入用户名、密码，我们先退出来(ctrl+c)</p><p>4. 输入命令：use admin</p><p>5. 输入命令：show collections，查看该库下所有的表，你会发现，MongoDB并没有提示你输入用户名、密码，那就奇怪了，这是怎么回事呢？在文章最开始提到了，</p><p>MongoDB默认设置为无权限访问限制，即然这样，那我们就先把它设置成为需要权限访问限制，咱们再看看效果，怎么设置呢？</p><p>6. 在注册表中，找到MongoDB的节点，在它的ImgPath中，我们修改一下，加入&nbsp;<strong>-auth</strong>，如下所示：</p><p>&quot;D:\Program Files\mongodb\bin\mongod&quot; -dbpath&nbsp; e:\work\data\mongodb\db&nbsp; -logpath&nbsp; e:\work\data\mongodb\log&nbsp;<strong>-auth</strong>&nbsp;-service</p><p>7. 输入命令：use admin</p><p>8. 输入命令：show collections，呵呵，我们发现无法查看该库下的表了，提示：&quot;$err&quot; : &quot;unauthorized db:admin lock <a href="type:-1">type:-1</a> <a href="client:127.0.0.1">client:127.0.0.1</a>&quot;，很明显，提示没有权限，看来关键就在于这里，我们在启动MongoDB时，需要加上<strong>-auth</strong>参数，这样我们设置的权限才能生效，好，接下来我们使用刚刚之前设置的用户名、密码来访问</p><p>9. 输入命令：db.auth('sa','sa')，输出一个结果值为1，说明这个用户匹配上了，如果用户名、密码不对，会输入0</p><p>10. 输入命令：show collections，呵呵，结果出来了，到这里，权限设置还只讲到一多半，接着往下讲，我们先退出来(ctrl+c)</p><p>11. 输入命令：mongo TestDB，我们尝试连接一个新的库（无论这个库是否存在，如果不存在，往该库中添加数据，会默认创建该库），然后，我们想看看该库中的表</p><p>12. 输入命令：show collections，好家伙，没权限，我们输入上面创建的用户名、密码</p><p>13. 输入命令：db.auth('sa','sa')，输入结果0，用户不存在，这下有人可能就不明白了，刚刚前面才创建，怎么会不存在呢？原因在于：当我们<strong>单独访问</strong>MongoDB的数据库时，需要权限访问的情况下，用户名密码并非超级管理员，而是该库的system.user表中的用户，注意，我这里说的是<strong>单独访问</strong>的情况，什么是<strong>不单独访问</strong>的情况呢？接下来再讲，现在咋办，没权限，那我们就尝试给库的system.user表中添加用户</p><p>14. 输入命令：db.addUser('test','111111')，哇靠，仍然提示没有权限，这可咋办，新的数据库使用超级管理员也无法访问，创建用户也没有权限，呵呵，别急，即然设定了超级管理员用户，那它就一定有权限访问所有的库</p><p>15. 输入命令：use admin</p><p>16. 输入命令：db.auth('sa','sa')</p><p>17. 输入命令：use TestDB</p><p>18. 输入命令：show collections，哈哈，一路畅通无阻，我们发现可以利用超级管理员用户访问其它库了，呵呵，这个就是<strong>不单独访问</strong>的情况，不难发现，我们是先进入admin库，再转到其它库来的，admin相当于是一个最高级别官员所在区域，如果你是个地产商，想在地方弄个大工程做做，你想不经过那些高级官员就做，这是行不通的，你需要先去到他们那里，送点礼，再顺着下到地方，工程你就可以拿到手了，此言论仅为个人观点，不代表博客园；即然工程拿到手了，就要开始建了，那我们不至于每加块砖、添个瓦都得去和那帮高级官员打招呼吧，所以我们得让这个工程合法化，咱们得把相关的手续和证件弄齐全，不至于是违建</p><p>19. 输入命令：db.addUser('test','111111')，我们给TestDB库添加一个用户，以后每次访问该库，我都使用刚刚创建的这个用户，我们先退出（ctrl+c）</p><p>20. 输入命令：mongo TestDB</p><p>21. 输入命令：show collections，提示没有权限</p><p>22. 输入命令：db.auth('test','111111')，输出结果1，用户存在，验证成功</p><p>23. 输入命令：show collections，没再提示我没有权限，恭喜您，成功了</p><p>好累啊！一口气写完，呵呵</p><p>注：当需要使用权限才能访问MongoDB时，如果需要查看MongoDB中所有的库，我们只能通过超级管理员权限，输入命令show dbs来查看了。</p>]]></description><category>数据库</category><comments>http://camnpr.com/database/2272.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2272</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2272&amp;key=7ccb4e3d</trackback:ping></item><item><title>thinkphp实现sql like模糊查询实例</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/2023.html</link><pubDate>Wed, 03 Jun 2015 11:10:30 +0800</pubDate><guid>http://camnpr.com/database/2023.html</guid><description><![CDATA[<p>目前使用thinkphp框架进行项目开发的人越来越多了，由于其封装性较好，导致了很多纯PHP开发的部分不易上手，本文实例即以like模糊查询为例对此加以说明。</p><p>这里主要通过举例来说明用法：</p><p>ThinkPHP可以支持直接使用字符串作为查询条件，但是大多数情况推荐使用索引数组或者对象来作为查询条件，因为会更加安全。</p><p>一、使用字符串作为查询条件</p><p>这是最传统的方式，但是安全性不高，<br />例如：</p><div>代码如下:</div><pre class="brush:php">$User = M(&quot;User&quot;); // 实例化User对象<br /> $User-&gt;where('type=1 AND status=1')-&gt;select();</pre><p><br />最后生成的SQL语句是</p><div>代码如下:</div><pre class="brush:sql">SELECT * FROM think_user WHERE type=1 AND status=1</pre><p>如果进行多字段查询，那么字段之间的默认逻辑关系是 逻辑与 AND，但是用下面的规则可以更改默认的逻辑判断，通过使用 _logic 定义查询逻辑：</p><div>代码如下:</div><pre class="brush:php">$User = M(&quot;User&quot;); // 实例化User对象<br /> $condition['name'] = 'thinkphp';<br /> $condition['account'] = 'thinkphp';<br /> $condition['_logic'] = 'OR';<br /> // 把查询条件传入查询方法<br /> $User-&gt;where($condition)-&gt;select();</pre><p><br />最后生成的SQL语句是</p><div>代码如下:</div><pre class="brush:sql">SELECT * FROM think_user WHERE `name`='thinkphp' OR `account`='thinkphp'</pre><p>二、数组方式作为查询条件</p><p>讲了这么多了like查询怎么实现呢，下面看</p><div>代码如下:</div><pre class="brush:php">$userForm=M('user'); <br /> $where['name']=array('like','camnpr%');<br /> $userForm-&gt;where($where)-&gt;select();</pre><p><br />这里的like查询即为：</p><div>代码如下:</div><pre class="brush:text">name like 'camnpr%'</pre><p>查询语句：</p><div>代码如下:</div><pre class="brush:text">$where['name']=array('like',array('%camnpr%','%.com'),'OR');</pre><p><br />这里的like查询即为：</p><div>代码如下:</div><pre class="brush:text">name like '%camnpr%' or name like '%.com'</pre><p>查询语句：</p><div>代码如下:</div><pre class="brush:text">$where['name']=array(array('like','%a%'),array('like','%b%'),array('like','%c%'),'camnpr','or');</pre><p><br />这里的like查询即为：</p><div>代码如下:</div><pre class="&rdquo;brush:text&quot;">(`name` LIKE '%a%') OR (`name` LIKE '%b%') OR (`name` LIKE '%c%') OR (`name` = 'camnpr')</pre><p>查询语句：</p><div>代码如下:</div><pre class="brush:text">$where['_string']='(name like &quot;%camnpr%&quot;)&nbsp; OR (title like &quot;%camnpr&quot;)';</pre><p><br />这里的like查询即为：</p><div>代码如下:</div><pre class="brush:text">name like '%camnpr%' or title like '%camnpr'</pre>]]></description><category>数据库</category><comments>http://camnpr.com/database/2023.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=2023</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=2023&amp;key=690c8a78</trackback:ping></item><item><title>Oracle数据类型与.NET中的对应关系</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1968.html</link><pubDate>Sun, 05 Apr 2015 10:40:05 +0800</pubDate><guid>http://camnpr.com/database/1968.html</guid><description><![CDATA[<div id="cnblogs_post_body"><p><span lang="EN-US">Oracle</span>连接添加的引用不同，会存在数据类型不同以及其他一些差别，就工作中遇到的问题暂时总结下。</p><p>两种不同的添加引用语句：</p><p><span lang="EN-US">(1)System.Data.OracleClient;</span></p><p><span lang="EN-US">(2)Oracle.DataAccess.Client;</span></p><p><span lang="EN-US">Oracle.DataAccess.Type;</span></p><p>采用第二种引用，创建的<span lang="EN-US">OracleCommand</span>实例有<span lang="EN-US">ArrayBindCount</span>属性，可用于传入数组型参数，执行多次储存过程函数。</p><p>对于不同引用创建<span lang="EN-US">OracleParameter</span>实例，类型也存在着差异：</p><p>第一种引用：<span lang="EN-US">System.Data.OracleClient.</span><span lang="EN-US">OracleParameter</span>&nbsp;<span lang="EN-US">&nbsp;<wbr></wbr>para=</span><span lang="EN-US">new</span>&nbsp;<span lang="EN-US">System.Data.OracleClient.</span><span lang="EN-US">OracleParameter(&quot;APPLICATIONNAME_&quot;,OracleType.NVarChar,200)</span><span lang="EN-US">;</span></p><p>第二种引用：<span lang="EN-US">Oracle.DataAccess.Client.OracleParameter</span>&nbsp;<span lang="EN-US">para=</span><span lang="EN-US">new Oracle.DataAccess.Client.OracleParameter(&quot;APPLICATIONNAME_&quot;,OracleDbType.Varchar2</span>，<span lang="EN-US">200</span><span lang="EN-US">)</span><span lang="EN-US">;</span></p><p>下面结合<span lang="EN-US">.NET</span>开发需要，对数据类型比较整合下：</p><p>备注：</p><p>（<span lang="EN-US">1</span>）<span lang="EN-US">.NET</span>类型：<span lang="EN-US">OracleDataReader.GetValue</span>返回的<span lang="EN-US">.NET Framework</span>数据类型；</p><p>（<span lang="EN-US">2</span>）<span lang="EN-US">OracleType</span>类型：<span lang="EN-US">OracleDataReader.GetOracleValue</span>返回的<span lang="EN-US">OracleClient</span>数据类型。</p><p>（<span lang="EN-US">3</span>）<span lang="EN-US">DbType</span>：要绑定为参数的<span lang="EN-US">System.Data.DbType</span>枚举</p><p>（<span lang="EN-US">4</span>）<span lang="EN-US">OracleType</span>：要绑定为参数的<span lang="EN-US">OracleType</span>枚举</p><p>&nbsp;<wbr></wbr></p><table border="1" cellspacing="0" cellpadding="0">    <tbody>        <tr>            <td valign="top" width="7%">            <p align="center">序号</p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">Oracle</span>数据类型</p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">.NET</span>类型</p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">GetOracleValue</span>类型</p>            </td>            <td valign="top" width="21%">            <p align="center"><span lang="EN-US">DbType</span></p>            </td>            <td valign="top" width="22%">            <p align="center"><span lang="EN-US">OracleType</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">1</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">BFILE</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">byte[]</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleBFile</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">&nbsp;<wbr></wbr></span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">BFile</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">2</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">BLOB</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">byte[]</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleLob</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">&nbsp;<wbr></wbr></span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">Blob</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">3</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">CHAR</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleString</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">AnsiStringFixedLength</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">Char</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">4</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">CLOB</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center">&nbsp;</p>            <p align="center"><span lang="EN-US">OracleLob</span></p>            <p align="center">&nbsp;</p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">&nbsp;<wbr></wbr></span></p>            </td>            <td valign="top" width="22%">            <p>&nbsp;</p>            <p><span lang="EN-US"><span lang="EN-US">Clob</span></span></p>            <p>&nbsp;</p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">5</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">DATE</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">DateTime</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleDateTime</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">DateTime</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">DateTime</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">6</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">FLOAT</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">Decimal</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleNumber</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">Single</span>、<span lang="EN-US">Double</span>、<span lang="EN-US">Decimal</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">Float</span>、<span lang="EN-US">Double</span>、<span lang="EN-US">Number</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">7</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">INTEGER</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">Decimal</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleNumber</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">SByte</span>、<span lang="EN-US">Int16</span>、<span lang="EN-US">Int32</span>、<span lang="EN-US">Int64</span>、<span lang="EN-US">Decimal</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">SByte</span>、<span lang="EN-US">Int16</span>、<span lang="EN-US">Int32</span>、<span lang="EN-US">Number</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">8</span></p>            </td>            <td valign="top" width="15%">            <p><span lang="EN-US">INTERVAL YEAR TO&nbsp;&nbsp;<wbr></wbr>MONTH</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">Int32</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleMonthSpan</span></p>            </td>            <td valign="top" width="21%">            <p>&nbsp;</p>            <p><span lang="EN-US">Int32</span></p>            <p>&nbsp;</p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">IntervalYearToMonth</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">9</span></p>            </td>            <td valign="top" width="15%">            <p><span lang="EN-US">INTERVAL DAY TO&nbsp;<wbr></wbr>SECOND</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">TimeSpan</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleTimeSpan</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">Object</span></p>            </td>            <td valign="top" width="22%">            <p>&nbsp;</p>            <p><span lang="EN-US">IntervalDayToSecond</span></p>            <p>&nbsp;</p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">10</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">LONG</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleString</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">AnsiString</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">LongVarChar</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">11</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">LONG RAW</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">byte[]</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleBinary</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">Binary</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">LongRaw</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">12</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">NCHAR</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleString</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">StringFixedLength</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">NChar</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">13</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">NCLOB</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleLob</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">&nbsp;<wbr></wbr></span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">NClob</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">14</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">NUMBER</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">Decimal</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleNumber</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">VarNumeric</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">Number</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">15</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">NVARCHAR2</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleString</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">String</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">NVarChar</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">16</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">RAW</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">byte[]</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleBinary</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">Binary</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">RAW</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">17</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">ROWID</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleString</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">AnsiString</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">Rowid</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">18</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">TIMESTAMP</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">DateTime</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleDateTime</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">DateTime</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">Timestamp</span></p>            </td>        </tr>        <tr>            <td valign="top" width="7%">            <p align="center"><span lang="EN-US">19</span></p>            </td>            <td valign="top" width="15%">            <p align="center"><span lang="EN-US">VARCHAR2</span></p>            </td>            <td valign="top" width="13%">            <p align="center"><span lang="EN-US">string</span></p>            </td>            <td valign="top" width="19%">            <p align="center"><span lang="EN-US">OracleString</span></p>            </td>            <td valign="top" width="21%">            <p><span lang="EN-US">AnsiString</span></p>            </td>            <td valign="top" width="22%">            <p><span lang="EN-US">VarChar</span></p>            </td>        </tr>    </tbody></table><p><span lang="EN-US">(1)</span>&nbsp;<span lang="EN-US">Oracle</span>&nbsp;只允许将&nbsp;<span lang="EN-US">BFILE</span>&nbsp;绑定为&nbsp;<span lang="EN-US">BFILE</span>&nbsp;参数。如果您尝试绑定非&nbsp;<span lang="EN-US">BFILE</span>&nbsp;值，例如&nbsp;<span lang="EN-US">byte[]</span>&nbsp;或&nbsp;<a href="http://msdn2.microsoft.com/zh-cn/library/xhz0khc1(VS.80).aspx" target="_blank"><span lang="EN-US">OracleBinary</span></a>，<span lang="EN-US">Oracle .NET</span>&nbsp;数据提供程序不会自动为您构造一个参数。</p><p><span lang="EN-US">(2)</span>&nbsp;<span lang="EN-US">Oracle</span>&nbsp;只允许将&nbsp;<span lang="EN-US">BLOB</span>&nbsp;绑定为&nbsp;<span lang="EN-US">BLOB</span>&nbsp;参数。如果您尝试绑定非&nbsp;<span lang="EN-US">BLOB</span>&nbsp;值，例如&nbsp;<span lang="EN-US">byte[]</span>&nbsp;或 OracleBinary，<span lang="EN-US">Oracle .NET</span>&nbsp;数据提供程序不会自动为您构造一个参数。</p><p>（<span lang="EN-US">4</span>）<span lang="EN-US">Oracle</span>&nbsp;只允许将&nbsp;<span lang="EN-US">CLOB</span>&nbsp;绑定为&nbsp;<span lang="EN-US">CLOB</span>&nbsp;参数。如果您尝试绑定非&nbsp;<span lang="EN-US">CLOB</span>&nbsp;值，例如&nbsp;<span lang="EN-US">System.String</span>&nbsp;或 OracleString，<span lang="EN-US">Oracle .NET</span>&nbsp;数据提供程序不会自动为您构造一个参数。</p><p>（<span lang="EN-US">6</span>、<span lang="EN-US">7</span>）<a href="http://msdn2.microsoft.com/zh-cn/library/4cs9k1ed(VS.80).aspx" target="_blank"><span lang="EN-US">Size</span></a>&nbsp;确定<span lang="EN-US">System.Data.DBType</span>&nbsp;和OracleType。</p><p>（<span lang="EN-US">8</span>、<span lang="EN-US">9</span>、<span lang="EN-US">18</span>）<span lang="EN-US"><a href="http://msdn2.microsoft.com/zh-cn/library/05d1a75f(VS.80).aspx" target="_blank">OracleType</a>&nbsp;仅在同时使用 Oracle 9i 客户端和服务器软件时才适用</span>。</p><p>（<span lang="EN-US">13</span>）<span lang="EN-US">Oracle 只允许将 NCLOB 绑定为 NCLOB 参数。如果您尝试绑定非 NCLOB 值，例如 System.String 或 OracleString，Oracle .NET 数据提供程序不会自动为您构造一个参数</span>。</p></div>]]></description><category>数据库</category><comments>http://camnpr.com/database/1968.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1968</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1968&amp;key=c06e4f97</trackback:ping></item><item><title>不推荐System.Data.OracleClient，推荐Oracle.DataAccess即：安装使用ODP.Net 问题及说明</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1967.html</link><pubDate>Sat, 04 Apr 2015 15:50:39 +0800</pubDate><guid>http://camnpr.com/database/1967.html</guid><description><![CDATA[<p>最近使用VS2010时发现System.Data.OracleClient不再受微软支持,而是推荐使用Oracle自己的ODP.Net,于是就踏上了纠结的安装ODP.net的道路</p><p>&nbsp;&nbsp; 首先我到oracle的官网注册了账号并下载了ODTwithODAC112021这个版本(<a href="http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html" target="_blank"><span color="#43699a" data-mce-style="color: #43699a;" style="color: #43699a;">http://www.oracle.com/technetwork/database/windows/downloads/index-101290.html</span></a>),这也成为我纠结的开始.因为网上介绍基本都是基于ODTwithODAC1110720这个版本(<a href="http://blog.ywxyn.com/index.php/archives/326" target="_blank">http://blog.ywxyn.com/index.php/archives/326</a>),里面提到的一些解压的dll在ODTwithODAC112021相应路径有时找不到对应的dll,所以就很郁闷.本来不准备安装ODTwithODAC112021的(只准备解压获取dll),结果最后还是不得不安装.</p><p>&nbsp;&nbsp;&nbsp; 安装后找到了部分dll,如Oracle.DataAccess.dll,oci.dll,ociw32.dll,orannzsbb11,oraocci11.dll 但是死活找不到介绍文章中的oraociicus11.dll 和OraOps11w.dll 两个dll,一度打算卸载ODTwithODAC112021这个版本转而安装ODTwithODAC1110720这个版本,最后将ODTwithODAC112021删除后不小心在</p><p><span style="color: rgb(255, 0, 0);">D:\app\Administrator\product\11.2.0\client_1\bin</span>找到了OraOps11w.dll这个dll(隐藏的太深),然后通过这篇文章(<a href="http://camnpr.com/database/1966.html" target="_blank">http://camnpr.com/database/1966.html</a>)中的oraociei11.dll (也可以用更小的oraociicus11.dll代替) 也算曲线找到了oraociicus11.dll,用oraociei11.dll(<span style="color: rgb(255, 0, 0);">D:\app\Administrator\product\11.2.0\client_1</span>)代替,这个dll有100多M.</p><p>&nbsp;&nbsp;&nbsp; 结果最后把Oracle.DataAccess.dll引入,并将其它六个dll放在bin目录下还调试成功了,真是苦尽甘来,可喜可贺!</p><p><span color="#a31515" data-mce-style="color: #a31515;" style="color: #a31515;">ORCL</span>:数据库名称</p><p>system:登录名</p><p>password:密码</p><p><span color="#a31515" data-mce-style="color: #a31515;" style="color: #a31515;">HOST=127.0.0.1</span>,目前只知道用127.0.0.1</p><p><span color="#a31515" data-mce-style="color: #a31515;" style="color: #a31515;">PORT=1521</span>:端口也只知道用1521</p><pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;connstring&nbsp;=&nbsp;@&quot;Data&nbsp;Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT=1521))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CONNECT_DATA=(SID=ORCL)));User&nbsp;Id=system;Password=sa;&quot;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;using&nbsp;(OracleConnection&nbsp;conn&nbsp;=&nbsp;new&nbsp;OracleConnection(connstring))&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;conn.Open();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sql&nbsp;=&nbsp;&quot;SELECT&nbsp;*&nbsp;FROM&nbsp;cj_demo_crud&nbsp;cdc&quot;;  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OracleDataAdapter&nbsp;oa&nbsp;=&nbsp;new&nbsp;OracleDataAdapter(sql,&nbsp;conn);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;dt&nbsp;=&nbsp;new&nbsp;DataTable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;oa.Fill(dt);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</pre><p>总结:</p><p>一. 还是System.Data.OracleClient配置方便,只要引入就行,ODP.NET还要下载,安装,提取dll,很是麻烦</p><p>二.安装ODTwithODAC会导致pl/sql登录不上(ora-12154),卸载后即可(原因不明)</p><p>三、oci.dll、ociw32.dll、orannzsbb11.dll、oraocci11.dll、oraociei11.dll、OraOps11w.dll还是必须加到bin目录下，目前遇到的问题</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1、绑定变量时报错，无法解析参数(上述六个dll必须放在项目的bin目录下，而不是类库，类库只用引用Oracle.DataAccess.dll即可，假设类库的名称为Demo.ODPNet，</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么项目中还除了引用Demo.ODPNet外，还必须引用<span color="#ff0000" data-mce-style="color: #ff0000;" style="color: #ff0000;">Oracle.DataAccess.dll，否则会报错：类型初始值异常</span></p><p><span color="#ff0000" data-mce-style="color: #ff0000;" style="color: #ff0000;">四、关于command.BindByName&nbsp;=&nbsp;true;</span></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认情况下ODP.Net 绑定变量时，sql语句中的变量顺序必须和变量绑定顺序一致，否则Fill查不到数据，cmd.ExecuteNonQuery()返回0无法执行，</p><p><span color="#ff0000" data-mce-style="color: #ff0000;" style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp; 将BindByName&nbsp;设为true后，sql变量顺序和绑定顺序即可不一致（以下代码不设置<span color="#ff0000" data-mce-style="color: #ff0000;" style="color: #ff0000;">BindByName&nbsp;</span>则查不出数据）</span></p><pre><span color="#ff0000" data-mce-style="color: #ff0000;" style="color: #ff0000;">&nbsp;&nbsp;&nbsp;DBHelper&nbsp;dbHelper&nbsp;=&nbsp;new&nbsp;DBHelper(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;sqlstr&nbsp;=&nbsp;&quot;SELECT&nbsp;cc.*,ROWID&nbsp;FROM&nbsp;cde_city&nbsp;cc&nbsp;WHERE&nbsp;cc.provinceid=:provinceid&nbsp;AND&nbsp;cc.cityid=:cityid&quot;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParamsHelper&nbsp;parHepler&nbsp;=&nbsp;new&nbsp;ParamsHelper(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parHepler.Add(&quot;:cityid&quot;,&nbsp;&quot;002&quot;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parHepler.Add(&quot;:provinceid&quot;,&nbsp;&quot;01&quot;);  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataTable&nbsp;dt&nbsp;=&nbsp;dbHelper.GetDataTable(sqlstr,&nbsp;parHepler.ListParameter);</span></pre><p><span color="#ff0000" data-mce-style="color: #ff0000;" style="color: #ff0000;"><br /></span></p>]]></description><category>数据库</category><comments>http://camnpr.com/database/1967.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1967</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1967&amp;key=b901d518</trackback:ping></item><item><title>Oracle数据库：如何使用Oracle ODP.NET 11g的.NET程序发布方法</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1966.html</link><pubDate>Fri, 03 Apr 2015 10:56:05 +0800</pubDate><guid>http://camnpr.com/database/1966.html</guid><description><![CDATA[<p align="left">ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件，比微软自带的Oracle组件性能好，更可以访问UDT(User Defined Type)类型，Procedure，REF等等高级Oracle特性。</p><p>　　.NET 1.1的客户端需要的发布文件如下：</p><ul>    <li>　　Oracle.DataAccess.dll (odt111\odp.net\bin\1.x)</li>    <li>　　OraOps11.dll (odt111\bin)</li></ul><p>　　.NET 2.0需要发布：</p><ul>    <li>　　Oracle.DataAccess.dll (odt111\odp.net\bin\2.0)</li>    <li>　　OraOps11w.dll (odt111\bin)</li></ul><p>　　上面的客户端均需要OCI基本包支持：</p><ul>    <li>　　oci.dll</li>    <li>　　oraociei11.dll (也可以用更小的oraociicus11.dll代替)</li>    <li>　　orannzsbb11.dll</li></ul><p>　　为了在客户端测试方便，还可以加上SQL*Plus包，包括两个文件：</p><ul>    <li>　　sqlplus.exe</li>    <li>　　orasqlplusic11.dll</li></ul><p>　　发布sqlplus包可以使用sqlplus &quot;user_name/password@//192.168.1.31:1521/ORCL&quot;在客户端测试Oracle的状态。</p><p>　　根据上面原则，最小的ODP.NET Oracle客户端发布文件包括5个文件，压缩后大小为8MB：</p><ul>    <li>　　oci.dll</li>    <li>　　oraociicus11.dll</li>    <li>　　orannzsbb11.dll</li>    <li>　　Oracle.DataAccess.dll</li></ul>]]></description><category>数据库</category><comments>http://camnpr.com/database/1966.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1966</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1966&amp;key=296eddcc</trackback:ping></item><item><title>Oracle数据库：System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1965.html</link><pubDate>Thu, 02 Apr 2015 10:24:06 +0800</pubDate><guid>http://camnpr.com/database/1965.html</guid><description><![CDATA[<p>报错：System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本</p><p>解决办法：请下载安装：oracle client或者instant client</p><p>比如：安装：HA-Instant Client-v11.2.0.3.0-x64-Instant Client Setup.exe</p><p>会安装一个：Oracle Data Provider for .NET Help</p><p>更多相关：请访问：<a href="http://camnpr.com/database/1963.html" target="_blank">http://camnpr.com/database/1963.html</a></p>]]></description><category>数据库</category><comments>http://camnpr.com/database/1965.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1965</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1965&amp;key=a1ffb3d5</trackback:ping></item><item><title>Oracle数据库：ORA-01017: invalid username/password; logon denied</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1964.html</link><pubDate>Wed, 01 Apr 2015 10:24:53 +0800</pubDate><guid>http://camnpr.com/database/1964.html</guid><description><![CDATA[<p>报错：ORA-01017: invalid username/password; logon denied</p><p>错误说明：用户名和密码无效，登录被拒绝。</p><pre class="brush:c#">&lt;connectionStrings&gt;<br /> &lt;!--多个数据库，随机访问--&gt;<br /> &lt;add name=&quot;CamnprData1&quot; connectionString=&quot;Data Source=camnpr.com:1008/cam;User Id=npr;Password=123;Integrated Security=no;&quot; providerName=&quot;System.Data.OracleClient&quot;/&gt;<br /> &lt;add name=&quot;CamnprData2&quot; connectionString=&quot;Data Source=camnpr.com:1008/cam;User Id=npr;Password=123;Integrated Security=no;&quot; providerName=&quot;System.Data.OracleClient&quot;/&gt;<br /> &lt;add name=&quot;CamnprData3&quot; connectionString=&quot;Data Source=camnpr.com:1008/cam;User Id=npr;Password=123;Integrated Security=no;&quot; providerName=&quot;System.Data.OracleClient&quot;/&gt;<br /> &lt;/connectionStrings&gt;</pre><p>asdf</p><p>解决办法：请验证用户名或者密码是否正确，密码<span style="color: #ff0000;" data-mce-style="color: #ff0000;"><strong>区分大小写</strong></span>。数据库地址，看看是否有端口限制。</p>]]></description><category>数据库</category><comments>http://camnpr.com/database/1964.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1964</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1964&amp;key=297ff0c1</trackback:ping></item><item><title>ASP.Net(C#)利用ODP.net（Oracle.DataAccess.dll）连接Oracle数据库的代码示例</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1963.html</link><pubDate>Tue, 31 Mar 2015 10:18:12 +0800</pubDate><guid>http://camnpr.com/database/1963.html</guid><description><![CDATA[<p>Microsoft .NET 框架的推出已经创造出一种不同于 COM 的新的 Windows 应用服务器环境。使用 COM 时，可以通过 Oracle Objects for OLE (OO4O)、ADO/OLE DB 或 ODBC 访问 Oracle 数据库中的数据。在 .NET 环境中，用户仍然可以通过 OLE DB 和 ODBC 使用由 Microsoft 提供的数据访问桥接来访问 Oracle 数据库。对于 OLE DB，这种桥接是 OLE DB .NET；对于 ODBC，则是 ODBC .NET。这些桥接提供了被管理的 .NET 层和未被管理的 COM 或 Win32 层之间的交互。Oracle Data Provider for .NET (ODP.NET) 代表访问 Oracle 数据库的第三种方法。</p><p><strong>与其他 .NET 数据提供程序的区别&nbsp;</strong></p><p>在三种数据访问方法中，ODP.NET 最接近 .NET 环境，绕过了对 OLE DB 或 ODBC 的需求。它的特点是对 Oracle 数据库的高性能访问，同时提供对那些通过 OLE DB .NET 和 ODBC .NET 不能使用的高级 Oracle 功能的访问。与 OLE DB .NET 和 ODBC .NET 相似，ODP.NET 可以通过任何 .NET 语言来使用，如 C# 和 Visual Basic .NET。一个重要的区别是，ODP.NET 无需其他数据访问桥接，因而其性能优于 OLE DB .NET 和 ODBC .NET。此外，由于这些 .NET 桥接旨在用于一般的数据源，因此它们不提供对高级数据库功能的完全访问。</p><p>本文介绍了C#连接Oracle数据库的过程。通过instant client和ODP.net中的Oracle.DataAccess.dll，我们就可以方便的部署.net应用程序或者站点，而不需要安装Oracle客户端。接下来我们就介绍这一过程。 <br /><br /><strong>1. ODAC的安装</strong> <br />在oracle的官方网站上下载与你安装的oracle对应版本的ODAC。 <br />下载地址：ODAC Download <br />下载好后解压安装，安装时不用安装全部的组件。主要安装以下组件： <br />Oracle Instant Client <br />Oracle Data Provider For .net2.0 <br />Oracle rovider For Asp .net <br /><br /><strong>2. 环境变量的设置</strong> <br />设置Windows的环境变量： <br />ORACLE_HOME ：ODAC的安装目录（类似 ～\app\Administrator\product\11.1.0\client_1）; <br />LD_LIBRARY_PATH ：%ORACLE_HOME%; <br />TNS_ADMIN ： %ORACLE_HOME%; <br />在PATH的最前面追加：%ORACLE_HOME%; <br /><br /><strong>3. 监听文件tnsnames.ora的配置</strong> <br />在目录%ORACLE_HOME%下新建文件tnsnames.ora，内容如下：</p><div>代码如下:</div><p>数据库SID = <br />(DESCRIPTION = <br />(ADDRESS_LIST = <br />(ADDRESS = (PROTOCOL = TCP)(HOST = Oracle主机名或者IP)(PORT = 1521)) <br />) <br />(CONNECT_DATA = <br />(SERVICE_NAME = 数据库SID) <br />) <br />) <br /><br /><strong>4. plsqldev</strong> <br />这样配置好后，plsqldev就可以连接上oracle数据库了。 <br /><br /><strong>5. C#连接Oracle</strong> <br />C#连接oracle的示例代码如下：</p><div>代码如下:</div><p><br />OracleConnection conn = <br />new OracleConnection(); <br />try <br />{ <br />conn.ConnectionString = ConfigurationManager.ConnectionStrings[&quot;oradb&quot;].ConnectionString; <br />conn.Open(); <br />string sql = &quot; select id,content from test&quot;; // C# <br />OracleCommand cmd = new OracleCommand(sql, conn); <br />cmd.CommandType = CommandType.Text; <br />OracleDataReader dr = cmd.ExecuteReader(); // C# <br />List&lt;string&gt; contents = newList&lt;string&gt;(); <br />while(dr.Read()) <br />{ <br />contents.Add(dr[&quot;content&quot;].ToString()); <br />} <br />listBox1.ItemsSource = contents; <br />} <br />catch(Exception ex) <br />{ <br />MessageBox.Show(ex.Message); <br />} <br />finally <br />{ <br />conn.Clone(); <br />} <br /><br />在程序app.config或者web.config中追加数据库连接的配置。</p><div>代码如下:</div><p><br />&lt;connectionStrings &gt; <br />&lt;add name=&quot;oradb&quot;connectionString=&quot;Data Source=(DESCRIPTION= <br />(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521))) <br />(CONNECT_DATA=(SERVICE_NAME=****))); <br />User Id=***;Password=***;&quot;/&gt; <br />&lt;/connectionStrings&gt; <br /><br />按照上述的步骤执行，如果没有错误，就可以成功地连接数据库了。</p>]]></description><category>数据库</category><comments>http://camnpr.com/database/1963.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1963</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1963&amp;key=7c0ab068</trackback:ping></item><item><title>PHP如何连接MSSQL2005/2008数据库(SQLSRV)配置实例（SQL Server Driver for PHP）</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1959.html</link><pubDate>Fri, 27 Mar 2015 10:16:52 +0800</pubDate><guid>http://camnpr.com/database/1959.html</guid><description><![CDATA[<p>PHP连接MSSQL2008/2005数据库与以往的连接mssql2000是不一样的，连接mssql2008/2005是需要自己添加PHP对MSSQL连接的驱动扩展了，而我们常用的hp.ini中的extension=php_mssql.dll扩展只适用连接于MSSQL2000，下面我们就来看看对此的解决办法</p><p><strong>1.下载扩展</strong></p><p>（1）去官方下载一个SQL Server Driver for PHP的扩展包，我是在这里下载的http://www.microsoft.com/en-us/download/details.aspx?id=20098【记得下载后好像是要先安装然后再解压】</p><p>（2）将下载下来的rar文件解压后你就会得到一堆的.dll文件</p><p>下载驱动程序，下载后安装释放程序，里面有以下文件：<br />php_pdo_sqlsrv_52_nts.dll<br />php_pdo_sqlsrv_52_ts.dll<br />php_pdo_sqlsrv_53_nts_vc6.dll<br />php_pdo_sqlsrv_53_nts_vc9.dll<br />php_pdo_sqlsrv_53_ts_vc6.dll<br />php_pdo_sqlsrv_53_ts_vc9.dll<br />php_sqlsrv_52_nts.dll<br />php_sqlsrv_52_ts.dll<br />php_sqlsrv_53_nts_vc6.dll<br />php_sqlsrv_53_nts_vc9.dll<br />php_sqlsrv_53_ts_vc6.dll<br />php_sqlsrv_53_ts_vc9.dll<br />SQLServerDriverForPHP.chm（手册，英文够好的话，可以看看，嘿嘿）<br />SQLServerDriverForPHP_License.rtf<br />SQLServerDriverForPHP_Readme.htm（自述文件）</p><p><strong>2.添加扩展</strong></p><p>根据(vc6/vc9)需要选择扩展，我的环境是WAMP(php5.2.6/apache2.2.8),我选用的是php_sqlsrv_52_ts_vc6.dll,php_pdo_sqlsrv_52_ts_vc6.dll这两个文件，复制到wamp安装目录下的ext目录下，我的ext目录是在wamp/bin/php/php5.2.6/ext/</p><p><strong>3.配置php.ini</strong></p><p>（1）在php.ini的Dynamic Extensions中添加如下两条扩展：<br />&nbsp;&nbsp;&nbsp; extension=php_sqlsrv_52_ts_vc6.dll<br />&nbsp;&nbsp;&nbsp; extension=php_pdo_sqlsrv_52_ts_vc6.dll<br />（2）将;extension=php_pdo.dll前面的;去掉，开启pdo连接扩展<br />（3）重新启动apache</p><p><strong>4.连接数据库(pdo连接)</strong></p><div>代码如下:</div><pre class="brush:php">&lt;?php<br /> &nbsp; $servern=&quot;COMPUTERNUMBER2015\SQLTRY&quot;;<br /> &nbsp; $coninfo=array(&quot;Database&quot;=&gt;&quot;camnprDB&quot;,&quot;UID&quot;=&gt;&quot;sa&quot;,&quot;PWD&quot;=&gt;&quot;123&quot;);<br /> &nbsp; $conn=sqlsrv_connect($servern,$coninfo) or die (&quot;连接失败!&quot;);<br /> &nbsp; $val=sqlsrv_query($conn,&quot;select * from usertable&quot;);<br /> &nbsp; while($row=sqlsrv_fetch_array($val)){<br /> &nbsp;&nbsp;&nbsp; echo $row[1].&quot;&lt;br /&gt;&quot;;<br /> &nbsp; }<br /> &nbsp; sqlsrv_close($conn); <br /> ?&gt;</pre><p><strong>5.例子<br /><br /></strong>链接示例：<br />mssql_lib.php文件如下：</p><div>代码如下:</div><pre class="brush:php">&lt;?php<br /> class DB {<br /> &nbsp;&nbsp;&nbsp; var $con = null;<br /> &nbsp;&nbsp;&nbsp; function __construct($dbhost,$dbuser,$dbpass,$dbname) {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $connectionInfo =&nbsp; array(&quot;UID&quot;=&gt;$dbuser,&quot;PWD&quot;=&gt;$dbpass,&quot;Database&quot;=&gt;$dbname);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $this-&gt;con = sqlsrv_connect($dbhost,$connectionInfo);<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; function query($sql){<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $result = sqlsrv_query($this-&gt;con, $sql);<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; function getRow($sql){<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $result = sqlsrv_query($this-&gt;con, $sql);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr = array();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while($row = sqlsrv_fetch_array($result))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr[] = $row;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $arr[0];<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; function getAll($sql){<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $result = sqlsrv_query($this-&gt;con, $sql);<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr = array();<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while($row = sqlsrv_fetch_array($result))<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr[] = $row;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $arr;<br /> &nbsp;&nbsp;&nbsp; }<br /> &nbsp;&nbsp;&nbsp; function __destruct() {<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unset($con);<br /> &nbsp;&nbsp;&nbsp; }<br /> }</pre><p>test.php页面如下：</p><div>代码如下:</div><pre class="brush:php">//简单调用<br /> $db = new DB(DB_HOST, DB_USER, DB_PASS, DB_NAME);<br /> $sql = &quot;select * from camnpr_order_batch where (status=0 or status is null) and lock_id is not null&nbsp; &quot;;<br /> $orders_add_list = $db-&gt;getAll($sql);</pre>]]></description><category>数据库</category><comments>http://camnpr.com/database/1959.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1959</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1959&amp;key=18d4bf1e</trackback:ping></item><item><title>mongodb常用命令（安装、用户相关、增删改、索引、查询、管理等）</title><author>bubuol@126.com (llmaomi)</author><link>http://camnpr.com/database/1940.html</link><pubDate>Mon, 09 Mar 2015 10:38:42 +0800</pubDate><guid>http://camnpr.com/database/1940.html</guid><description><![CDATA[<p>mongodb由C＋＋写就，其名字来自humongous这个单词的中间部分，从名字可见其野心所在就是海量数据的处理。关于它的一个最简洁描述为：scalable, high-performance, open source, schema-free, document-oriented database。MongoDB的主要目标是在键/值存储方式（提供了高性能和高度伸缩性）以及传统的RDBMS系统（丰富的功能）架起一座桥梁，集两者的优势于一身。</p><p>&nbsp;&nbsp;&nbsp;</p><p>安装及使用：</p><p>首先在Ubuntu上安装MongoDB。</p><p>下载MongoDB, 现在最新的生产版本1.7.0</p><p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压文件.</p><p>$ tar -xvf mongodb-linux-i686-1.4.3.tgz</p><p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为MongoDB创建数据目录，默认情况下它将数据存储在/data/db</p><p>$ sudo mkdir -p /data/db/</p><p>$ sudo chown `id -u` /data/db</p><p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启动MongoDB服务.</p><p>$ cd mongodb-linux-i686-1.4.3/bin</p><p>$ ./mongod</p><p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开另一个终端，并确保你在MongoDB的bin目录，输入如下命令.</p><p>$ ./mongo</p><p>一些概念&nbsp;<br />一个mongod服务可以有建立多个数据库，每个数据库可以有多张表，这里的表名叫collection，每个collection可以存放多个文档（document），每个文档都以BSON（binary json）的形式存放于硬盘中，因此可以存储比较复杂的数据类型。它是以单文档为单位存储的，你可以任意给一个或一批文档新增或删除字段，而不会对其它文档造成影响，这就是所谓的schema-free，这也是文档型数据库最主要的优点。跟一般的key-value数据库不一样的是，它的value中存储了结构信息，所以你又可以像关系型数据库那样对某些域进行读写、统计等操作。Mongo最大的特点是他支持的查询语言非常强大，其语法有点类似于面向对象的查询语言，几乎可以实现类似关系数据库单表查询的绝大部分功能，而且还支持对数据建立索引。Mongo还可以解决海量数据的查询效率，根据官方文档，当数据量达到50GB以上数据时，Mongo数据库访问速度是MySQL10 倍以上。</p><p>BSON</p><p>BSON是Binary JSON 的简称，是一个JSON文档对象的二进制编码格式。BSON同JSON一样支持往其它文档对象和数组中再插入文档对象和数组，同时扩展了JSON的数据类型。如：BSON有Date类型和BinDate类型。</p><p>BSON被比作二进制的交换格式，如同Protocol Buffers，但BSON比它更&ldquo;schema-less&rdquo;，非常好的灵活性但空间占用稍微大一点。</p><p>BSON有以下三个特点：</p><p>1．&nbsp; 轻量级</p><p>2．&nbsp; 跨平台</p><p>3．&nbsp; 效率高</p><p>命名空间</p><p>MongoDB存储BSON对象到collections,这一系列的数据库名和collection名被称为一个命名空间。如同：java.util.List;用来管理数据库中的数据。</p><p>索引&nbsp;<br />mongodb可以对某个字段建立索引，可以建立组合索引、唯一索引，也可以删除索引，建立索引就意味着增加空间开销。默认情况下每个表都会有一个唯一索引：_id，如果插入数据时没有指定_id，服务会自动生成一个_id，为了充分利用已有索引，减少空间开销，最好是自己指定一个unique的key为_id，通常用对象的ID比较合适，比如商品的ID。</p><p>shell操作数据库：</p><p>&nbsp;&nbsp; 1.&nbsp; 超级用户相关：</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. #进入数据库admin</p><p>use admin</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. #增加或修改用户密码</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.addUser('name','pwd')</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. #查看用户列表</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.system.users.find()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. #用户认证</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.auth('name','pwd')</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. #删除用户</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.removeUser('name')</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6. #查看所有用户</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show users</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7. #查看所有数据库</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show dbs</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8. #查看所有的collection</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show collections</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9. #查看各collection的状态</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.printCollectionStats()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10. #查看主从复制状态</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.printReplicationInfo()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11. #修复数据库</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.repairDatabase()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12. #设置记录profiling，0=off 1=slow 2=all</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.setProfilingLevel(1)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13. #查看profiling</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; show profile</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14. #拷贝数据库</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.copyDatabase('mail_addr','mail_addr_tmp')</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15. #删除collection</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.mail_addr.drop()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16. #删除当前的数据库</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.dropDatabase()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp; 2. 增删改</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. #存储嵌套的对象</p><p>db.foo.save({'name':'ysz','address':{'city':'beijing','post':100096},'phone':[138,139]})</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. #存储数组对象</p><p>db.user_addr.save({'Uid':'yushunzhi@sohu.com','Al':['test-1@sohu.com','test-2@sohu.com']})</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. #根据query条件修改，如果不存在则插入，允许修改多条记录</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.foo.update({'yy':5},{'$set':{'xx':2}},upsert=true,multi=true)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. #删除yy=5的记录</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.foo.remove({'yy':5})</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. #删除所有的记录</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; db.foo.remove()</p><p>&nbsp;&nbsp; 3. 索引</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. #增加索引：1(ascending),-1(descending)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. db.foo.ensureIndex({firstname: 1, lastname: 1}, {unique: true});</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. #索引子对象</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. db.user_addr.ensureIndex({'Al.Em': 1})</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. #查看索引信息</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6. db.foo.getIndexes()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7. db.foo.getIndexKeys()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8. #根据索引名删除索引</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9. db.user_addr.dropIndex('Al.Em_1')</p><p>&nbsp;&nbsp; 4. 查询</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. #查找所有</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. db.foo.find()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. #查找一条记录</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. db.foo.findOne()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. #根据条件检索10条记录</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6. db.foo.find({'msg':'Hello 1'}).limit(10)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7. #sort排序</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8. db.deliver_status.find({'From':'ixigua@sina.com'}).sort({'Dt',-1})</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9. db.deliver_status.find().sort({'Ct':-1}).limit(1)</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10. #count操作</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 11. db.user_addr.count()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12. #distinct操作,查询指定列，去重复</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 13. db.foo.distinct('msg')</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14. #&rdquo;&gt;=&rdquo;操作</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15. db.foo.find({&quot;timestamp&quot;: {&quot;$gte&quot; : 2}})</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16. #子对象的查找</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 17. db.foo.find({'address.city':'beijing'})</p><p>&nbsp;&nbsp; 5. 管理</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1. #查看collection数据的大小</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2. db.deliver_status.dataSize()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3. #查看colleciont状态</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4. db.deliver_status.stats()</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5. #查询所有索引的大小</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6. db.deliver_status.totalIndexSize()</p><p>5.&nbsp; advanced queries:高级查询</p><p><br />条件操作符&nbsp;<br /><span id="MathJax-Element-1-Frame" class="MathJax"><span id="MathJax-Span-1" class="math"><span id="MathJax-Span-2" class="mrow"><span id="MathJax-Span-3" class="mi">g</span><span id="MathJax-Span-4" class="mi">t</span><span id="MathJax-Span-5" class="mo">:&gt;</span></span></span></span>lt : &lt;&nbsp;<br /><span id="MathJax-Element-2-Frame" class="MathJax"><span id="MathJax-Span-6" class="math"><span id="MathJax-Span-7" class="mrow"><span id="MathJax-Span-8" class="mi">g</span><span id="MathJax-Span-9" class="mi">t</span><span id="MathJax-Span-10" class="mi">e</span><span id="MathJax-Span-11" class="mo">:&gt;=</span></span></span></span>lte: &lt;=&nbsp;<br /><span id="MathJax-Element-3-Frame" class="MathJax"><span id="MathJax-Span-12" class="math"><span id="MathJax-Span-13" class="mrow"><span id="MathJax-Span-14" class="mi">n</span><span id="MathJax-Span-15" class="mi">e</span><span id="MathJax-Span-16" class="mo">:</span><span id="MathJax-Span-17" class="mo">!</span><span id="MathJax-Span-18" class="mo">=</span><span id="MathJax-Span-19" class="texatom"><span id="MathJax-Span-20" class="mrow"><span id="MathJax-Span-21" class="mo">、</span></span></span><span id="MathJax-Span-22" class="mo">&lt;&gt;</span></span></span></span>in : in&nbsp;<br /><span id="MathJax-Element-4-Frame" class="MathJax"><span id="MathJax-Span-23" class="math"><span id="MathJax-Span-24" class="mrow"><span id="MathJax-Span-25" class="mi">n</span><span id="MathJax-Span-26" class="mi">i</span><span id="MathJax-Span-27" class="mi">n</span><span id="MathJax-Span-28" class="mo">:</span><span id="MathJax-Span-29" class="mi">n</span><span id="MathJax-Span-30" class="mi">o</span><span id="MathJax-Span-31" class="mi">t</span><span id="MathJax-Span-32" class="mi">i</span><span id="MathJax-Span-33" class="mi">n</span></span></span></span>all: all&nbsp;<br />$not: 反匹配(1.3.3及以上版本)</p><p>查询 name &lt;&gt; &quot;bruce&quot; and age &gt;= 18 的数据&nbsp;<br />db.users.find({name: {<span id="MathJax-Element-5-Frame" class="MathJax"><span id="MathJax-Span-34" class="math"><span id="MathJax-Span-35" class="noError">ne:&nbsp;&quot;bruce&quot;},&nbsp;age:&nbsp;{</span></span></span>gte: 18}});</p><p>查询 creation_date &gt; '2010-01-01' and creation_date &lt;= '2010-12-31' 的数据&nbsp;<br />db.users.find({creation_date:{<span id="MathJax-Element-6-Frame" class="MathJax"><span id="MathJax-Span-36" class="math"><span id="MathJax-Span-37" class="mrow"><span id="MathJax-Span-38" class="mi">g</span><span id="MathJax-Span-39" class="mi">t</span><span id="MathJax-Span-40" class="mo">:</span><span id="MathJax-Span-41" class="mi">n</span><span id="MathJax-Span-42" class="mi">e</span><span id="MathJax-Span-43" class="mi">w</span><span id="MathJax-Span-44" class="mi">D</span><span id="MathJax-Span-45" class="mi">a</span><span id="MathJax-Span-46" class="mi">t</span><span id="MathJax-Span-47" class="mi">e</span><span id="MathJax-Span-48" class="mo">(</span><span id="MathJax-Span-49" class="mn">2010</span><span id="MathJax-Span-50" class="mo">,</span><span id="MathJax-Span-51" class="mn">0</span><span id="MathJax-Span-52" class="mo">,</span><span id="MathJax-Span-53" class="mn">1</span><span id="MathJax-Span-54" class="mo">)</span><span id="MathJax-Span-55" class="mo">,</span></span></span></span>lte:new Date(2010,11,31)});</p><p>查询 age in (20,22,24,26) 的数据&nbsp;<br />db.users.find({age: {$in: [20,22,24,26]}});</p><p>查询 age取模10等于0 的数据&nbsp;<br />db.users.find('this.age % 10 == 0');&nbsp;<br />或者&nbsp;<br />db.users.find({age : {$mod : [10, 0]}});</p><p>匹配所有&nbsp;<br />db.users.find({favorite_number : {$all : [6, 8]}});&nbsp;<br />可以查询出{name: 'David', age: 26, favorite_number: [ 6, 8, 9 ] }&nbsp;<br />可以不查询出{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }</p><p>查询不匹配name=B*带头的记录&nbsp;<br />db.users.find({name: {<span id="MathJax-Element-7-Frame" class="MathJax"><span id="MathJax-Span-56" class="math"><span id="MathJax-Span-57" class="noError">not:&nbsp;/^B.*/}});&nbsp;&nbsp;查询&nbsp;age取模10不等于0&nbsp;的数据&nbsp;&nbsp;db.users.find({age&nbsp;:&nbsp;{</span></span></span>not: {$mod : [10, 0]}}});</p><p>#返回部分字段&nbsp;<br />选择返回age和_id字段(_id字段总是会被返回)&nbsp;<br />db.users.find({}, {age:1});&nbsp;<br />db.users.find({}, {age:3});&nbsp;<br />db.users.find({}, {age:true});&nbsp;<br />db.users.find({ name : &quot;bruce&quot; }, {age:1});&nbsp;<br />0为false, 非0为true</p><p>选择返回age、address和_id字段&nbsp;<br />db.users.find({ name : &quot;bruce&quot; }, {age:1, address:1});</p><p>排除返回age、address和_id字段&nbsp;<br />db.users.find({}, {age:0, address:false});&nbsp;<br />db.users.find({ name : &quot;bruce&quot; }, {age:0, address:false});</p><p>数组元素个数判断&nbsp;<br />对于{name: 'David', age: 26, favorite_number: [ 6, 7, 9 ] }记录&nbsp;<br />匹配db.users.find({favorite_number: {<span id="MathJax-Element-8-Frame" class="MathJax"><span id="MathJax-Span-58" class="math"><span id="MathJax-Span-59" class="noError">size:&nbsp;3}});&nbsp;&nbsp;不匹配db.users.find({favorite_number:&nbsp;{</span></span></span>size: 2}});</p><p><span id="MathJax-Element-9-Frame" class="MathJax"><span id="MathJax-Span-60" class="math"><span id="MathJax-Span-61" class="noError">exists判断字段是否存在&nbsp;&nbsp;查询所有存在name字段的记录&nbsp;&nbsp;db.users.find({name:&nbsp;{</span></span></span>exists: true}});&nbsp;<br />查询所有不存在phone字段的记录&nbsp;<br />db.users.find({phone: {$exists: false}});</p><p><span id="MathJax-Element-10-Frame" class="MathJax"><span id="MathJax-Span-62" class="math"><span id="MathJax-Span-63" class="noError">type判断字段类型&nbsp;&nbsp;查询所有name字段是字符类型的&nbsp;&nbsp;db.users.find({name:&nbsp;{</span></span></span>type: 2}});&nbsp;<br />查询所有age字段是整型的&nbsp;<br />db.users.find({age: {$type: 16}});</p><p>对于字符字段，可以使用正则表达式&nbsp;<br />查询以字母b或者B带头的所有记录&nbsp;<br />db.users.find({name: /^b.*/i});</p><p>$elemMatch(1.3.1及以上版本)&nbsp;<br />为数组的字段中匹配其中某个元素</p><p>Javascript查询和<span id="MathJax-Element-11-Frame" class="MathJax"><span id="MathJax-Span-64" class="math"><span id="MathJax-Span-65" class="noError">where查询&nbsp;&nbsp;查询&nbsp;age&nbsp;&gt;&nbsp;18&nbsp;的记录，以下查询都一样&nbsp;&nbsp;db.users.find({age:&nbsp;{</span></span></span>gt: 18}});&nbsp;<br />db.users.find({$where: &quot;this.age &gt; 18&quot;});&nbsp;<br />db.users.find(&quot;this.age &gt; 18&quot;);&nbsp;<br />f = function() {return this.age &gt; 18} db.users.find(f);</p><p>排序sort()&nbsp;<br />以年龄升序asc&nbsp;<br />db.users.find().sort({age: 1});&nbsp;<br />以年龄降序desc&nbsp;<br />db.users.find().sort({age: -1});</p><p>限制返回记录数量limit()&nbsp;<br />返回5条记录&nbsp;<br />db.users.find().limit(5);&nbsp;<br />返回3条记录并打印信息&nbsp;<br />db.users.find().limit(3).forEach(function(user) {print('my age is ' + user.age)});&nbsp;<br />结果&nbsp;<br />my age is 18&nbsp;<br />my age is 19&nbsp;<br />my age is 20</p><p>限制返回记录的开始点skip()&nbsp;<br />从第3条记录开始，返回5条记录(limit 3, 5)&nbsp;<br />db.users.find().skip(3).limit(5);</p><p>查询记录条数count()&nbsp;<br />db.users.find().count();&nbsp;<br />db.users.find({age:18}).count();&nbsp;<br />以下返回的不是5，而是user表中所有的记录数量&nbsp;<br />db.users.find().skip(10).limit(5).count();&nbsp;<br />如果要返回限制之后的记录数量，要使用count(true)或者count(非0)&nbsp;<br />db.users.find().skip(10).limit(5).count(true);</p><p>分组group()&nbsp;<br />假设test表只有以下一条数据&nbsp;<br />{ domain: &quot;www.mongodb.org&quot;&nbsp;<br />, invoked_at: {d:&quot;2009-11-03&quot;, t:&quot;17:14:05&quot;}&nbsp;<br />, response_time: 0.05&nbsp;<br />, http_action: &quot;GET /display/DOCS/Aggregation&quot;&nbsp;<br />}&nbsp;<br />使用group统计test表11月份的数据count:count(*)、total_time:sum(response_time)、avg_time:total_time/count;&nbsp;<br />db.test.group(&nbsp;<br />{ cond: {&quot;invoked_at.d&quot;: {<span id="MathJax-Element-12-Frame" class="MathJax"><span id="MathJax-Span-66" class="math"><span id="MathJax-Span-67" class="mrow"><span id="MathJax-Span-68" class="mi">g</span><span id="MathJax-Span-69" class="mi">t</span><span id="MathJax-Span-70" class="mo">:&quot;</span><span id="MathJax-Span-71" class="mn">2009</span><span id="MathJax-Span-72" class="mo">&minus;</span><span id="MathJax-Span-73" class="mn">11</span><span id="MathJax-Span-74" class="mo">&quot;</span><span id="MathJax-Span-75" class="mo">,</span></span></span></span>lt: &quot;2009-12&quot;}}&nbsp;<br />, key: {http_action: true}&nbsp;<br />, initial: {count: 0, total_time:0}&nbsp;<br />, reduce: function(doc, out){ out.count++; out.total_time+=doc.response_time }&nbsp;<br />, finalize: function(out){ out.avg_time = out.total_time / out.count }&nbsp;<br />} );</p><p>[&nbsp;<br />{&nbsp;<br />&quot;http_action&quot; : &quot;GET /display/DOCS/Aggregation&quot;,&nbsp;<br />&quot;count&quot; : 1,&nbsp;<br />&quot;total_time&quot; : 0.05,&nbsp;<br />&quot;avg_time&quot; : 0.05&nbsp;<br />}&nbsp;<br />]</p><p>Java 应用示例</p><p>要使用Java操作MongoDB的话，要到官方网站下载一个驱动包，把包导入后，可以尝试来操作了（记得一定要开着服务器）</p><p>首先介绍一下比较常用的几个类</p><p>Mongo：连接服务器，执行一些数据库操作的选项，如新建立一个数据库等</p><p>DB：对应一个数据库，可以用来建立集合等操作</p><p>DBCollection：对应一个集合（类似表），可能是我们用得最多的，可以添加删除记录等</p><p>DBObjec：接口和BasicDBObject对象：表示一个具体的记录，BasicDBObject实现了DBObject，因为是key-value的数据结构，所以用起来其实和HashMap是基本一致的</p><p>DBCursor：用来遍历取得的数据，实现了Iterable和Iterator</p><p>接下来实际的操作一下，代码如下：</p><pre class="brush:java">import java.net.UnknownHostException;<br />import java.util.List;<br />import java.util.Set;<br />import com.mongodb.BasicDBObject;<br />import com.mongodb.DB;<br />import com.mongodb.DBCollection;<br />import com.mongodb.DBCursor;<br />import com.mongodb.DBObject;<br />import com.mongodb.Mongo;<br />import com.mongodb.MongoException;<br />public class MongoDbTest {<br />&nbsp; public static void main(String[] args) throws UnknownHostException, MongoException {<br />&nbsp;&nbsp;&nbsp; //Mongo m = new Mongo();<br />//Mongo m = new Mongo(&quot;localhost&quot;);<br />//获得数据库服务<br />Mongo m = new Mongo(&quot;localhost&quot;, 27017);<br />//得到数据库mytest<br />DB db = m.getDB(&quot;mytest&quot;);<br />//得到mytest数据库下所有表名<br />&nbsp;&nbsp;&nbsp; Set&lt;String&gt; colls = db.getCollectionNames();<br />&nbsp;&nbsp;&nbsp; for (String s : colls) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(s);<br />}<br />//得到testCollection表<br />DBCollection coll = db.getCollection(&quot;testCollection&quot;);<br />//new 一个BasicDBObject对象doc<br />BasicDBObject doc = new BasicDBObject();<br />//赋值<br />&nbsp;&nbsp;&nbsp; doc.put(&quot;name&quot;, &quot;MongoDB&quot;);<br />&nbsp;&nbsp;&nbsp; doc.put(&quot;type&quot;, &quot;database&quot;);<br />doc.put(&quot;count&quot;, 1);<br />//又new 一个BasicDBObject对象info<br />&nbsp;&nbsp;&nbsp; BasicDBObject info = new BasicDBObject();<br />&nbsp;&nbsp;&nbsp; info.put(&quot;x&quot;, 203);<br />info.put(&quot;y&quot;, 102);<br />//把info放入doc<br />doc.put(&quot;info&quot;, info);<br />//向testCollection表中插入一条数据<br />coll.insert(doc);<br />//查询一条数据<br />&nbsp;&nbsp;&nbsp; DBObject myDoc = coll.findOne();<br />&nbsp;&nbsp;&nbsp; System.out.println(myDoc);<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //循环插入100条数据到testCollection<br />&nbsp;&nbsp;&nbsp; for (int i=0; i &lt; 100; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coll.insert(new BasicDBObject().append(&quot;i&quot;, i));<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //Counting Documents in A Collection<br />&nbsp;&nbsp;&nbsp; System.out.println(coll.getCount());<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; //Using a Cursor to Get All the Documents<br />&nbsp;&nbsp;&nbsp; DBCursor cur = coll.find();<br />&nbsp;&nbsp;&nbsp; while(cur.hasNext()) {</pre>]]></description><category>数据库</category><comments>http://camnpr.com/database/1940.html#comment</comments><wfw:comment>http://camnpr.com/</wfw:comment><wfw:commentRss>http://camnpr.com/feed.asp?cmt=1940</wfw:commentRss><trackback:ping>http://camnpr.com/cmd.asp?act=tb&amp;id=1940&amp;key=8a294d8e</trackback:ping></item></channel></rss>
