﻿<?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-JAVA-文章分类-JDBC</title><link>http://www.blogjava.net/hitlang/category/15674.html</link><description>学以致用</description><language>zh-cn</language><lastBuildDate>Fri, 02 Mar 2007 06:39:34 GMT</lastBuildDate><pubDate>Fri, 02 Mar 2007 06:39:34 GMT</pubDate><ttl>60</ttl><item><title>jdbc学习笔记</title><link>http://www.blogjava.net/hitlang/articles/71849.html</link><dc:creator>liulang</dc:creator><author>liulang</author><pubDate>Mon, 25 Sep 2006 15:06:00 GMT</pubDate><guid>http://www.blogjava.net/hitlang/articles/71849.html</guid><wfw:comment>http://www.blogjava.net/hitlang/comments/71849.html</wfw:comment><comments>http://www.blogjava.net/hitlang/articles/71849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hitlang/comments/commentRss/71849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hitlang/services/trackbacks/71849.html</trackback:ping><description><![CDATA[
		<p>2004-9-13     星期一     小雨</p>
		<p>l. 连接到数据库的方法<br />答：1) ODBC(Open Database Connectivity)<br />       一个以C语言为基础访问SQL为基础数据库引擎的接口，它提供了一致的接口用于和数据库沟通以及访问数据。<br />    2) JDBC<br />       Java版本的ODBC</p>
		<p>2. JDBC应用编程接口<br />答：JDBC应用编程接口是：<br />    1) 标准的数据访问接口，可以连到不同的数据库;<br />    2) JAVA编程语言的一组类和接口。<br />    JDBC应用编程接口能够：<br />    1) 连接到数据库;<br />    2) 发SQL查询字符串到数据库;<br />    3) 处理结果。<br />    JDBC应用编程接口有二个主要的部分：<br />    1) JAVA应用程序开发接口面向JAVA应用程序开发者;<br />    2) JDBC驱动程序开发接口<br />    <br />3. JDBC Driver<br />答：1) 一大堆实现了JDBC类和接口的类;<br />    2) 提供了一个实现java.sql.Driver接口的类。</p>
		<p>4. JDBC Driver的四种类型<br />答：1) JDBC-ODBC桥<br />    由ODBC驱动提供JDBC访问<br />    2) 本地API<br />    部分Java driver把JDBC调用转化成本地的客户端API<br />    3) JDBC-net<br />    纯的Java driver，将JDBC调用转入DBMS，与网络协议无关。然后通过服务器将调用转为DBMS协议。<br />    4) 本地协议<br />    纯的java driver，将JDBC调用直接转为DBMS使用的网络协议</p>
		<p>5. JDBC开发者接口<br />答：1) java.sql--java 2平台下JDBC的主要功能，标准版(J2SE)<br />    2) javax.sql--java 2平台下JDBC增强功能，企业版(J2EE)</p>
		<p>6. 使用URL确认数据库<br />答：我们使用URL来确定一个数据库(正确的Driver,正确的主机,正确的协议，正确的协议，正确的用户名和密码);<br />    语法：protocol:subprotocol:subname<br />    范例：jdbc:db2:MyTest<br />          jdbc:db2://localhost:6789/MyTest</p>
		<p>7. javax.sql包JDBC2.0的增强功能<br />答：1) 数据源接口;<br />    2) 连接池;<br />    3) 分布式交易;<br />    4) 行集;</p>
		<p>8. 创建一个基本的JDBC应用<br />答：1) 步骤一：注册一个driver;<br />    2) 步骤二：建立一个到数据库的连接;<br />    3) 步骤三：创建一个statement;<br />    4) 步骤四：执行SQL语句;<br />    5) 步骤五：处理结果;<br />    6) 步骤六：关闭JDBC对象</p>
		<p>9. 注册一个Driver(步骤一)<br />答：1) driver被用于连接到数据库;<br />    2) JDBC应用编程接口使用第一个能成功连接到给定URL的driver;<br />    3) 在同一时间可以装载多个driver</p>
		<p>10.注册一个driver的方法：<br />答：1) 使用类loader(装载;实例化;注册入DriverManager)<br />       a. Class.forName("Com.ibm.db2.jdbc.app.DB2Driver");<br />       b. Class.forName("Com.ibm.db2.jdbc.net.DB2Driver");<br />       c. Class.forName("Com.microsoft.jdbc.sqlServer.SQLServerDriver);<br />       d. Class.forName("oracl.jdbc.driver.OracleDriver");<br />       e. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");<br />    2) 实例化一个Driver<br />       a. Driver drv = new COM.cloudscape.core.RmiJdbcDriver();</p>
		<p>2004-9-14     星期二     阴</p>
		<p>1. 建立一个到数据库的连接(步骤二)<br />答：DriverManager调用getConnection(urlString)方法，实际上调用的是driver的connect(urlString)方法;<br />    1) 当一个driver肯定地对应到一个数据库URL，DriverManager建立一个连接;<br />    2) 当没有driver匹配，返回null然后下一个driver被检验;<br />    3) 假如没有建立连接，抛出一个SQLExcepiton异常</p>
		<p>2. 经常使用的一些JDBC URL<br />答：1) JDBC-ODBC: jdbc:odbc:&lt;DB&gt;<br />    2) Oracle: jdbc:oracle:oci:@&lt;sid&gt; or jdbc:oracle:thin:@&lt;SID&gt;<br />    3) Weblogic MS-SQL: jdbc:weblogic:mssqlserver4:&lt;DB&gt;@&lt;HOST&gt;:&lt;PORT&gt;<br />    4) DB2: jdbc:db2:MyTest or jdbc.db2://localhost:6789/MyTest(需要用户名和密码)</p>
		<p>3. Driver连接方法<br />答：1) 创建一个到指定Driver实例的直接调用;<br />    2) 避免一般访问的问题<br />       Driver drv = new COM.ibm.db2.jdbc.app.DB2Driver();<br />       Connection con = null;<br />       try {con = drv.connect("jdbc:db2:MyTest",new Properties())}<br />       catch(SQLException e){}</p>
		<p>4. 创建一个Statement(步骤三)<br />答：1) Statement的三个接口:<br />       a. Statement;<br />       b. PreparedStatement(继承自Statement);<br />       c. CallableStatement(继承自PreparedStatement);<br />    2) 使用方法Connection.createStatement()得到一个Statement对象</p>
		<p>5. PreparedStatement对象<br />答：1) 调用ProparedStatement比statement更为高效;<br />    2) 继承自Statement;<br />    3) 语法：PreparedStatement pstm = connection.prepareStatement(sqlString);</p>
		<p>6. CallableStatement对象<br />答：1) 通过CallableStatement调用数据库中的存储过程;<br />    2) 继承自PreparedStatement;<br />    3) CallableStatement cstm = connection.prepareCall("{call return_student[?,?]}");<br />       cstm.setString(1,"8623034");<br />       cstm.registerOutparameter(2, Types.REAL);<br />       cstm.execute();<br />       float gpa = cstm.getFloat(2);</p>
		<p>7. Statement接口的比较<br />答：             | Statement           | PreparedStatement         |  CallableStatement<br />    ------------------------------------------------------------------------------<br />    写代码位置   |   客户端            | 客户端                    |  服务器端<br />    ------------------------------------------------------------------------------<br />    写代码位置   |   客户端            | 服务器端                  |  服务器端<br />    ------------------------------------------------------------------------------<br />    编写代码技术 |Java，SQL操作        |Java，SQL操作              |  数据库的程序语言，如PL/SQL<br />    ------------------------------------------------------------------------------<br />    可配置性     |   高                |第一次高，以后低           |  低<br />    ------------------------------------------------------------------------------<br />    可移植性     |   高                |假设支持PreparedStatement的话高 <br />    ------------------------------------------------------------------------------<br />    传输效率     |   低                |第一次低，以后高           |  高</p>
		<p>8. 执行SQL Statement(步骤四)<br />答：通过接口方法将SQL语句传输至黙认的数据库连接，返回结果可能是一个数据表，可以通过java.sql.ResultSet访问。<br />    1) Statement的接口方法：<br />    a. executeQuery(sqlString): 执行给定的SQL声明，返回一个结果集(ResultSet)对象;<br />    b. executeUpdate(sqlString): 执行给定的SQL声明，可以是INSERT、UPDATE或DELETE声明，也可以是SQL DDL声明;<br />    c. execute(sqlString): 执行给定的SQL声明。</p>
		<p>9. 处理结果(步骤五)<br />答：1) 使用结果集(ResultSet)对象的访问方法获取数据;<br />       a. next():下一个记录<br />       b. first():第一个记录<br />       c. last():最后一个记录<br />       d. previous():上一个记录<br />    2) 通过字段名或索引取得数据<br />    3) 结果集保持了一个指向了当前行的指针，初始化位置为第一个记录前。</p>
		<p>10. 关闭JDBC对象(步骤六)<br />答：1) 首先关闭记录集;<br />    2) 其次关闭声明;<br />    3) 最后关闭连接对象。</p>
		<p>11. 数据表和类对应的三种关系：<br />答：1) 一个表对应一个类;<br />    2) 一个表对应相关类;<br />    3) 一个表对应整个类关系层</p>
		<p>12. 类间关系的几种表设计：<br />答：1) 多对一，<br />    2) 一对一: <br />    3) 一对多：<br />    4) 多对多：</p>
		<p>13. SQL数据类型及其相应的Java数据类型<br />答：SQL数据类型                     Java数据类型              说明<br />    ------------------------------------------------------------------<br />    INTEGER或者INT                  int                     通常是个32位整数<br />    SMALLINT                        short                   通常是个16位整数<br />    NUMBER(m,n) DECIMAL(m,n)        Java.sql.Numeric        合计位数是m的定点十进制数，小数后面有n位数<br />    DEC(m,n)                        Java.sql.Numeric        合计位数是m的定点十进制数，小数后面有n位数<br />    FLOAT(n)                        double                  运算精度为n位二进制数的浮点数<br />    REAL                            float                   通常是32位浮点数<br />    DOUBLE                          double                  通常是64位浮点数<br />    CHARACTER(n)或CHAR(n)           String                  长度为n的固定长度字符串<br />    VARCHAR(n)                      String                  最大长度为n的可变长度字符串<br />    BOOLEAN                         boolean                 布尔值<br />    DATE                            Java.sql.Date           根据具体设备而实现的日历日期<br />    TIME                            Java.sql.Time           根据具体设备而实现的时戳<br />    TIMESTAMP                       Java.sql.Timestamp      根据具体设备而实现的当日日期和时间<br />    BLOB                            Java.sql.Blob           二进制大型对象<br />    CLOB                            Java.sql.Clob           字符大型对象<br />    ARRAY                           Java.sql.Array<br />    </p>
		<p>2004-9-15     星期三      阴</p>
		<p>1. 元数据<br />答：关于数据的信息，例如类型或者容量。通过JDBC API可以访问：<br />    1) 数据库元数据;<br />       a. 使用connection.getMetadata方法返回DataMetaData引用<br />       b. 能够使用isReadOnly此类方法获取信息<br />    2) 结果集元数据;<br />       a. 使用ResultSet.getMetadata方法返回ResultSetMetaData引用<br />       b. 能够使用getColumnCount此类方法获取信息</p>
		<p>2. 事务处理<br />答：1) 一系列的动作作为一个不可分的操作;<br />    2) JDBC API中使用事务处理步骤：<br />       a. 用false作为参数调用setAutoCommit方法;<br />       b. 执行一或多个关于数据库的操作;<br />       c. 调用commit方法完成改变;<br />       d. 恢复上次提交后的改变，调用rollback方法.</p>
		<p>       try<br />       {<br />          con.setAutoCommit(false);<br />          Statement stm = con.createStatement();<br />          stm.executeUpdate("insert into student(name, age, gpa) values('gzhu', 30, 4.8)");<br />          stm.commit();<br />       }<br />       catch(SQLException e)<br />       {<br />          try<br />          {<br />             con.rollback();<br />          }<br />          catch(Exception e)<br />          {<br />          }<br />       }</p>
		<p>3. 并发控制<br />答：1) 设置隔离级别方法：setTransactionIsolation<br />    2) 隔离级别静态变量<br />       a. TRANSACTION_NONE：只读的数据字典;<br />       b. TRANSACTION_READ_UNCOMMITTED：只读未提交数据;<br />       c. TRANSACTION_READ_COMMITTED：只读未提交数据;<br />       d. TRANSACTION_REPEATABLE_READ：重复读取数据;<br />       e. TRANSACTION_SERIALIZABLE：无论做什么操作都不许别人动。<br />    3) 示例：con.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);</p>
		<p>4. JDBC 2.0 应用程序编程接口增强功能<br />答：1) ResultSet增强：<br />       a. 可以回卷;<br />       b. 可以修改;<br />       设置示例：Statement stm = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);<br />    2) Statement增强了批量修改能力(batch updates);<br />    3) 更高级的数据类型(例：Struct)。</p>
		<p>5. JDBC 2.0标准扩展<br />答：1) JNDI(Java Naming and Directory Interface): 解决离散状态下Object的查找;<br />    2) 连接池：在内存中保存了一个数据库连接，不需要注册驱动器，提高性能的重要方法。</p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p> </p>
		<p> </p>
<img src ="http://www.blogjava.net/hitlang/aggbug/71849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hitlang/" target="_blank">liulang</a> 2006-09-25 23:06 <a href="http://www.blogjava.net/hitlang/articles/71849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>