资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,Java语言程序设计,清华大学出版社,第10章 java数据库连接,Java语言程序设计清华大学出版社第10章 java数据库连,1,图15.1 学生数据库的组成及相关名词,图15.1 学生数据库的组成及相关名词,2,10.1 建立ODBC数据源,理解ODBC数据源,10.1 建立ODBC数据源 理解ODBC数据源,3,图15.3 ODBC数据源管理器对话框,图15.3 ODBC数据源管理器对话框,4,图15.7 安装完成后的“ODBC数据源管理器”对话框,图15.7 安装完成后的“ODBC数据源管理器”对话框,5,10.2 使用JDBC连接数据库,JDBC(Java DataBase Connectivity的缩写),意思是Java程序连接数据库的应用程序接口(API)。,JDBC由一群类和接口组成,通过调用这些类和接口所提供的成员方法,我们可以连接各种不同的数据库,进而使用标准的SQL命令对数据库进行查询、插入、删除、更新等操作。,10.2 使用JDBC连接数据库 JDBC(,6,10.2.1 JDBC结构,JDBC的基本结构由Java程序、JDBC管理器、驱动程序和数据库四部分组成,如图所示。,10.2.1 JDBC结构 JDBC的基本结,7,图 JDBC结构,数据库,ODBC,JDBC,桥接器,Java 应用程序,图 JDBC结构 数据库ODBCJDBC桥接器Java,8,1Java应用程序,Java应用程序根据JDBC方法实现对数据库的访问和操作。完成的主要任务有:请求与数据库建立连接;向数据库发送SQL请求;查询结果;处理错误;控制传输、提交及关闭连接等操作。,1Java应用程序,9,2、JDBC编程要点,(1)引用java.sql包:,import java.sql.*;,(2)使用Class.forName()方法加载相应数据库的JDBC驱动程序:,class.forName(sun.jdbc.odbc.JdbcOdbcDriver);,2、JDBC编程要点,10,(3)定义JDBC的URL对象。例如:,String conURL=jdbc:odbc:TestDB;,其中TestDB是我们设置的数据源。,(4)连接数据库。,Connection s=DriverManager.getConnection(conURL);,(3)定义JDBC的URL对象。例如:,11,(5)使用SQL语句对数据库进行操作。,(6)解除Java与数据库的连接并关闭数据库。例如:,s.close();,(5)使用SQL语句对数据库进行操作。,12,10.3 JDBC编程实例,10.3.1 创建数据表,【示例程序1】创建学生表student。此表有三个字段:学号(id)、姓名(name)及成绩(score)。,import java.sql.*;/引入java.sql包,public class c1,public static void main(String args),String JDriver=sun.jdbc.odbc.JdbcOdbcDriver;/声明JDBC驱动程序对象,String conURL=jdbc:odbc:TestDB;/定义JDBC的URL对象,try,Class.forName(JDriver);/加载JDBC-ODBC桥驱动程序,10.3 JDBC编程实例10.3.1 创建数据表,13,catch(java.lang.ClassNotFoundException e),System.out.println(ForName:+e.getMessage();,try,Connection con=DriverManager.getConnection(conURL);/连接数据库URL,Statement s=con.createStatement();/建立Statement类对象,String query=create table student(,+id char(10),+name char(15),+score integer,+);/创建一个含有三个字段的学生表student,s.executeUpdate(query);/执行SQL命令,catch(java.lang.ClassNotFou,14,s.close();/释放Statement所连接的数据库及JDBC资源,con.close();/关闭与数据库的连线,catch(SQLException e)System.out.println(SQLException:+e.getMessage();,s.close();/释放Stateme,15,其中,,create table student(id char(10),name char(15),score integer);,这个SQL语句表示建立一个名为student的表,包含id(字符型,宽度为10)、name(字符型,宽度为15)与 score(数字型)三个字段。,这段程序的操作结果是创建了一个数据库中student表的结构,表中还没有任何记录。,其中,,16,10.3.2 向数据表中插入数据,【示例程序2】在上例创建的数据表student中插入三个学生的记录。,import java.sql.*;,public class c2,public static void main(String args),String JDriver=sun.jdbc.odbc.JdbcOdbcDriver;,String conURL=jdbc:odbc:TestDB;,try,Class.forName(JDriver);,10.3.2 向数据表中插入数据,17,catch(java.lang.ClassNotFoundException e),System.out.println(ForName:+e.getMessage();,try,Connection con=DriverManager.getConnection(conURL);,Statement s=con.createStatement();,String r1=insert into student values(+0001,王明,80);,String r2=insert into student values(+0002,高强,94);,String r3=insert into student values(+0003,李莉,82);,/使用SQL 命令insert插入三条学生记录到表中,s.executeUpdate(r1);,catch(java.lang.ClassNotFou,18,s.executeUpdate(r2);,s.executeUpdate(r3);,s.close();,con.close();,catch(SQLException e),System.out.println(SQLException:+e.getMessage();,s.executeUpdate(r2);,19,图 程序2的运行结果,图 程序2的运行结果,20,10.3.3 更新数据,【示例程序3.java】修改上例数据表中的第二条和第三条记录的学生成绩字段值,并把修改后的数据表的内容输出到屏幕上。,import java.sql.*;,public class c3,public static void main(String args),String JDriver=sun.jdbc.odbc.JdbcOdbcDriver;,String conURL=jdbc:odbc:TestDB;,String id=0002,0003;,int score=89,60;,10.3.3 更新数据,21,try,Class.forName(JDriver);,catch(java.lang.ClassNotFoundException e),System.out.println(ForName:+e.getMessage();,try,Connection con=DriverManager.getConnection(conURL);,/修改数据库中数据表的内容,PreparedStatement ps=con.prepareStatement(,UPDATE student set score=?where id=?);,int i=0,idlen=id.length;,try,22,do ps.setInt(1,scorei);,ps.setString(2,idi);,ps.executeUpdate();/执行SQL修改命令,+i;,while(iid.length);,ps.close();,/查询数据库并把数据表的内容输出到屏幕上,Statement s=con.createStatement();,ResultSet rs=s.executeQuery(select*from student);,while(rs.next(),System.out.println(rs.getString(id)+,t+rs.getString(name)+,t+rs.getInt(score);,do ps.setInt(1,scorei);,23,s.close();,con.close();,catch(SQLException e),System.out.println(SQLException:+e.getMessage();,24,在这个程序中使用了PreparedStatement类,它提供了一系列的set方法来设定位置。请注意程序中PreparedStatement()方法中的参数“?”。程序中的语句:,PreparedStatement ps=con.prepareStatement(UPDATE student set score=?where id=?);,ps.setInt(1,scorei);/将scorei的值作为SQL语句中第一个问号所代表参数的值,ps.executeUpdate();,在这个程序中使用了PreparedState,25,其中UPDATE student set score=?where id=?这个SQL语句中各字段的值并没指定,而是以“?”表示。程序必须在执行ps.executeUpdate()语句之前指定各个问号位置的字段值。例如,用ps.setInt(1,scorei)语句中的参数1指出这里的scorei的值是SQL语句中第一个问号位置的值。当前面两条语句执行完后,才可执行ps.executeUpdate()语句,完成对一条记录的修改。,其中UPDATE student set,26,程序中用到的查询数据库并把数据表的内容输出到屏幕的语句是:,ResultSet rs=s.executeQuery(select*from student);,while(rs.next(),System.out.println(rs.getString(id)+,t+rs.getString(name)+,t+rs.getInt(score);,程序中用到的查询数据库并把数据表的内容输出到屏幕的语句是:,27,其中,executeQuery()返回一个ResultSet类的对象rs,代表执行SQL查询语句后所得到的结果集,之后再在while循环中使用对象rs的next()方法将返回的结果一条一条地取出,直到next()为false。,运行结果如下:,0001 王明 80,0002 高强 89,0003 李莉 60,其中,executeQuery()返回一个ResultSe,28,10.3.4 删除记录,【示例程序4.java】删除表中第二条记录,然后把数据表的内容输出。,import ja
展开阅读全文