Java数据库编程接口.ppt
Java数据库编程接口JDBC,教材第9章,JDBC概述,ODBC(Open DataBase Connectivity)微软制定的一个C语言与数据库的统一接口JDBC(Java DataBase Connectivity)为Java语言定义的一个SQL调用级接口。为访问关系数据库提供了一个标准接口。,JDBC概述,Java application,JDBC Driver Manager,JDBC API,JDBC Driver(数据库厂家提供),JDBC Driver API,DBMS,数据库连接,每个JDBC应用程序至少要有一个JDBC驱动程序版本,JDBC驱动程序是Driver接口类的实现。Driver类是驱动程序厂家实现的接口,Driver使DriverManager和JDBC应用程序层可以独立于具体的数据库系统。,应用程序,JDBC,Oracle驱动程序,MySQL驱动程序,JDBC API(类),java.sql.DriveManager 负责装载、拆除驱动程序,负责连接驱动程序。java.sql.Connection 实现对某一数据库的连接功能(建立连接)。java.sql.Statement 在一个给定的连接中作为执行SQL语句的容器。用于执行预编译的SQL声明用于执行数据库中存储过程的调用java.sql.ResultSet 保存SQL语句执行结果,数据库连接例(Oracle),Oracle安装后,设置classpath,例如:CLASSPATHc:oracleora92jdbclibojdbc14.jar注册(装入)oracle jdbc驱动程序语法:DriverManager.registerDriver(Driver driver)例:DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver();建立连接(到指定数据库)Connection con=DriverManager.getConnection(jdbc:oracle:thin:166.111.7.248:1521:o8i2,scott,tiger);该方法将挑选一个合适的已注册的JDBC驱动程序,执行sql语句Statement类,建立Statement类对象(sql容器)Statement stmt=conn.createStatement();查询:ResultSet rs=stmt.executeQuery(select ename,age from emp);修改:int count=stmt.executeUpdate(update emp set age=30 where ename=MARTIN)INSERT,UPDATE or DELETE(返回行数)DDL 语句(返回0),ResultSet类的方法,移动指针boolean rs.next();取结果集当前行的数据:语法:getXXX(列序号或列名)/方法名的重载String rs.getString(ename);int rs.getInt(age);或 int rs.getInt(2);,访问数据库例,import java.sql.*;class Test public static void main(String args)throws SQLException DriverManager.registerDriver(new oracle.jdbc.OracleDriver();Connection con=DriverManager.getConnection(jdbc:oracle:thin:166.111.7.248:1521:o8i2,帐号,密码);Statement stmt=con.createStatement();/创建Statement对象 System.out.println(-查询并显示所有系的学生-);ResultSet rs=stmt.executeQuery(SELECT*FROM student order by birthday);while(rs.next()/显示查询结果 System.out.print(rs.getString(sno)+);System.out.print(rs.getString(sname)+);System.out.print(rs.getString(sex)+);,9-1,访问数据库例,System.out.print(rs.getDate(birthday)+);System.out.println(rs.getString(dno)+);System.out.println(-统计并显示各系学生数-);rs=stmt.executeQuery(SELECT dno,count(*)as num FROM student group by dno);while(rs.next()/显示查询结果 System.out.print(rs.getString(dno)+);System.out.println(rs.getInt(num)+);System.out.println(-插入一个学生记录:-);String s=INSERT INTO student VALUES(s00000,林时,男,21-4月-1990,d01);stmt.executeUpdate(s);/添加一条记录,访问数据库例,System.out.println(-查询d01系的学生:-);rs=stmt.executeQuery(SELECT*FROM student WHERE dno=d01);/查询 while(rs.next()/显示 System.out.print(rs.getString(sno)+);System.out.println(rs.getString(sname)+);System.out.println(-删除一个学生记录-);stmt.executeUpdate(DELETE FROM student WHERE sname=林时);System.out.println(-删除记录后,查询d01系的学生-);rs=stmt.executeQuery(SELECT sno,sname FROM student WHERE dno=d01);/查询表格,访问数据库例,while(rs.next()/显示查询结果 System.out.print(rs.getString(sno)+);System.out.println(rs.getString(sname)+);stmt.close();/关闭语句 con.close();/关闭连接/main(),9-1,PreparedStatement类,予编译(反复执行效率高),带参数PreparedStatement ps=conn.preparedStatement(update emp set sal=sal+?where eno=?);ps.setFloat(1,210.00)ps.setInt(2,110592)ps.executeQuery();ps.executeUpdate();,CallableStatement类,执行存储过程CallableStatement cs=conn.prepareCall(call 过程名);cs.executeQuery();ps.execUpdate();,JDBC API 层次,驱动程序管理器,驱动程序,连接,语句,预处理语句,可调用语句,结果集,结果集,结果集,驱动程序层,应用程序层,JDBC应用,java application,DB server,Java Applet,Veb&DBserver,JDBC应用,小服务程序servletJSDK开发工具库javax.servlet.javax.servlet.http sun.servlet 包 Servlet类 方法 init serviceHttpServlet,Veb浏览器,应用服务器,数据库服务器,