《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5普通高等教育“十一五”国家级规划教材Web程序设计《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5第1章Web基础第2章Web服务器的架设和管理第3章HTML和XML基础第4章网页设计与制作第5章客户端开发第6章服务端开发目录《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5第6章服务端编程6.1B/S三层体系结构与Web服务器脚本程序6.2Java程序设计基础6.3JavaBeans6.4JSP技术6.5JDBC与数据库编程6.6综合举例6.7Java开发工具简介《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-56.5JDBC与数据库编程JDBC接口数据库操作举例《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5JDBC接口java.sql包定义了访问数据库的接口和类,但是JDBCAPI不能直接访问数据库,必须依赖于数据库厂商提供的针对其具体的数据库产品的JDBC驱动程序。大多数的数据库管理系统都带有和Java相配的JDBC驱动程序,Java程序通过JDBC驱动程序即可实现与数据库的相连,执行查询、提取数据等操作。要使用某种数据库管理系统,必须下载相应的JDBC数据库驱动程序,并复制到用户系统相应的文件夹中,即:用户系统根目录\WEB-INF\lib\《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5java.sql包java.sql.DriverManager类java.sql.Connection类java.sql.Statement类java.sql.PrepareStatement类java.sql.ResultSet类《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5java.sql.DriverManager类功能DriverManager类主要用于处理JDBC驱动程序的调入,并且对新的数据库连接提供支持常用方法getConnection(Stringurl,Stringuser,Stringpwd),建立和数据库的连接,返回Connection对象。其中,url是指要连接的数据库名,例如:“jdbc:sqlserver://localhost:1433;DatabaseName=gsl_messageboard”,user和pwd对应该数据库的用户名和密码。setLoginTimeOut(intseconds),设定等待数据库连接的最长时间。setLogWriter(PrintWriterout),设定输入数据库日志的PrintWriter对象。《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5java.sql.Connection类功能Connection代表和数据库的连接,用户通过该对象操作特定的数据库常用方法getMetaData(),返回数据库的MetaData数据。MetaData数据包含了数据库的相关信息,例如当前数据库连接的用户名、使用的JDBC驱动程序、数据库允许的最大连接数、数据库的版本等createStatement(),创建并返回Statement对象。PrepareStatement(Stringsql),创建并返回prepareStatement对象。setAutoCommit(boolenautoCommit),设置是否自动提交事务,默认为自动提交。commit(),提交事务。rollback(),撤销事务。《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5java.sql.Statement类功能Statement用来执行静态sql语句executeUpdate(Stringsql)方法可以执行insert、update、delete语句;executeQuery(Stringsql)方法可以执行select语句,executeQuery(Stringsql)方法返回ResultSet对象。《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5java.sql.PrepareStatement类功能用于执行动态的sql语句,即允许sql语句中包含参数。例如Stringsql=selectcol1fromtablenamewherecol2=?Andcol3=?;PrepareStatementperpStmt=conn.preparestatement(sql);perpStmt.setString(1,col2Value);perpStmt.setFloat(2,col3Value);ResultSetrs=perpStmt.executeQuery();《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5java.sql.ResultSet类ResultSet用来保存select语句查询得到的记录集,用它可以浏览和存取数据库内的记录,一个Statement对象在同一时刻只能打开一个ResultSet对象对象方法通过ResultSet的getXXX()方法来得到字段值,ResultSet提供了getString()、getFloat()、getInt()等方法。可以通过字段的序号或者字段的名字来指定要获取的某个字段的值。getString(0),getString(col1)都可以获得字段col1的字符串值,通过Interger对象可以将字符串值转换为整数。《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5举例Connectionconn=DriverManager.getConnection(sConnStr,strUser,strPassword);Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSetrs=stmt.executeQuery(select....);//查询数据库ResultSetMetaDatarsmd=rs.getMetaData();//获取ResultSetMateData对象intnumberOfColumns=rsmd.getColumnCount();//返回列数booleanb=rsmd.isSearchable(inti);//返回第i列是否可以用于where子句Stringc=rsmd.getColumnLabel(inti);//获取第i列的列标《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5数据库操作数据库查询与浏览ResultSet获得数据库数据更新数据库使用预编译PreparedStatement《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5数据库查询与浏览ResultSetResultSet数据集Statementstmt=con.getStatement(游标类型,记录更新权限);ResultSetrs=stmt.executeQuery(select....);可设置的游标类型ResultSet.TYPE_FORWORD_ONLY,只可以向前移动。ResultSet.TYPE_SCROLL_INSENSITIVE,可卷动,不受其他用户对数据库更改的影响。ResultSet.TYPE_SCROLL_SENSITIVE,可卷动,当其他用户更改数据库时这个记录也会改变。记录更新权限ResultSet.CONCUR_READ_ONLY,只读ResultSet.CONCUR_UPDATABLE,可更新。getStatement()缺省参数设置为:getStatement(ResultSet.TYPE_FORWORD_ONLY,ResultSet.CONCUR_READ_ONLY)。《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5定位数据记录如果ResultSet是可卷动的,可以使用下列函数来定位数据记录定位记录rs.absolute(),绝对位置,负数表示从后面数rs.first(),第一条记录rs.last(),最后一条记录rs.previoust(),前一条记录rs.next(),后一条记录rs.beforeFirst(),第一条之前rs.afterLast(),最后一条记录之后判断记录位置rs.isFirst(),rs.isLast(),rs.isBeforeFirst(),rs.isAfterLast用于判断当前的位置说明刚打开数据表时,处于第一条记录之前《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5获得数据库数据通过ResultSet中的get方法可以取得数据表中当前记录的相应列值《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5更新数据库stmt.executeUpdate(strSql)方法:strSql是一条sql更新语句。执行update,insert和delete操作,返回影响到的条数。用户通过返回值,可以判断数据库操作是否成功。stmt.execute()方法在不知道sql语句是查询还是更新的时候使用该方法。如果产生一条以上的对象时,返回true,此时可用stmt.getResultSet()和stmt.getUpdateCount()来获取execute结果,如果不返回ResultSet对象则返回false。更新数据库其他方法rs.updateInt(1,10);rs.updateString(2,xxx);rs.updateRow();《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5使用预编译PreparedStatementPreparedStatement对象和Statement对象类似,都可以用来执行SQL语句。但是,通过PreparedStatement对象执行SQL语句的速度更快。因为,数据库会对PreparedStatement的SQL语句进行预编译,而且仍旧能输入参数并重复执行编译好的查询速度比未编译的要快。例如PreparedStatementstmt=con.preparedStatement(InsertIntousers(userid,username)values(?,?));stmt.clearParameters();stmt.setInt(1,2);stmt.setString(2,xxx);stmt.executeUpdate();《Web技术导论》(第二版),北京:清华大学出版社,2009.04,ISBN:978-7-302-19371-5举例--浏览网站留言数