终于学到如何访问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();}

%>

《TomCat与Java Web开发技术详解》(第二版) 第八章节的学习总结 -- 访问mysql的更多相关文章

  1. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  2. 《TomCat与Java Web开发技术详解》(第二版) 第四章节的学习总结--常用Servlet API

    要开发Servlet,自然要掌握常用的servlet的相关API.通过此章节的学习,了解到如下常用API 1.Servlet接口--->GenericServlet抽象类(实现Servlet接口 ...

  3. 《TomCat与Java Web开发技术详解》(第二版) 第六章节的学习总结 ---- JSP技术

    第六章主要介绍了JSP的相关知识. 1.JSP:是通过在HTML文件中加入java程序片段(Java Scriptlet)和JSP标记,就构成了JSP文件.JSP实质上是Servlet.JSP的API ...

  4. 《TomCat与Java Web开发技术详解》(第二版) 第六章节对应CD附带的helloapp无法启动的问题解决

    首先记录一下如何解决此章节CD中附带的helloapp无法启动的问题 我用的tomcat版本是:7.0.47:为了便于控制,针对此章节的helloapp,我在tomcat/conf/Catalina/ ...

  5. 《TomCat与Java Web开发技术详解》(第二版) 第五章节的学习总结 ---- Servlet的高级用法

    这一章节主要是介绍了Servlet技术的一些高级用法,如下是我自己的整理归纳 1.下载文件:即获取服务器文件,并把文件写入反馈给客户端 ServletContext.getResourceAsStre ...

  6. 《TomCat与Java Web开发技术详解》(第二版) 第三章节的学习总结--利用Context元素来自定义web应用的存储位置

    在学习完第三章后(第三章提供的web应用是helloaapp,我将其放到了tomcat/webapps中),对Context元素的作用理解不深:但是当进入第四章后,发现第四章提供的源码包中也有一个叫h ...

  7. 《TomCat与Java Web开发技术详解》(第二版) 第一章节的学习总结--HTTP组成+基本访问方式

    1.需要看懂HTML文件中的组成元素的基本含义.不同的组成元素,可以使得HTML支持文本,图片(img,将图片发给客户端),静态音频/视频(embed src,将音频视频发给客户端),超链接(href ...

  8. Java Web开发之详解JSP

    JSP作为Java Web开发中比较重要的技术,一般当作视图(View)的技术所使用,即用来展现页面.Servlet由于其本身不适合作为表现层技术,所以一般被当作控制器(Controller)所使用, ...

  9. hadoop应用开发技术详解

    <大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发 ...

随机推荐

  1. eleasticsearch重要配置

    elasticsearch重要配置=====================================日志和数据目录-----------------path:    logs: /var/lo ...

  2. UNION UNION-ALL

    The UNION ALL operator may be what you are looking for. With this operator, you can concatenate the ...

  3. Kali Linux下运行Sniffjoke出错的解决

    Kali Linux下运行Sniffjoke出错的解决 由于Kali Linux版本的更新和Sniffjoke发布时间久远等问题,Sniffjoke在新版本的Kali Linux中运行存在各种问题.下 ...

  4. 六. 异常处理4.try和catch的使用

    尽管由Java运行时系统提供的默认异常处理程序对于调试是很有用的,但通常你希望自己处理异常.这样做有两个好处.第一,它允许你修正错误.第二,它防止程序自动终止.大多数用户对于在程序终止运行和在无论何时 ...

  5. implements

    implements 是实现某个接口的意思. 如果某个类 后面使用 implements,并指定了相应的接口,那在该类下面就需要实现相应接口的方法. 比如:接口interface java.lang. ...

  6. What is a fully qualified domain name (FQDN)?

    fully qualified domain name (FQDN) is the complete domain name for a specific computer, or host, on ...

  7. Xcode 5 单元测试(二)OCMock和GHUnit

    在Xcode 5 单元测试(一)使用XCTest进行单元测试中说了如何在Xcode 5中使用XCTest进行简单的单元测试,本文就来探讨下mock测试和更高级的工具GHUnit. Mock 首先科普下 ...

  8. JAVA常见算法题(十八)

    package com.xiaowu.demo; /** * 两个乒乓球队进行比赛,各出三人.甲队为a,b,c三人,乙队为x,y,z三人,以抽签决定比赛名单. 有人向队员打听比赛的名单:a说他不和x比 ...

  9. 粗谈CDN

    CDN:内容分发网络(content delivery network) 1.DNS解析到最快(有可能是地理上最近,也有可能是地理上远但是链路最好)的CDN缓存设备 2.从CDN获取已经缓存的资源 3 ...

  10. POJ 3486 &amp; HDU 1913 Computers(dp)

    题目链接:PKU:HDU: PKU:http://poj.org/problem?id=3486 HDU:pid=1913" target="_blank">htt ...