您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > JDBC-MYSQL数据库访问技术
JDBC(mysql)数据库访问技术mr.Zhuzx2020/4/13什么是JDBC•JDBC(JavaDataBaseConnectivity)是Java与数据库的接口规范•JDBC定义了一个支持标准SQL功能的通用底层的应用程序编程接口(API)•定义了若干Java中的类,表示数据库连接、SQL指令、结果集、数据库元数据等•mysql分页:limit2,20•oralce子查询:ROWNUM2020/4/132JDBC特性•独立于特定数据库•对硬件平台、操作系统异构性的支持•JDBC驱动程序管理器是内置的,驱动程序本身也可通过Web浏览器自动下载,无须安装、配置•在不同数据库功能模块层次上提供统一的用户界面,可以实现不同的数据库连接.2020/4/133•1、加载驱动程序(注册JDBC驱动程序)Class.forName(driver);•2、建立到指定数据库的连接.DriverManager.getConnection(url,username,userpass);•3、提交数据库查询PreparedStatementps对象(CURD)•4、获取查询结果//执行查询返回一个结果集对象(表中的数据)ResultSetrs=ps.executeQuery();2020/4/134连接(Connection)•Connection对象代表与数据库的连接•连接过程包括所执行的SQL语句和在该连接上所返回的结果•Connectionconn=DriverManager.getConnection(url,username,userpass);2020/4/135打开连接•与数据库建立连接的标准方法是调用DriverManager.getConnection方法•例子如下:Stringdriver=org.gjt.mm.mysql.Driver;Stringurl=jdbc:mysql://127.0.0.1:3306/JJA171201;Stringusername=root;Stringuserpass=123123;Class.forName(driver);Connectionconn=DriverManager.getConnection(url,username,userpass);if(conn!=null){System.out.println(连接成功+conn);}else{System.out.println(err);}2020/4/136打开连接例子•privateStringurl=jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=mydb;privateStringusername=sa;privateStringpassword=sa;publicvoidtestJDBC(){try{Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver).newInstance();//第一中加载驱动的方法//DriverManager.registerDriver(newcom.microsoft.jdbc.sqlserver.SQLServerDriver());//第二种为注册驱动的方法conn=DriverManager.getConnection(url,username,password);System.out.println(数据库连接成功);}catch(Exceptione){e.printStackTrace();}}2020/4/137案例代码*直接使用工具去打开DB的连接*代码封装,块化,组件化,框架化,应用化,*@authorMr.zhuzx•publicclassUtilsJDBC{•//常量staticfinal命名上是全大字的字母•publicstaticfinalStringDRIVER=org.gjt.mm.mysql.Driver;•publicstaticfinalStringURL=jdbc:mysql://127.0.0.1:3306/JJA171201;•publicstaticfinalStringUSERNAME=root;•publicstaticfinalStringPASSWORD=123123;•}案例代码/***打开连接*/publicstaticConnectiongetConn(){Connectionconn=null;try{Class.forName(DRIVER);conn=DriverManager.getConnection(URL,USERNAME,PASSWORD);}catch(Exceptione){e.printStackTrace();}System.out.println(conn:+conn);returnconn;}案例代码/***关闭连接**@paramconn*我是需要关闭的对象*/publicstaticvoidcolseConn(Connectionconn){try{conn.close();conn=null;System.out.println(connclose....);}catch(Exceptione){e.printStackTrace();}}JDBCURL•JDBCURL提供了一种标识数据库的方法,可以使相应的驱动程序能识别该数据库并与之建立连接•JDBCURL应允许驱动程序编程员将一切所需的信息编入其中,而无须要求用户去做任何系统管理工作•JDBCURL应允许某种程度的间接性。也就是说,JDBCURL可指向逻辑主机或数据库名,而这种逻辑主机或数据库名将由网络命名系统动态地转换为实际的名称2020/4/1311JDBCURL的标准语法•JDBCURL的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:jdbc:子协议:子名称•jdbc─协议。JDBCURL中的协议总是jdbc•子协议─驱动程序名或数据库连接机制的名称•子名称─一种标识数据库的方法2020/4/1312JDBCURL举例•Jdbc:oracle:thin:@127.0.0.1:1521:edudb•Jdbc:microsoft:sqlserver://localhost:1433•Jdbc:microsoft:sqlserver://localhost:1433;DataBaseName=mydb2020/4/1313发送SQL语句•JDBC提供了三个类,用于向数据库发送SQL语句StatementPreparedStatementCallableStatement2020/4/1314对象Statement•由Connection的方法createStatement所创建•Statement对象用于发送简单的SQL语句2020/4/1315对象PreparedStatement•由Connection的方法prepareStatement所创建•PreparedStatement对象用于发送带有一个或多个输入参数的SQL语句•PreparedStatement的实例扩展了Statement,因此它们都包括了Statement的方法•PreparedStatement对象有可能比Statement对象的效率更高,因为它已被预编译过并存放在那以供将来使用2020/4/1316对象CallableStatement•由方法prepareCall所创建。CallableStatement对象用于执行SQL储存程序─一组可通过名称来调用的SQL语句2020/4/1317事务•事务由一个或多个这样的语句组成:这些语句已被执行、完成并被提交或还原•当调用方法commit或rollback时,当前事务即告就结束,另一个事务随即开始•方法commit使SQL语句对数据库所做的任何更改成为永久性的,它还将释放事务持有的全部锁。而方法rollback将弃去那些更改2020/4/1318事务隔离级别•必须有某种途径来管理两个事务同时对一个数据库进行操作时可能发生的冲突•五个隔离级别TRANSACTION_NONETRANSACTION_READ_UNCOMMITTEDTRANSACTION_READ_COMMITTEDTRANSACTION_REPEATABLE_READTRANSACTION_SERIALIZABLE•使用Connection.setTransactionIsolation()设置你想要的事物级别2020/4/1319DriverManager•DriverManager类是JDBC的管理层,作用于用户和驱动程序之间•跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接2020/4/1320跟踪可用驱动程序•DriverManager类包含一列Driver类,它们已通过调用方法DriverManager.registerDriver对自己进行了注册•所有Driver类都包含一个静态部分,它创建该类的实例,然后在加载该实例时DriverManager类进行注册•加载Driver类,然后自动在DriverManager中注册的方式Class.forName(acme.db.Driver);2020/4/1321建立连接•加载Driver类并在DriverManager类中注册后,它们即可用来与数据库建立连接•当调用DriverManager.getConnection方法发出连接请求时,DriverManager将检查每个驱动程序,查看它是否可以建立连接•DriverManager将使用它所找到的第一个可以成功连接到给定URL的驱动程序•Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);//加载驱动程序Stringurl=jdbc:odbc:fred;DriverManager.getConnection(url,userID,passwd);2020/4/1322Statement语句•创建Statement对象Statementstmt=con.createStatement();•使用Statement对象执行语句executeQuery用于产生单个结果集的语句executeUpdate用于执行INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句•语句完成连接处于自动提交模式连接处于非自动提交模式•关闭Statement对象作为一种好的编程风格,应在不需要Statement对象时显式地关闭它们2020/4/1323结果设置ResultSet•ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些行中数据的访问•例子java.sql.Statementstmt=conn.createStatement();ResultSetr=stmt.executeQuery(SELECTa,b,cFROMTable1);while(r.next()){inti=r.getInt(a);Strings=r.getString(b);floatf=r.getFloat(c);}2020/4/1324为什么使用连接池•可能发生的情况:每一个页面请求导致一次数据库访问•连接数据库不仅要开销一定的通讯和内存资源,还必须完成用户验证、安全上下文配置这类任务•成百上千个用户•如果某个基于数据库的Web应用只需建立一次初始连接,不同页面请求能够共享同一连接,就能获得显著的性能改善2020/4/1325未使用连接池的情况2020/4/1326使用了连接池的情况2020/4/1327Tomcat连接池配置•Server.xml•Web.xml2020/4/1328从连接池中获取连接DataSourceds=(DataSource)ctx.lookup(java:comp/env/jdbc/TestDB);
本文标题:JDBC-MYSQL数据库访问技术
链接地址:https://www.777doc.com/doc-4775206 .html