到底是用Bean还是用JDBC来连接数据库效率高呢?

my3b 2003-08-24 05:34:04
看到一篇帖子,有如下说明:
在以前的文章中,豆腐曾经讲过一种用JDBC-ODBC Bridge 来连接数据库的文章 一个 连接数据库的 javaBean(可在 Jsp 中调用),由于这样连接数据库的效率是
很低的,所以大家其实实际在使用的时候都是用的JDBC,现在我就给大家来说说如何在Win2K下使用JDBC 来连接MySql的文章……
在上面的文字中作者说用javaBean来连接数据库的效率很低,在此向大家请教:到底是用JDBC来连接还是用javaBean来连接效率高呢?大家详细给指点一下好吗?搞不清楚应该采有哪种方式好?
...全文
56 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenjianzhang 2003-08-25
  • 打赏
  • 举报
回复
这个问题的确太菜了。
beyondhuangjie 2003-08-25
  • 打赏
  • 举报
回复
kao,你门都没入,这种问题也来问,浪费大家的青春。
lihuihit 2003-08-24
  • 打赏
  • 举报
回复
自己做一个javabean
在bean中使用连接池

岂不是更好
?
fengq1ng 2003-08-24
  • 打赏
  • 举报
回复
连接池的应用主要是在访问量大的时候,普通BEAN的应用主要是在访问量小的时候。
因为访问量大,连接池的目的主要是保持一定数量的连接,在用的时候,直接在连接池里取连接就可以了,这样大大提高了连接效率。
对于一般访问量小的应用使用BEAN,是在用到连接的时候,新生成一个BAEN对象,即生成了一个连接,使用完后,关闭连接,如果再次使用,有重新生成新对象,又产生一个新的连接,这样在某中程序上,效率不太高,但是对于访问量比较小的情况下,使用起来比较方便。
hotsu 2003-08-24
  • 打赏
  • 举报
回复
好,这个问题好,我也想知道啊,帮你顶顶。请各位高手告知,
xqi8 2003-08-24
  • 打赏
  • 举报
回复
up
my3b 2003-08-24
  • 打赏
  • 举报
回复
不好意思,对于连接池和普通的javaBean到底区别在哪儿我搞不清楚,能分别写个示例代码吗?即分别写个使用连接池和使用普通javaBean来连接mysql数据库的代码好吗?我搞不清楚两者的区别在哪!
seaman0916 2003-08-24
  • 打赏
  • 举报
回复
他是说 JDBC-ODBC Bridge 效率很低,这个JDBC-ODBC Bridge 好像是一个JDBC和 ODBC 相连接的接口协议,底层的连接数据库是ODBC 的协议,上层是JDBC协议,所以效率很低!

JDBC连接池实际还是使用javaBean的方式呀!不过加了些控制呀什么的!

