zoukankan      html  css  js  c++  java
  • 《TomCat与Java Web开发技术详解》(第二版) 第八章节的学习总结 -- 访问mysql

    终于学到如何访问Mysql了

    1. 可以看看此章节提供的sql脚本,以后可以照着写了。此外,对于Mysql如何使用,最好的地方就是其官网介绍了。http://dev.mysql.com/doc/refman/5.1/zh/introduction.html#what-is

    2.JDBC:连接Java程序和数据库Server。JDBC API主要位于java.sql包中,此外在javax.sql包中也包含一些高级特性的API。JDBC API的组成,包括:

       JDBC驱动管理器:java.sql.DriverManager。从名字上可以得出:是用来管理JDBC驱动API的。

       JDBC驱动器API:最主要接口是java.sql.Driver接口。用来屏蔽具体某种数据库Server的驱动器。

       JDBC驱动器:由具体的数据库供应商提供,用于驱动某个具体的数据库Server。比如Mysql的JDBC驱动器就是:com.mysql.jdbc.Driver

    3.通过JDBC API访问数据库的JSP范例程序

       步骤1(准备工作):将Mysql的JDBC驱动器类库,放入classpath中。这里就是要将:com.mysql.jdbc.Driver这个类库放入classpath中。

    <%
    try{ 
      Connection con;
      Statement stmt;
      ResultSet rs;
      //步骤2之:加载驱动程序,下面的代码加载MySQL驱动程序
      Class.forName("com.mysql.jdbc.Driver");
      //步骤2之:注册MySQL驱动程序
      DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      //用适当的驱动程序连接到数据库
      String dbUrl =  "jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=GB2312";
      String dbUser="dbuser";
      String dbPwd="1234";
      //步骤3:建立数据库连接
      con = java.sql.DriverManager.getConnection(dbUrl,dbUser,dbPwd);
      //步骤4:创建一个SQL声明,即Statement对象,准备执行SQL语句
      stmt = con.createStatement();
      //步骤5:执行SQL语句,这里具体是:增加新记录
      stmt.executeUpdate("insert into BOOKS (ID,NAME,TITLE,PRICE) values('999','Tom','Tomcat Bible',44.5)");
                                                            
      //这也是执行SQL语句,这里具体是:查询记录
      rs = stmt.executeQuery("select ID,NAME,TITLE,PRICE from BOOKS");
      //步骤6:访问ResultSet中的记录集,这里是:访问并输出查询结果
      out.println("<table border=1 width=400>");
      while (rs.next()){
        String col1 = rs.getString(1);
        String col2 = rs.getString(2);
        String col3 = rs.getString(3);
        float col4 = rs.getFloat(4);
        //打印所显示的数据
        out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td><td>"+col4+"</td></tr>");
      }
      out.println("</table>");
     
      //删除新增加的记录
      stmt.executeUpdate("delete from BOOKS where ID='999'");
     
      //步骤7:关闭数据库连接 。注意是依次关闭ResultSet, Statement和Connection对象
      rs.close();
      stmt.close();
      con.close();
    }catch(Exception e){out.println(e.getMessage());}
    %>

    4. 另一种更高效的访问数据库的方法:利用数据源(DataSource)

         利用javax.sql.DataSource接口,可以直接从数据源获得数据库连接。DataSource对象通常由Servlet容器提供;而JAVA程序是通过JNDI来获得Servlet容器提供的DataSource对象的引用。要使用JNDI,需要用到:javax.naming包。具体步骤是:

          1.配置数据源

             配置<Resource>元素。在我自己的开发环境中,tomcat版本是7.0.47。如果按照书上8.6.1节的说法是不行的,而是需要将<Resource>元素内容放到tomcat/conf/Catalina/localhost/helloapp8.xml中,即成为:

              <Context path="/helloapp8" docBase="/media/Develop/WEB_Develop/TomCat+JAVADEV_CD/data/sourcecode/chapter08/helloapp" reloadable="true">
                  <Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource"
                      maxActive="100" maxIdle="30" maxWait="10000"
                      username="dbuser" password="1234"   //要访问的数据库的帐号信息,即用户名和密码。
                      driverClassName="com.mysql.jdbc.Driver"
                      url="jdbc:mysql://localhost:3306/BookDB?autoReconnect=true"/>   //指定要连接的数据库的URL。BookDB是预先在mysql中创建的一个Database;但不是此Database中的表
               </Context>

              在web.xml(在具体web应用的WEB-INF目录中)中加入<resource-ref>元素。即成为:

               <?xml version="1.0" encoding="ISO-8859-1"?>
               <!DOCTYPE web-app PUBLIC
                   '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN'
                   'http://java.sun.com/j2ee/dtds/web-app_2_3.dtd'>
                   <web-app>
                       <resource-ref>
                           <description>DB Connection</description>
                           <res-ref-name>jdbc/BookDB</res-ref-name>   //需要和Resource中的name属性值相同,这是关联两者的纽带
                           <res-type>javax.sql.DataSource</res-type>  //需要和Resource中的type属性值相同。相当于表示用哪个数据库驱动。
                           <res-auth>Container</res-auth>  //需要和Resource中的auth属性值相同。Container表示用容器来管理资源。
                       </resource-ref>
                   </web-app>

          2.具体jsp代码

    <%
    try{
      Connection con;
      Statement stmt;
      ResultSet rs;
     
      //建立数据库连接
      Context ctx = new InitialContext();
      DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");  //找到并连接数据源
      con = ds.getConnection();  //获得一个空闲状态的连接。

      //接下来的过程,同之前的一样了
      //创建一个SQL声明
      stmt = con.createStatement();
      //增加新记录
      stmt.executeUpdate("insert into BOOKS(ID,NAME,TITLE,PRICE) values ('999','Tom','Tomcat Bible',44.5)");
     
      //查询记录
      rs = stmt.executeQuery("select ID,NAME,TITLE,PRICE from BOOKS");
      //输出查询结果
      out.println("<table border=1 width=400>");
      while (rs.next()){
        String col1 = rs.getString(1);
        String col2 = rs.getString(2);
        String col3 = rs.getString(3);
        float col4 = rs.getFloat(4);
         
        //转换字符编码
        col1=new String(col1.getBytes("ISO-8859-1"),"GB2312");
        col2=new String(col2.getBytes("ISO-8859-1"),"GB2312");
        col3=new String(col3.getBytes("ISO-8859-1"),"GB2312");
     
        //打印所显示的数据
        out.println("<tr><td>"+col1+"</td><td>"+col2+"</td><td>"+col3+"</td><td>"+col4+"</td></tr>");
      }
     
      out.println("</table>");
     
      //删除新增加的记录
      stmt.executeUpdate("delete from BOOKS where ID='999'");
     
      //关闭结果集、SQL声明、数据库连接,同样也是按照次序的。
      rs.close();
      stmt.close();
      con.close();   //这实际上是将Connection对象放回数据库连接池,使Connection对象恢复到空闲状态
    }catch (Exception e) {out.println(e.getMessage());e.printStackTrace();}

    %>

  • 相关阅读:
    Linkedin工程师是如何优化他们的Java代码的
    如何调试 Android 上 HTTP(S) 流量
    Facebook工程师是如何改进他们Android客户端的
    modified: xxx(modified content, untracked content)
    在Android工程中加入AIDL文件时,gen目录生成的文件报错-问题解决
    Ubuntu14.04LTS下使用eclipse搭建Cocos2d-x的Android环境
    Ubuntu Linux下安装Oracle JDK
    查看Android源码版本
    Ubuntu Linux下安装Oracle JDK
    Android Initializing a Build Environment
  • 原文地址:https://www.cnblogs.com/lagujw/p/3626960.html
Copyright © 2011-2022 走看看