您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > JDBC 学习笔记_bruce
DAY11WhatisJDBC?2ThemostimportanthiberarchyofJDBCinterface.3ThetypeofJDBC.4ThestepofdeveloppingaJDBCapp.5Howtohandleresultset?6Statement******************************************************如何学习?必须学习按需学习目标:牢固掌握必须学习的内容,形成一套适合自己的学习方法,可以快速地学习按需学习的知识。图:study.jpg1WhatisJDBC?1)JDBC(JavaDatabaseConnectivity)是基于JAVA语言访问数据库的一种技术。2)JDBC的设计思想:1.由SUN公司(JCP)提供访问数据库的接口2.由数据库厂商提供对这些接口的实现,程序员编程时都是针对接口进行编程的。3)JDBC包括一套JDBC的API和一套程序员和数据库厂商都必须去遵守的规范。主要由两部分组成,都被包含在J2SE平台里面。java.sql包:提供访问数据库基本的功能javax.sql包:提供扩展的功能图:whatisjdbc.jpg4)数据库中间件Twotierapp.图:jdbcinthreetiers.jpgThreetierapp.jdbcintwotiers.jpg5)JDBC可以做些什么?a连接到数据库;b在Javaapp中执行SQL命令。c处理结果。2ThemostimportanthiberarchyofJDBCinterface.(5大最重要接口)ConnectionStatementPreparedStatementCallableStatementResultSet图:therelationshipbetween5interfaces.jpg3ThetypeofJDBC.1)Type1:JDBC-ODBCbridgea要求客户端必须安装ODBC驱动b执行效率比较低,对于那些大数据量存取的应用是不适合的c适用于快速的原型系统,没有提供JDBC驱动的数据库如Access注:ODBC(OpenDatabaseConnectivity)一个以C语言为基础访问SQL为基础数据库引擎的接口,它提供了一致的接口用于和数据库沟通以及访问数据。图:type1.jpg2)Type2:JavatonativeAPI这种驱动比起JDBC-ODBC桥执行效率略有提高.但是,它仍然需要在客户端加载数据库厂商提供的代码库.这样就不适合基于internet的应用。图:type2.jpg3)Type3:JavatoNet适合那种需要同时连接多个不同种类的数据库并且对并发连接要求高的应用。图:type3.jpg4)Type4:JavatoNativeDatabase最高的性能,通过自己的本地协议直接与数据库引擎通信。图:type4.jpg注:在应用中采用什么类型的驱动应该根据实际情况决定。而且并不是所有的数据库都支持type1-type4,必须查看该数据库的相关手册。比如:DB2UDBv7不支持JDBCType4DriverIBMDB2UDBv8支持四种类型的驱动4ThestepofdeveloppingaJDBCapp.1)注册JDBC驱动程序3种方法选择一种aClass.forName(oracle.jdbc.driver.OracleDriver);bDriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());cjava-Djdbc.drivers=oracle.jdbc.driver.OracleDrivercom.FirstJDBC----------------------------------------------------publicclassOracleDriverimplementsjava.sql.Driver{static{java.sql.DriverManager.registerDriver(newOracleDriver());}-----------------------------------------------------图:register_jdbc.jpg232)创建数据库连接获取Connection的方法(1)通过DriverManager获取Connectionconn=DriverManager.getConnection(url,“username,“password);(2)通过Driver直接获取(不推荐使用)publicstaticConnectiongetConnection(){Stringurl=jdbc:mysql://localhost:3306/tarena;StringuserName=narci;Stringpassword=11;Propertiesuser=newProperties();//key为user,password,不同的数据库的driver的key不是固定的//视乎driver的实现者user.setProperty(user,userName);user.setProperty(password,password);Driverdriver=null;Connectionconn=null;try{driver=newcom.mysql.jdbc.Driver();conn=driver.connect(url,user);}catch(Exceptione){e.printStackTrace();}returnconn;}JDBC的URL=协议名+子协议名+数据源名。a协议名总是“jdbc”。b子协议名由JDBC驱动程序的编写者决定。c数据源名也可能包含用户与口令等信息;这些信息也可单独提供。几种常见的数据库连接-------------------------------jdbc-odbc---------------驱动:sun.jdbc.odbc.JdbcOdbcDriverURL:jdbc:odbc:datasource_name-------------------------------oracle------------------驱动:oracle.jdbc.driver.OracleDriverURL:jdbc:oracle:thin:@machine_name:port:dbname注:machine_name:数据库所在的机器的名称;port:端口号,默认是1521-------------------------------mysql-------------------驱动:org.gjt.mm.mysql.Driveror:com.mysql.jdbc.DriverURL:jdbc:mysql://machine_name:port/dbname注:machine_name:数据库所在的机器的名称;port:端口号,默认3306---------------------------SQLServer------------------驱动:com.microsoft.jdbc.sqlserver.SQLServerDriverURL:jdbc:microsoft:sqlserver://machine_name:port;DatabaseName=dbname注:machine_name:数据库所在的机器的名称;port:端口号,默认是1433--------------------------DB2--------------------------驱动:com.ibm.db2.jdbc.app.DB2DriverURL:jdbc:db2://machine_name:port/dbname注:machine_name:数据库所在的机器的名称;port:端口号,默认是5000-------------------------------------------------------3)创建Statement对象Statementstm=con.createStatement();4)执行SQL语句rs=stm.executeQuery(sql);5)处理返回的结果集while(rs.next()){...}6)关闭JDBC资源a首先关闭记录集;b其次关闭Statement;c最后关闭连接对象。if(rs!=null){try{rs.close();}catch(SQLExceptione){e.printStackTrace();}}if(stm!=null){try{stm.close();}catch(SQLExceptione){e.printStackTrace();}}if(con!=null){try{con.close();}catch(SQLExceptione){e.printStackTrace();}}5Howtohandleresultset?1)通过index获取字段的值。2)通过字段名获取字段的值。3)Java类型到SQL类型的映射。ResultSet接口重载的两个方法StringgetString(intcolumnIndex)//int类型的参数StringgetString(StringcolumnName)//String类型的参数columnIndex:select子句中该字段的索引位置SELECT*FROMstudent;//默认顺序按表里的定义顺序rs.getString(3);//stu_sexSELECTstu_name,stu_sex,stu_descFROMstudent;rs.getString(3);//stud_desc以Java编程语言中String的形式检索此ResultSet对象的当前行中指定列的值。rs.getString(stu_name);//stu_namers.getInt(stu_id);//stu_idrs.getByte(columnName);6Statement主要方法执行查询SQL语句executeQuery返回结果集!ResultSetexecuteQuery(Stringsql)throwsSQLException;执行更新SQL语句intexecuteUpdate(Stringsql)throwsSQLException在不知道SQL语句类型(查询、更新甚至创建等)的情况下使用booleanexecute(Stringsql)throwsSQLException如果第一个结果为ResultSet对象,则返回true;如果其为更新计数或者不存在任何结果,则返回falsebooleanflag=stmt.execute(sql);ResultSetrs=null;introws=0;if(flag)rs=stmt.getResultSet();elserows=stmt.getUpdateCount();DAY21PreparedStatement2CallableStatement3Meta-data.4Exception.5Transaction(-)//--EJB6Exercise*******************************************************1PreparedStatement用来处理“同构SQL”同构SQL:SQL结构、关键部分相同的SQL语句。Java程序中的SQL语句,传到DB后,DB分两步执行SQL:-编译SQL一次把sql传入DB-执行编译后的可执行程序多次执行使用PreparedStatement,可大大减少SQL语句的编译次数,节省时间。PreparedStatementStringsql=SELECT*FROMstudentWHEREstu_se
本文标题:JDBC 学习笔记_bruce
链接地址:https://www.777doc.com/doc-4897360 .html