建议:如果访问量大就使用连接池, 访问量小就使用普通的 javabean ,"杀鸡焉用牛刀"是不是?
二、JDBC连接MySql方式 下面是使用JDBC连接MySql的一个小的教程 1、查找驱动程序 MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。 2、动态指定classpath 如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。 3、加载驱动程序 try{ Class.forName(com.mysql.jdbc.Driver); System.out.println(Success loading Mysql Driver!); }catch(Exception e) { System.out.println(Error loading Mysql Driver!); e.printStackTrace(); } 4、设置连接的url jdbc:mysql://localhost/databasename[?pa=va][&pa=va] 三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。   1、在客户端软件开发中使用Thin驱动程序   在开发Java软件方面,Oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,Oracle建议在客户端软件的开发中使用OCI驱动程序,这似乎是正确的。但我建议使用Thin驱动程序,因为通过多次测试发现,在通常情况下,Thin驱动程序的性能都超过了OCI驱动程序。   2、关闭自动提交功能,提高系统性能   在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示:   conn.setAutoCommit(false);   值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。   3、在动态SQL或有时间限制的命令中使用Statement对象   在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。这可能会使你认为,使用PreparedStatement对象比使用Statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的SQL操作中,除非成批地处理SQL命令,我们应当考虑使用Statement对象。   此外,使用Statement对象也使得编写动态SQL命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的SQL命令。因此,我认为,Statement对象可以使动态SQL命令的创建和执行变得更加简单。   4、利用helper函数对动态SQL命令进行格式化   在创建使用Statement对象执行的动态SQL命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字O'Reilly插入表中的SQL命令,则必须使用二个相连的“''”号替换O'Reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个SQL命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个Date型的值,然后让它输出基于Oracle的to_date()函数的字符串表达式。   5、利用PreparedStatement对象提高数据库的总体效率   在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。   6、在成批处理重复的插入或更新操作中使用PreparedStatement对象   如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch(): PreparedStatement pstmt3D null; try { ((OraclePreparedStatement) pstmt).setExecuteBatch(30); ... pstmt.executeUpdate(); }   调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。   7、使用Oracle locator方法插入、更新大对象(LOB)   Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。   8、使用SQL92语法调用存储过程   在调用存储过程时,我们可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用SQL92。   9、使用Object SQL将对象模式转移到数据库中   既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。   10、利用SQL完成数据库内的操作   我要向大家介绍的最重要的经验是充分利用SQL的面向集合的方法来解决数据库处理需求,而不是使用Java等过程化的编程语言。   如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务,何必要让数据在网上流来流去的?我建议用户认真学习如何最大限度地发挥SQL的功能。 1、查找驱动程序 MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动程序,不需做其他配置。 2、动态指定classpath 如果需要执行时动态指定classpath,就在执行时采用-cp方式。否则将上面的.jar文件加入到classpath环境变量中。 3、加载驱动程序 try{ Class.forName(com.mysql.jdbc.Driver); System.out.println(Success loading Mysql Driver!); }catch(Exception e) { System.out.println(Error loading Mysql Driver!); e.printStackTrace(); } 4、设置连接的url jdbc:mysql://localhost/databasename[?pa=va][&pa=va] 三、以下列出了在使用JDBC来连接Oracle数据库时可以使用的一些技巧,这些技巧能够使我们更好地发挥系统的性能和实现更多的功能(系转载)。   1、在客户端软件开发中使用Thin驱动程序   在开发Java软件方面,Oracle的数据库提供了四种类型的驱动程序,二种用于应用软件、applets、servlets等客户端软件,另外二种用于数据库中的Java存储过程等服务器端软件。在客户机端软件的开发中,我们可以选择OCI驱动程序或Thin驱动程序。OCI驱动程序利用Java本地化接口(JNI),通过Oracle客户端软件与数据库进行通讯。Thin驱动程序是纯Java驱动程序,它直接与数据库进行通讯。为了获得最高的性能,Oracle建议在客户端软件的开发中使用OCI驱动程序,这似乎是正确的。但我建议使用Thin驱动程序,因为通过多次测试发现,在通常情况下,Thin驱动程序的性能都超过了OCI驱动程序。   2、关闭自动提交功能,提高系统性能   在第一次建立与数据库的连接时,在缺省情况下,连接是在自动提交模式下的。为了获得更好的性能,可以通过调用带布尔值false参数的Connection类的setAutoCommit()方法关闭自动提交功能,如下所示:   conn.setAutoCommit(false);   值得注意的是,一旦关闭了自动提交功能,我们就需要通过调用Connection类的commit()和rollback()方法来人工的方式对事务进行管理。   3、在动态SQL或有时间限制的命令中使用Statement对象   在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。这可能会使你认为,使用PreparedStatement对象比使用Statement对象的速度更快。然而,我进行的测试表明,在客户端软件中,情况并非如此。因此,在有时间限制的SQL操作中,除非成批地处理SQL命令,我们应当考虑使用Statement对象。   此外,使用Statement对象也使得编写动态SQL命令更加简单,因为我们可以将字符串连接在一起,建立一个有效的SQL命令。因此,我认为,Statement对象可以使动态SQL命令的创建和执行变得更加简单。   4、利用helper函数对动态SQL命令进行格式化   在创建使用Statement对象执行的动态SQL命令时,我们需要处理一些格式化方面的问题。例如,如果我们想创建一个将名字O'Reilly插入表中的SQL命令,则必须使用二个相连的“''”号替换O'Reilly中的“'”号。完成这些工作的最好的方法是创建一个完成替换操作的helper方法,然后在连接字符串心服用公式表达一个SQL命令时,使用创建的helper方法。与此类似的是,我们可以让helper方法接受一个Date型的值,然后让它输出基于Oracle的to_date()函数的字符串表达式。   5、利用PreparedStatement对象提高数据库的总体效率   在使用PreparedStatement对象执行SQL命令时,命令被数据库进行解析和编译,然后被放到命令缓冲区。然后,每当执行同一个PreparedStatement对象时,它就会被再解析一次,但不会被再次编译。在缓冲区中可以发现预编译的命令,并且可以重新使用。在有大量用户的企业级应用软件中,经常会重复执行相同的SQL命令,使用PreparedStatement对象带来的编译次数的减少能够提高数据库的总体性能。如果不是在客户端创建、预备、执行PreparedStatement任务需要的时间长于Statement任务,我会建议在除动态SQL命令之外的所有情况下使用PreparedStatement对象。   6、在成批处理重复的插入或更新操作中使用PreparedStatement对象   如果成批地处理插入和更新操作,就能够显著地减少它们所需要的时间。Oracle提供的Statement和 CallableStatement并不真正地支持批处理,只有PreparedStatement对象才真正地支持批处理。我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制,可以以如下所示的方式调用setExecuteBatch(): PreparedStatement pstmt3D null; try { ((OraclePreparedStatement) pstmt).setExecuteBatch(30); ... pstmt.executeUpdate(); }   调用setExecuteBatch()时指定的值是一个上限,当达到该值时,就会自动地引发SQL命令执行,标准的executeUpdate()方法就会被作为批处理送到数据库中。我们可以通过调用PreparedStatement类的sendBatch()方法随时传输批处理任务。   7、使用Oracle locator方法插入、更新大对象(LOB)   Oracle的PreparedStatement类不完全支持BLOB和CLOB等大对象的处理,尤其是Thin驱动程序不支持利用PreparedStatement对象的setObject()和setBinaryStream()方法设置BLOB的值,也不支持利用setCharacterStream()方法设置CLOB的值。只有locator本身中的方法才能够从数据库中获取LOB类型的值。可以使用PreparedStatement对象插入或更新LOB,但需要使用locator才能获取LOB的值。由于存在这二个问题,因此,我建议使用locator的方法来插入、更新或获取LOB的值。   8、使用SQL92语法调用存储过程   在调用存储过程时,我们可以使用SQL92或Oracle PL/SQL,由于使用Oracle PL/SQL并没有什么实际的好处,而且会给以后维护你的应用程序的开发人员带来麻烦,因此,我建议在调用存储过程时使用SQL92。   9、使用Object SQL将对象模式转移到数据库中   既然可以将Oracle的数据库作为一种面向对象的数据库来使用,就可以考虑将应用程序中的面向对象模式转到数据库中。目前的方法是创建Java bean作为伪装的数据库对象,将它们的属性映射到关系表中,然后在这些bean中添加方法。尽管这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的,因此其他访问数据库的应用软件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创建一个新的数据库对象类型在数据库中模仿其数据和操作,然后使用JPublisher等工具生成自己的Java bean类。如果使用这种方式,不但Java应用程序可以使用应用软件的对象模式,其他需要共享你的应用中的数据和操作的应用软件也可以使用应用软件中的对象模式。
目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式化 1.2 高级语言 1.2.1 结构化查询语言 1.2.2 数据定义语言 1.2.3 数据处理语言 1.2.4 数据查询语言 1.3 事务管理和事务控制命令 1.3.1 ACID测试 1.3.2 SQL中的事务管理 1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.5 数据查询语言 3.5.1 SELECT语句 3.5.2 WHERE子句 3.5.3 SQL运算符 3.5.4 使用子查询 3.6 对查询结果排序 3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理用户 3.8.2 授予和取消用户权限 3.9 创建和使用存储过程 3.9.1 在存储过程中使用输入参数 3.9.2 存储过程中使用输出参数 3.10 小结 第4章 JDBC入门 4.1 什么是JDBC 4.2 两层和三层模型 4.2.1 两层模型 4.2.2 三层模型 4.3 SQL的一致性 4.4 JDBC兼容性 4.5 JDBC如何工作 4.5.1 DriverManager 4.5.2 JDBC DataSource 4.5.3 DataSource对象和JNDI 4.5.4 部署和使用DataSource的基本实现 4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的ResultSet 4.12.1 创建可滚动的ResultSet 4.12.2 游标控制 4.12.3 将游标移动到指定行 4.12.4 获得游标位置 4.13 可更新的ResultSet 4.13.1 更新ResultSet 4.13.2 插入一新行 4.13.3 删除行 4.14 观察ResultSet中的变化 4.15 RowSet对象 4.16 创建RowSet和设置属性 4.16.1 RowSet事件 4.17 元数据 4.17.1 DatabaseMetaData 4.17.2 ResultSetMetaData 4.17.3 ParameterMetaData方法 4.18 SQL数据类型的JDBC映射 4.19 SQL3数据类型 4.19.1 对象关系型数据库 4.19.2 使用SQL3数据类型 4.19.3 创建用户定义的数据类型 4.20 异常和日志 4.20.1 SQLException 4.20.2 SQLWarning 4.20.3 BatchUpdateException 4.20.4 日志 4.21 小结 第2部分 在两层客户/服务器结构中使用JDBC和SQL 第5章 使用JDBC和SQL创建表 5.1 创建数据库 5.2 使用表 5.2.1 记录和字段、行和列 5.2.2 SQL数据类型 5.2.3 完整性约束 5.3 创建表 5.4 使用JDBC创建表 5.4.1 DriverManager 5.4.2 驱动程序 5.4.3 连接 5.4.4 Statement 5.5 使用ALTER TABLE改变表 5.6 删除或取消表 5.7 创建基于Swing的表构建器 5.7.1 控制程序 5.7.2 视图 5.7.3 模型 5.8 小结 第6章 插入、更新和删除数据 6.1 使用SQL INSERT插入数据 6.1.1 INSERT语句 6.1.2 使用带有JDBC的INSERT 6.1.3 使用INSERT SELECT 6.2 UPDATE语句 6.2.1 在UPDATE中使用经计算的值 6.2.2 UPDATE的常见问题 6.3 带有提交和回滚的事务管理 6.4 DELETE语句 6.5 基于Swing的表编辑器 6.5.1 TableEditFrame 6.5.2 Controller类 6.6 JDBC ResultSetMetaData 6.7 小结 第7章 使用SQL查询检索数据 7.1 SELECT语句 7.1.1 使用WHERE子句 7.1.2 格式化SQL命令 7.2 在较复杂的WHRER子句中使用运算符 7.2.1 DISTINCT运算符 7.2.2 TOP运算符 7.2.3 比较运算符 7.2.4 CHAR和VARCHAR运算符 7.2.5 逻辑运算符 7.2.6 算术运算符 7.2.7 混合运算符:IN和BETWEEN 7.2.8 集合运算符 7.3 转义序列 7.4 子查询 7.4.1 使用ANY,SOME和ALL谓词 7.4.2 使用IN和NOT IN谓词 7.4.3 使用EXISTS和NOT EXISTS谓词 7.4.4 嵌套子查询 7.4.5 测试子查询 7.5 子查询的额外用途 7.5.1 在SELECT列表中使用子查询 7.5.2 使用带有INSERT命令的子查询 7.5.3 使用带有UPDATE命令的子查询 7.5.4 使用带有DELETE命令的子查询 7.5.5 关联子查询 7.6 JDBC ResultSet 7.6.1 ResultSetMetaData 7.6.2 使用具有JDBC的SELECT来返回RecordSet 7.7 基于Swing的SQL查询面板 7.7.1 View菜单 7.7.2 TableQueryFrame 7.8 JDBC代码 7.9 小结 第8章 组织查询结果和使用索引 8.1 使用ORDER BY对查询结果进行排序 8.2 GROUP BY子句 8.3 聚合函数 8.4 使用HAVING子句筛选组 8.5 使用索引来提高SQL查询的性能 8.6 视图 8.7 小结 第9章 连接和组合查询 9.1 连接表 9.1.1 连接的类型 9.2 键 9.2.1 主键 9.2.2 外键 9.3 使用内连接 9.3.1 使用等连接 9.3.2 使用非等连接 9.4 使用外连接 9.4.1 左外连接 9.4.2 右外连接 9.4.3 全外连接 9.4.4 使用NOT EXISTS 9.5 使用自连接 9.6 使用UNION运算符合并查询 9.6.1 EXCEPT运算符 9.6.2 INTERSECT运算符 9.7 小结 第10章 构建一个客户/服务器应用程序 10.1 使用不同的数据库和驱动程序 10.1.1 扩展的DBManager类 10.2 使用DatabaseMetaData 10.3 检索与数据库相关的信息 10.3.1 在JTree中显示DatabaseMetaData 10.4 检索有关RDBMS功能性的信息 10.5 使用ResultSetMetaData 10.6 小结 第3部分 三层Web站点与JDBC 第11章 构建会员Web站点 11.1 设计一个多层系统 11.2 功能性需求 11.3 设计数据库 11.3.1 处理会员登录 11.3.2 会员注册 11.3.3 数据输入 11.3.4 搜索数据库 11.3.5 数据库驱动的电子邮件 11.4 小结 第12章 通过servlet和JSP使用JDBC DataSource 12.1 使用JDBC DataSource 12.2 使用servlet创建动态Web页面 12.2.1 创建一个简单的servlet 12.3 创建和配置Lo9in servlet 12.3.1 实现会员Web站点 12.3.2 创建Login页面 12.3.3 创建servlet 12.3.4 部署 12.4 使用JSP 12.4.1 在JSP中使用JavaBean 12.4.2 自动类型转换 12.4.3 创建和部署JDBC LoginBean 12.5 小结 第13章 使用PreparedStatement和CallableStatement 13.1 创建和使用PreparedStatement 13.1.1 创建PreparedStatement对象 13.1.2 在循环中使用PrenaredStatement 13.1.3 PreparedStatement返回的值 13.2 创建和使用CallableStatement 13.2.1 创建存储过程 13.2.2 调用存储过程 13.2.3 使用JSP Bean中的存储过程 13.2.4 ProcessNABean的作用 13.2.5 错误处理 13.2.6 使用存储过程作为输入和输出参数 13.3 小结 第14章 使用Blob和Clob管理图像和文档 14.1 大对象 14.1.1 使用Blob存储二进制数据 14.1.2 使用Clob存储文本数据 14.2 从浏览器上载图像或文档 14.2.1 用于从DBMS下载大对象的servlet 14.3 小结 第15章 使用JSP,XSL和可滚动的ResultSet显示数据 15.1 可滚动的ResultSet 15.1.1 创建一个可滚动ResultSet 15.1.2 在可滚动ResultSet中移动游标 15.1.3 使用可滚动ResultSet创建一个搜索页面 15.2 使用XSL从SQL查询中创建网页 15.2.1 XSLT如何工作 15.2.2 从数据库中检索的数据作为XML文档 15.2.3 使用XSL样式表转换XML 15.2.4 在JSP页面中使用XSL转换 15.3 使用具有XSL样式表的可更新ResultSet 15.4 小结 第16章 使用JDBC驱动的JavaMail API 16.1 使用电子邮件协议 16.1.1 MIME协议 16.1.2 SMTP协议 16.1.3 POP协议 16.2 使用JavaMail API 16.3 使用JDBC驱动的JavaMail发送电子邮件信息 16.3.1 使用JSP页面和JavaMail发送电子邮件 16.3.2 使用有SendMailBean的JSP页面 16.3.3 部署 16.4 使用JavaMail API接收电子邮件 16.5 小结 第4部分 数据库、JDBC和XML 第17章 XML文档对象模型和JDBC 17.1 XML与HTML 17.2 XML和文档对象模型 17.2.1 XML标题 17.2.2 标记和属性 17.2.3 元素和节点 17.3 使用Java XML API——Xerces和JDOM 17.4 将Xbean作为可插入的XML处理模块 17.5 查询数据库创建XML文档 17.6 XML数据源填充数据库 17.7 小结 第18章 用RowSet显示数据 18.1 理解RowSet 18.1.1 创建和应用RowSet 18.1.2 使RowSet可滚动和可更新 18.1.3 更新RowSet 18.1.4 插入新行 18.1.5 删除行 18.1.6 查看可更新RowSet所做的修改 18.1.7 RowSet事件 18.2 未连接的RowSet 18.2.1 在PDA中使用CachedRowSet 18.2.2 客户端代码 18.3 根据RowSet生成XML 18.4 小结 第19章 用SQL访问XML文档 19.1 用SQL访问XML文档的原因 19.2 创建可访问JDBC的XML DBMS 19.2.1 实现基类 19.2.2 实现JDBC类 19.2.3 XMLResultSet 19.2.4 实现SQL引擎 19.2.5 测试JDBC/XML数据库 19.3 小结 第5部分 EJB、数据库和持久性 第20章 EJB 20.1 EJB简述 20.2 会话bean 20.2.1 无状态会话Bean 20.2.2 无状态会话Bean 20.3 实体Bean 20.3.1 主键 20.3.2 持久性存储 20.4 消息驱动bean 20.5 EJB事务 20.5.1 容器管理的事务 20.5.2 bean管理的事务 20.6 小结 第21章 bean管理的持久性 21.1 实体对象持久性 21.2 bean管理的持久性 21.2.1 主键 21.2.2 通过实体bean创建和删除实体对象 Z1.2.3 查找实体对象 21.2.4 bean实例变量的同步和持久性对象的状态 Z1.2.5 业务方法 21.3 BMP实体bean示例——MemberEJB 21.4 使用值对象获得更佳性能 21.5 小结 第22章 容器管理的持久性 22.1 CMP实体bean——EJB 2.0之后的新生品 22.2 CMP EJB开发 22.2.1 主接口和远程接口 22.2.2 用最少的代码实现类 22.3 EJB查询语言 22.4 运行示例应用程序 22.5 容器管理的关系 22.5.1 关系字段 22.5.2 关系的基数和方向 22.5.3 访问关系字段 22.6 小结 第23章 Java数据对象和透明持久性 23.1 JDO的透明持久性 23.2 什么使JDO成为独特的持久性机制 23.3 主要的JDO API 23.3.1 PersistenceCapable接口 23.3.2 PersistenceManagerFactory接口 23.3.3 PersistenceManager接口 23.3.4 Query接口 23.3.5 Transaction接口 23.4 测试客户示例 23.5 对复杂域对象模型的支持 23.6 JDO应用程序开发过程 23.7 JDO与J2EE框架集成 23.8 小结 第6部分 数据库管理 第24章 用户管理和数据库的安全性 24.1 组、用户和角色 24.1.1 对组进行操作 24.1.2 对用户进行操作 24.2 理解数据库模式 24.3 管理模式 24.4 用户权限 24.5 用户角色 24.5.1 所有权限 24.5.2 GRANT命令 24.5.3 REVOKE命令 24.6 小结 第25章 性能调整 25.1 数据库调整 25.1.1 语句调整 25.1.2 调整连接 25.1.3 调整索引 25.2 修改数据库方案 25.2.1 范式化 25.2.2 反向范式化 25.2.3 多数据表 25.3 产生冗余数据 25.4 使用导出列和导出表 25.5 数据划分 25.5.1 水平划分 25.5.2 垂直划分 25.6 使用视图 25.7 持续监控 25.8 小结 附录A SQL语法简明指南 附录B 安装Apache和Tomcat
目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式化 1.2 高级语言 1.2.1 结构化查询语言 1.2.2 数据定义语言 1.2.3 数据处理语言 1.2.4 数据查询语言 1.3 事务管理和事务控制命令 1.3.1 ACID测试 1.3.2 SQL中的事务管理 1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.5 数据查询语言 3.5.1 SELECT语句 3.5.2 WHERE子句 3.5.3 SQL运算符 3.5.4 使用子查询 3.6 对查询结果排序 3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理用户 3.8.2 授予和取消用户权限 3.9 创建和使用存储过程 3.9.1 在存储过程中使用输入参数 3.9.2 存储过程中使用输出参数 3.10 小结 第4章 JDBC入门 4.1 什么是JDBC 4.2 两层和三层模型 4.2.1 两层模型 4.2.2 三层模型 4.3 SQL的一致性 4.4 JDBC兼容性 4.5 JDBC如何工作 4.5.1 DriverManager 4.5.2 JDBC DataSource 4.5.3 DataSource对象和JNDI 4.5.4 部署和使用DataSource的基本实现 4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的ResultSet 4.12.1 创建可滚动的ResultSet 4.12.2 游标控制 4.12.3 将游标移动到指定行 4.12.4 获得游标位置
目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 1.1.4 主键 1.1.5 外键 1.1.6 关系 1.1.7 视图 1.1.6 范式化 1.2 高级语言 1.2.1 结构化查询语言 1.2.2 数据定义语言 1.2.3 数据处理语言 1.2.4 数据查询语言 1.3 事务管理和事务控制命令 1.3.1 ACID测试 1.3.2 SQL中的事务管理 1.4 数据库安全和数据控制语言 1.4.1 管理数据库用户 1.4.2 用户权限 1.4.3 用户组和角色 1.5 数据库体系结构 1.5.1 Java数据对象 1.5.2 两层模型 1.5.3 三层模型 1.6 小结 第2章 设计数据库 2.1 数据库设计应考虑的事项 2.1.1 项目规范 2.1.2 设计表 2.1.3 生成发票 2.2 引用完整性 2.2.1 通用完整性规则 2.2.2 特定于数据库的完整性规则 2.3 小结 第3章 SQL基础 3.1 SQL语言 3.2 SQL数据类型 3.3 数据定义语言 3.3.1 创建、取消、更改数据库和表 3.3.2 创建、更改和取消视图 3.4 数据处理语言 3.4.1 INSERT语句 3.4.2 UPDATE语句 3.4.3 DELETE语句 3.5 数据查询语言 3.5.1 SELECT语句 3.5.2 WHERE子句 3.5.3 SQL运算符 3.5.4 使用子查询 3.6 对查询结果排序 3.7 将查询结果进行汇总 3.7.1 集合函数 3.7.2 使用HAVING子句来筛选组 3.7.3 使用索引提高SQL查询效率 3.7.4 格式化SQL命令 3.7.5 使用SQL连接 3.7.6 编写SQL的JOIN命令 3.7.7 使用UNION运算符进行组合查询 3.8 数据控制语言 3.8.1 管理用户 3.8.2 授予和取消用户权限 3.9 创建和使用存储过程 3.9.1 在存储过程中使用输入参数 3.9.2 存储过程中使用输出参数 3.10 小结 第4章 JDBC入门 4.1 什么是JDBC 4.2 两层和三层模型 4.2.1 两层模型 4.2.2 三层模型 4.3 SQL的一致性 4.4 JDBC兼容性 4.5 JDBC如何工作 4.5.1 DriverManager 4.5.2 JDBC DataSource 4.5.3 DataSource对象和JNDI 4.5.4 部署和使用DataSource的基本实现 4.6 连接池 4.7 分布式事务处理 4.7.1 分布式事务管理 4.7.2 Connection对象 4.8 SQL语句 4.8.1 Statement对象 4.8.2 PreparedStatement语句 4.8.3 CallableStatement 4.9 事务 4.9.1 事务独立性等级 4.9.2 事务存储点 4.9.3 多线程 4.10 批更新 4.11 ResultSet 4.12 可滚动的ResultSet 4.12.1 创建可滚动的ResultSet 4.12.2 游标控制 4.12.3 将游标移动到指定行 4.12.4 获得游标位置

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