??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩大片b站免费观看直播,性网站在线看,综合久久亚洲http://www.aygfsteel.com/Vincent-chenxj/category/36266.htmlzh-cnThu, 27 Nov 2008 15:34:50 GMTThu, 27 Nov 2008 15:34:50 GMT60JDBCq接数据库经验技巧集?/title><link>http://www.aygfsteel.com/Vincent-chenxj/articles/242969.html</link><dc:creator>Vincent-chen</dc:creator><author>Vincent-chen</author><pubDate>Thu, 27 Nov 2008 03:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/Vincent-chenxj/articles/242969.html</guid><wfw:comment>http://www.aygfsteel.com/Vincent-chenxj/comments/242969.html</wfw:comment><comments>http://www.aygfsteel.com/Vincent-chenxj/articles/242969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Vincent-chenxj/comments/commentRss/242969.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Vincent-chenxj/services/trackbacks/242969.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">Java数据库连接(JDBCQ由一l用 Java ~程语言~写的类和接口组成。JDBC 为工?数据库开发h员提供了一个标准的 APIQ他们能够用纯Java API 来编写数据库应用E序。然而各个开发商的接口ƈ不完全相同,所以开发环境的变化会带来一定的配置变化。本文主要集合了不同数据库的q接方式?<br />   一、连接各U数据库方式速查?<br />   下面|列了各U数据库使用JDBCq接的方式,可以作ؓ一个手册用?<br />   1、Oracle8/8i/9i数据库(thin模式Q?<br />   Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br />   String url="jdbc:oracle:thin:@localhost:1521:orcl"; //orcl为数据库的SID <br />   String user="test"; <br />   String password="test"; <br />   Connection conn= DriverManager.getConnection(url,user,password); <br /> <br />   2、DB2数据?<br />   Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); <br />   String url="jdbc:db2://localhost:5000/sample"; //sampleZ的数据库?<br />   String user="admin"; <br />   String password=""; <br />   Connection conn= DriverManager.getConnection(url,user,password); <br /> <br />   3、Sql Server7.0/2000数据?<br />   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); <br />   String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; <br />   //mydb为数据库 <br />   String user="sa"; <br />   String password=""; <br />   Connection conn= DriverManager.getConnection(url,user,password); <br /> <br />   4、Sybase数据?<br />   Class.forName("com.sybase.jdbc.SybDriver").newInstance(); <br />   String url =" jdbc:sybase:Tds:localhost:5007/myDB";//myDBZ的数据库?<br />   Properties sysProps = System.getProperties(); <br />   SysProps.put("user","userid"); <br />   SysProps.put("password","user_password"); <br />   Connection conn= DriverManager.getConnection(url, SysProps); <br /> <br />   5、Informix数据?<br />   Class.forName("com.informix.jdbc.IfxDriver").newInstance(); <br />   String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; <br />   user=testuser;password=testpassword"; //myDB为数据库?<br />   Connection conn= DriverManager.getConnection(url); <br /> <br />   6、MySQL数据?<br />   Class.forName("org.gjt.mm.mysql.Driver").newInstance(); <br />   String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" <br />   //myDB为数据库?<br />   Connection conn= DriverManager.getConnection(url); <br /> <br />   7、PostgreSQL数据?<br />   Class.forName("org.postgresql.Driver").newInstance(); <br />   String url ="jdbc:postgresql://localhost/myDB" //myDB为数据库?<br />   String user="myuser"; <br />   String password="mypassword"; <br />   Connection conn= DriverManager.getConnection(url,user,password); <br /> <br />   8、access数据库直q用ODBC?<br />   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ; <br />   String url="jdbc:odbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb"); <br />   Connection conn = DriverManager.getConnection(url,"",""); <br />   Statement stmtNew=conn.createStatement() ; <br />   二、JDBCq接MySql方式 <br />   下面是用JDBCq接MySql的一个小的教E?<br />   1、查N动程?<br />   MySQL目前提供的java驱动E序为Connection/JQ可以从MySQL官方|站下蝲Qƈ扑ֈmysql-connector-java-3.0.15-ga-bin.jar文gQ此驱动E序为纯java驱动E序Q不需做其他配|?<br />   2、动态指定classpath <br />   如果需要执行时动态指定classpathQ就在执行时采用Qcp方式。否则将上面?jar文g加入到classpath环境变量中?<br /> <br />   3、加载驱动程?<br />   try{ <br />   Class.forName(com.mysql.jdbc.Driver); <br />   System.out.println(Success loading Mysql Driver!); <br />   }catch(Exception e) <br />   { <br />   System.out.println(Error loading Mysql Driver!); <br />   e.printStackTrace(); <br />   } <br />   4、设|连接的url <br />   jdbcQmysqlQ?/localhost/databasename[?pa=va][Qpa=va]   <br />   三、以下列Z在用JDBC来连接Oracle数据库时可以使用的一些技?<br />   1、在客户端Y件开发中使用Thin驱动E序 <br />   在开发Java软g斚wQOracle的数据库提供了四U类型的驱动E序Q二U用于应用Y件、applets、servlets{客L软gQ另外二U用于数据库中的Java存储q程{服务器端Y件。在客户机端软g的开发中Q我们可以选择OCI驱动E序或Thin驱动E序。OCI驱动E序利用Java本地化接口(JNIQ,通过Oracle客户端Y件与数据库进行通讯。Thin驱动E序是纯Java驱动E序Q它直接与数据库q行通讯。ؓ了获得最高的性能QOracle在客L软g的开发中使用OCI驱动E序Q这g是正的。但我徏议用Thin驱动E序Q因为通过多次试发现Q在通常情况下,Thin驱动E序的性能都超q了OCI驱动E序?<br />   2、关闭自动提交功能,提高pȝ性能 <br />   在第一ơ徏立与数据库的q接Ӟ在缺省情况下Q连接是在自动提交模式下的。ؓ了获得更好的性能Q可以通过调用带布值false参数的ConnectioncȝsetAutoCommit()Ҏ关闭自动提交功能Q如下所C: <br />   conn.setAutoCommit(false); <br />   值得注意的是Q一旦关闭了自动提交功能Q我们就需要通过调用Connectioncȝcommit()和rollback()Ҏ来h工的方式对事务进行管理?<br />   3、在动态SQL或有旉限制的命令中使用Statement对象 <br />   在执行SQL命oӞ我们有二U选择Q可以用PreparedStatement对象Q也可以使用Statement对象。无论多次C用同一个SQL命oQPreparedStatement都只对它解析和编译一ơ。当使用Statement对象Ӟ每次执行一个SQL命oӞ都会对它q行解析和编译。这可能会你认为,使用PreparedStatement对象比用Statement对象的速度更快。然而,我进行的试表明Q在客户端Y件中Q情况ƈ非如此。因此,在有旉限制的SQL操作中,除非成批地处理SQL命oQ我们应当考虑使用Statement对象?<br />   此外Q用Statement对象也得编写动态SQL命o更加单,因ؓ我们可以字W串q接在一P建立一个有效的SQL命o。因此,我认为,Statement对象可以使动态SQL命o的创建和执行变得更加单?<br />   4、利用helper函数对动态SQL命oq行格式?<br />   在创Z用Statement对象执行的动态SQL命oӞ我们需要处理一些格式化斚w的问题。例如,如果我们惛_Z个将名字O'Reilly插入表中的SQL命oQ则必须使用二个相连?#8220;'”h换O'Reilly中的“'”受完成这些工作的最好的Ҏ是创Z个完成替换操作的helperҎQ然后在q接字符串心服用公式表达一个SQL命oӞ使用创徏的helperҎ。与此类似的是,我们可以让helperҎ接受一个Date型的|然后让它输出ZOracle的to_date()函数的字W串表达式?<br />   5、利用PreparedStatement对象提高数据库的M效率 <br />   在用PreparedStatement对象执行SQL命oӞ命o被数据库q行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象Ӟ它就会被再解析一ơ,但不会被再次~译。在~冲Z可以发现预编译的命oQƈ且可以重C用。在有大量用L企业U应用Y件中Q经怼重复执行相同的SQL命oQ用PreparedStatement对象带来的编译次数的减少能够提高数据库的M性能。如果不是在客户端创建、预备、执行PreparedStatementd需要的旉长于StatementdQ我会徏议在除动态SQL命o之外的所有情况下使用PreparedStatement对象?<br />   6、在成批处理重复的插入或更新操作中用PreparedStatement对象 <br />   如果成批地处理插入和更新操作Q就能够显著地减它们所需要的旉。Oracle提供的Statement?CallableStatementq不真正地支持批处理Q只有PreparedStatement对象才真正地支持批处理。我们可以用addBatch()和executeBatch()Ҏ选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()Ҏ和标准的executeUpdate()Ҏ选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制Q可以以如下所C的方式调用setExecuteBatch()Q?<br />   PreparedStatement pstmt3D null; <br />   try { <br />   ((OraclePreparedStatement)pstmt).setExecuteBatch(30); <br />   ... <br />   pstmt.executeUpdate(); <br />   } <br />   调用setExecuteBatch()时指定的值是一个上限,当达到该值时Q就会自动地引发SQL命o执行Q标准的executeUpdate()Ҏ׃被作为批处理送到数据库中。我们可以通过调用PreparedStatementcȝsendBatch()Ҏ随时传输批处理Q务?<br />   7、用Oracle locatorҎ插入、更新大对象QLOBQ?<br />   Oracle的PreparedStatementcM完全支持BLOB和CLOB{大对象的处理,其是Thin驱动E序不支持利用PreparedStatement对象的setObject()和setBinaryStream()Ҏ讄BLOB的|也不支持利用setCharacterStream()Ҏ讄CLOB的倹{只有locator本n中的Ҏ才能够从数据库中获取LOBcd的倹{可以用PreparedStatement对象插入或更新LOBQ但需要用locator才能获取LOB的倹{由于存在这二个问题Q因此,我徏议用locator的方法来插入、更新或获取LOB的倹{?<br />   8、用SQL92语法调用存储q程 <br />   在调用存储过E时Q我们可以用SQL92或Oracle PL/SQLQ由于用Oracle PL/SQLq没有什么实际的好处Q而且会给以后l护你的应用E序的开发h员带来麻烦,因此Q我在调用存储过E时使用SQL92?<br />   9、用Object SQL对象模式{Ud数据库中 <br />   既然可以Oracle的数据库作ؓ一U面向对象的数据库来使用Q就可以考虑应用程序中的面向对象模式{到数据库中。目前的Ҏ是创建Java bean作ؓ伪装的数据库对象Q将它们的属性映到关系表中Q然后在q些bean中添加方法。尽这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的Q因此其他访问数据库的应用Y件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创徏一个新的数据库对象cd在数据库中模仿其数据和操作,然后使用JPublisher{工L成自qJava beancR如果用这U方式,不但Java应用E序可以使用应用软g的对象模式,其他需要共享你的应用中的数据和操作的应用Y件也可以使用应用软g中的对象模式?<br />   10、利用SQL完成数据库内的操?<br />   我要向大家介l的最重要的经验是充分利用SQL的面向集合的Ҏ来解x据库处理需求,而不是用Java{过E化的编E语a?<br />   如果~程人员要在一个表中查找许多行Q结果中的每个行都会查找其他表中的数据,最后,~程人员创徏了独立的UPDATE命o来成批地更新W一个表中的数据。与此类似的d可以通过在set子句中用多列子查询而在一个UPDATE命o中完成。当能够在单一的SQL命o中完成Q务,何必要让数据在网上流来流ȝQ我用户认真学习如何最大限度地发挥SQL的功能?</span> <img src ="http://www.aygfsteel.com/Vincent-chenxj/aggbug/242969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Vincent-chenxj/" target="_blank">Vincent-chen</a> 2008-11-27 11:41 <a href="http://www.aygfsteel.com/Vincent-chenxj/articles/242969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ٳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͨɽ</a>| <a href="http://" target="_blank">ľ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">罭</a>| <a href="http://" target="_blank">Ԫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank">Ϻӿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">־</a>| <a href="http://" target="_blank">ֶ</a>| <a href="http://" target="_blank">½</a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank">կ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ֲ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">÷ӿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>