第5讲 JSP数据库编程.ppt
第第5讲讲 JSP数据库编程数据库编程11 JDBC概述概述1.JDBC(Java Database Connection)简介简介 JDBC是一组用是一组用Java编写的用于数据库连接的编写的用于数据库连接的Java类和接口类和接口(Java API),主要功能:主要功能:a)与数据库建立连接与数据库建立连接 b)发送发送 SQL语句语句 c)处理结果处理结果2.JDBC URL JDBC URL提供了一种标识数据库的方法,使相应的驱动程提供了一种标识数据库的方法,使相应的驱动程序识别该数据库,并与之建立连接。序识别该数据库,并与之建立连接。2JDBC URL的标准语法:的标准语法:jdbc:指明驱动程序名或数据库连接机制名。指明驱动程序名或数据库连接机制名。指明标识数据库的方法,目的是为定位数据库提指明标识数据库的方法,目的是为定位数据库提供足够的信息,子名称依不同的子协议而变化。供足够的信息,子名称依不同的子协议而变化。3.odbc子协议子协议 子协议子协议“odbc”是为用于是为用于ODBC数据源名称的数据源名称的URL保留的,保留的,此时的此时的为为ODBC数据源名数据源名(DSN)。此协议允许在此协议允许在后面指定任意多个属性值,它的完整语法为:后面指定任意多个属性值,它的完整语法为:jdbc:odbc:;=例如:例如:jdbc:odbc:faq jdbc:odbc:abc;UID=zsy;PWD=1233ACCESS数据库的数据库的ODBC数据源的建立方法数据源的建立方法通过通过“控制面板控制面板”-“管理工具管理工具”-“数据源数据源(ODBC)”,选择选择“系统系统DSN”页,打开如下图界面,页,打开如下图界面,4如下图,选择如下图,选择Microsoft Access Driver(*mdb)驱动程驱动程序序,然后,单击,然后,单击“完成完成”5出现下图界面,输入相关信息,最后单击出现下图界面,输入相关信息,最后单击“确定确定”,退出退出“数据源数据源(ODBC)”输入数据源名称输入数据源名称faq,对应的对应的 JDBC URL:jdbcjdbc:odbcodbc:faqfaq选择该数据源指向的选择该数据源指向的ACCESS数据库数据库6在在Dreamweave中使用中使用JDBC-ODBC的方法的方法选择选择“应用程序应用程序”“数据库数据库”“”“Sun JDBC-ODBC驱动程序(驱动程序(ODBC数据库)数据库)”7SQL Server数据库的数据库的ODBC数据源的建立方法数据源的建立方法通过通过“控制面板控制面板”“管理工具管理工具”“数据源数据源(ODBC)”,选择选择“用户用户DSN”页,如下图,然后单击页,如下图,然后单击“添添加加”8选择选择“SQL Server”驱动程序,如下图,再单击驱动程序,如下图,再单击“完成完成”9如下图输入相关信息如下图输入相关信息输入数据源名称输入数据源名称person,对应的对应的 JDBC URL:jdbcjdbc:odbcodbc:person输入输入SQL Server数据库数据库服务器的名称服务器的名称10选择登录选择登录SQL Server的身份验证方式,再单击的身份验证方式,再单击“下一下一步步”11选择要连接的选择要连接的SQL Server数据库,如下图,再单击数据库,如下图,再单击“下一步下一步”12根据需要修改下图相关信息,再单击根据需要修改下图相关信息,再单击“完成完成”13单击单击“测试数据源测试数据源”,可给出测试结果,可给出测试结果144.使用使用JDBC-ODBC连接数据库的步骤连接数据库的步骤1)建立数据源)建立数据源2)加载)加载JDBC-ODBC驱动程序驱动程序Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);3)调用)调用DriverManager.getConnection()()建立连接建立连接例如:例如:DriverManager.getConnection(jdbc:odbc:faq,);不需手工建立数据源即可连接不需手工建立数据源即可连接ACCESS数据库的方法:数据库的方法:DriverManager.getConnection(jdbc:odbc:Driver=MicroSoft Access Driver(*.mdb);DBQ=E:/resin-2.1.2/doc/faq.mdb,);不需手工建立数据源即可连接不需手工建立数据源即可连接Excel的方法:的方法:DriverManager.getConnection(jdbc:odbc:Driver=MicroSoft Excel Driver(*.xls);DBQ=E:/resin-2.1.2/webapps/test/exceltest.xls,);区分大小写区分大小写155.通过通过SQL Server 2000 JDBC连接连接SQL Server 2000数据库数据库1)SQL Server 2000 JDBC驱动的构成驱动的构成由三个由三个jar文件组成,即文件组成,即msbase.jar、mssqlserver.jar和和msutil.jar。2)SQL Server 2000 JDBC的放置位置(以的放置位置(以resin为例)为例)把这三个文件放在把这三个文件放在resin根目录根目录 lib目录中,目录中,resin启动时会自启动时会自动加载它们。动加载它们。3)SQL Server 2000 JDBC连接参数连接参数驱动程序:驱动程序:com.microsoft.jdbc.sqlserver.SQLServerDriverJDBC URL:jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=XXX163 JDBC常用对象介绍常用对象介绍1.DriverManager类类 DriverManager类类用来管理数据库驱动程序,并根据用户程用来管理数据库驱动程序,并根据用户程序挑选合适的驱动程序来与数据库建立连接,主要方法有:序挑选合适的驱动程序来与数据库建立连接,主要方法有:Connection DriverManager.getConnection(JDBC URL)Connection DriverManager.getConnection(JDBC URL,String user,String password)17例:例:.String mssqlURL=jdbc:microsoft:sqlserver:/127.0.0.1:1433;DatabaseName=student;String user=sa;String password=zsy;Connection conn=null;try Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver);conn=DriverManager.getConnection(mssqlURL,user,password);.182.Connection对象对象 Connection对象是对象是DriverManager与与数据库之间的桥梁,必数据库之间的桥梁,必须通过须通过Connection所创建的所创建的Statement、PreparedStatement或或CallableStatement组件才能执行组件才能执行SQL语句,其主要方法:语句,其主要方法:public void close();关闭与数据库的连接,同时释放占用的资源。关闭与数据库的连接,同时释放占用的资源。public Statement createStatement();创建一个创建一个Statement组件用于执行组件用于执行SQL语句。语句。public PreparedStatement prepareStatement(String sql);创建一个创建一个PreparedStatement组件用于执行组件用于执行sql语句。语句。193.Statement对象对象 Statement用来执行用来执行SQL语句,主要方法:语句,主要方法:public void close();释放释放Statement资源和它产生的结果集资源和它产生的结果集ResultSet。public ResultSet executeQuery(String sql);执行一个执行一个SQL查询语句,并将产生的结果集返回。查询语句,并将产生的结果集返回。public int executeUpdate(String sql);执行执行INSERT,UPDATE或或DELETE指令,并返回操作的数据指令,并返回操作的数据个数。个数。204.ResultSet对象对象 ResultSet用来存放数据库查询的结果,主要方法:用来存放数据库查询的结果,主要方法:public void close();释放释放ResultSet占用的资源。占用的资源。public XXX-type getXXX(列序号列序号/“列名列名”);将将指定列序号或列名的列数据指定列序号或列名的列数据以以XXX类型返回,如类型返回,如查询指令为查询指令为select sno,sname,sage from student,则则获取姓名的方法为:获取姓名的方法为:String snm=rs.getString(“sname”);获取年龄的方法为:获取年龄的方法为:int a=rs.getInt(3);或或rs.getInt(“sage”);public boolean next();将将光标移到下一行记录上,执行后若光标不是位于最后一条记光标移到下一行记录上,执行后若光标不是位于最后一条记录的后面,则返回录的后面,则返回true,若位于最后一行记录的后面则返回若位于最后一行记录的后面则返回false。第一次打开第一次打开ResultSet时,光标位于第一行记录的前面,时,光标位于第一行记录的前面,故在读取第一行记录前必须调用故在读取第一行记录前必须调用next()使光标指向它。使光标指向它。21public boolean previous();将将光标移到上一行记录上。光标移到上一行记录上。public boolean first();将将光标移到第一行记录上。光标移到第一行记录上。public boolean last();将将光标移到最后一行记录上。光标移到最后一行记录上。public boolean absolute(int row);将光标移到第将光标移到第row行,若行,若row0表示从第一行开始向后移,若表示从第一行开始向后移,若row0表示从最后一行开始向前移。表示从最后一行开始向前移。public int getRow();返回光标当前所在的记录行,若位于第一行前面或最后一行后返回光标当前所在的记录行,若位于第一行前面或最后一行后面则返回面则返回0。22说明:说明:在使用在使用SQL Server2000的的JDBC驱动时需要使用驱动时需要使用ResultSet.TYPE_SCROLL_SENSITIVE 和和ResultSet.CONCUR_UPDATABLE建立建立Statement对象,否则不支持记录集游标的对象,否则不支持记录集游标的previous()、first()、last()、absolute(int row)、getRow()等方法。因此使用此等方法。因此使用此驱动时建立驱动时建立Statement对象的语句为:对象的语句为:stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);在使用在使用jdbc-odbc连接连接ACCESS数据库和使用数据库和使用mysql JDBC 连接连接mysql数据库时,默认情况下即支持游标移动等方法,所以数据库时,默认情况下即支持游标移动等方法,所以此时建立此时建立Statement对象的语句为:对象的语句为:stmt=conn.createStatement();235.JSP中中SQL的书写形式的书写形式1)变量对应的数据库中的数据是)变量对应的数据库中的数据是非数值型非数值型的数据,变量书写形的数据,变量书写形式为:式为:+变量名变量名+2)变量对应的数据库中的数据是)变量对应的数据库中的数据是数值型数值型的数据,变量书写形式的数据,变量书写形式为:为:+变量名变量名+例例1:问题:如果数据库中问题:如果数据库中id为数值型类型数据,则为数值型类型数据,则sql指令该如何写?指令该如何写?244 JDBC数据库应用实例数据库应用实例一、建立数据库一、建立数据库建立数据库建立数据库faq(常见问题解答常见问题解答),),设计数据表设计数据表faqs,其表其表结构为:结构为:id(自动编号型自动编号型),subject(200个可变字符个可变字符),answers(800个可变字符个可变字符)。二、在不使用二、在不使用JavaBean的情况下,建立的情况下,建立JSP文件文件faq-show.jsp,faq-add.jsp,faq-edit.jsp,faq-del.jsp,使其使其完成完成FAQ的显示、新增、修改、删除。的显示、新增、修改、删除。25三、建立数据库操作的三、建立数据库操作的JavaBean创建创建JavaBean,取名为取名为faq.java,该该Bean负责建立与数据负责建立与数据库的连接,完成基本的数据库操作,包括数据查询、数库的连接,完成基本的数据库操作,包括数据查询、数据操纵。据操纵。四、在使用第三步创建的四、在使用第三步创建的JavaBean的的情况下,建立情况下,建立JSP文文件件beanfaq-show.jsp,beanfaq-add.jsp,beanfaq-edit.jsp,beanfaq-del.jsp,使其完成使其完成FAQ的显示、新增、的显示、新增、修改、删除。修改、删除。26