终于学到如何访问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. BZOJ 2243 [SDOI2011]染色 (树链剖分)(线段树区间修改)

    [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6870  Solved: 2546[Submit][Status][Disc ...

  2. JSK 18: 跳跃游戏

    题目描述 给定一个非负整数数组,假定你的初始位置为数组第一个下标. 数组中的每个元素代表你在那个位置能够跳跃的最大长度. 请确认你是否能够跳跃到数组的最后一个下标. 例如:$A = [2,3,1,1, ...

  3. POJ 1990 MooFest(zkw线段树)

    [题目链接] http://poj.org/problem?id=1990 [题目大意] 给出每头奶牛的位置和至少要多少分贝的音量才能听到谈话 现在求奶牛两两交流成功需要的分贝*距离的总和. [题解] ...

  4. 【bzoj2839】【集合计数】容斥原理+线性求阶乘逆元小技巧

    (上不了p站我要死了,侵权度娘背锅) Description 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取 ...

  5. [POI2014]Salad Bar

    题目大意: 一个长度为$n(n\leq10^6)$的字符串,每一位只会是$p$或$j$.你需要取出一个子串$S$(从左到右或从右到左一个一个取出),使得不管是从左往右还是从右往左取,都保证每时每刻已取 ...

  6. elasticsearch5.3.0 安装

    公司有项目打算用elasticsearch,所以研究了下,目前最新版本5.3.0 安装 1.下载包  https://artifacts.elastic.co/downloads/elasticsea ...

  7. Visio文件转EPS文件

    Visio转eps by gaihf@水木 看了前人写的关于Visio转EPS的文章,但是实践过程中还是碰到几个棘手的问题.现在这些问题终于解决了,把自己的一点体会分享给大家. 很多人习惯用Visio ...

  8. java学习笔记——可用链表

    NO 链表方法名称 描述 1 public void add(数据类型 对象) 向链表中增加数据 2 public int size() 查看链表中数据个数 3 public boolean isEm ...

  9. 【转载】深入理解JVM性能调优

    性能问题无非就这么几种:CPU.内存.磁盘IO.网络.那我们来逐一介绍以下相关的现象和一些可能出现的问题. 一.CPU过高. 查看CPU最简单的我们使用任务管理器查看,如下图所示,windows下使用 ...

  10. P-Called-Party-ID 头域的应用说明

    P-Called-Party-ID 头域的适用场景 P-Called-Party-ID 适用于 UAS 须要知道在代理将目标改写为Contact 地址之前请求中Request-URI的目的AOR的情况 ...