`

Java编程练习题(八)

阅读更多

1编写应用类ConnectionManager,用来建立与指定数据库服务器的连接。

package myshop.db;

 

 import java.sql.*; 

 

 /**

  * 数据库连接控制类。通过访问静态方法获得数据库连接

  */

 public abstract class ConnectionManager {

    /** 获得连接池连接 */

    public static final int TYPE_POOLED = 0;

 

 

    /** 获得直接物理连接 */

    public static final int TYPE_DIRECT = 1;

 

 

    /** 私有空构造方法。保证本类不能够被实例化 */

    private ConnectionManager() {

    }

 

 

    /**

     * 获得默认连接方式的数据库连接。目前默认为物理连接。

     * @return Connection 数据库连接

     */

    public static Connection getConnection() {

      return getConnection(TYPE_DIRECT);

    }

 

 

    /**

     * 获得指定连接方式的数据库连接

     * @param type int 连接方式 <br/>

     * ConnectionManager.TYPE_POOLED 数据库连接池连接 <br/>

     * ConnectionManager.TYPE_DIRECT 直接物理连接

     * @return Connection 数据库连接

     */

    public static Connection getConnection(int type) {

      Connection conn = null;

      switch (type) {

      case TYPE_DIRECT:

        try {

          // 定义JDBC驱动程序

          String driverName="org.gjt.mm.mysql.Driver";// MySQL 驱动程序名称

          Class.forName(driverName);

 

          // 数据库连接参数。指定采用中文编码方式连接数据库

          String serverName = "localhost"; // 数据库主机名称

          String mydatabase = "my_shop"; // 数据库名称

          // 连接url。指定连接方式为GBK编码

          String url = "jdbc:mysql://" + serverName + "/" +

                       mydatabase +

                       "?useUnicode=true&characterEncoding=GBK";

          String username = "root"; // 连接用户名

          String password = "111111"; // 连接密码

 

          // 获得数据库连接

          conn = DriverManager.getConnection(url, username, password);

        } catch (ClassNotFoundException e) {

          // 不能够找到所需类

          e.printStackTrace();

        } catch (SQLException e) {

          // 获得数据库连接发生异常

          e.printStackTrace();

        }

        break;

      case TYPE_POOLED:

        throw new UnsupportedOperationException("Now Unsupported.");

      }

      return conn;

    }

 

 

    /**

     * 关闭数据库连接

     * @param conn Connection 需要被关闭的数据库连接

     */

    public static void closeConnection(Connection conn) {

      if (conn != null) { //连接是否有效

        try {

          if (!conn.isClosed()) { //连接是否已关闭

            conn.close(); //关闭连接

          }

        } catch (SQLException ex1) {

          ex1.printStackTrace();

        }

      }

    }

 

 

    /**

     * 主方法。用于检测本类工作是否正常

     * @param args String[] 运行时参数

     */

    public static void main(String[] args) {

      Connection conn = null;

      try {

        conn = ConnectionManager.getConnection();

        if (conn == null) {

          System.out.println("获得数据库连接错误.");

        } else {

          System.out.println("正常获得数据库连接 == " + conn);

        }

      } catch (Exception ex) {

        ex.printStackTrace();

      } finally {

        closeConnection(conn);      

      }

   }

}

 

2.编写类DBCategory,用来完成对商品类别的MySql数据库操作

  package myshop.db;

 

  import java.sql.*;

  import java.util.*;

 

  import myshop.Category; 

 

  /**

    * 完成对商品类别的数据库操作

    */

   public abstract class DBCategory {

     /** 私有空构造方法。保证本类不能够被实例化 */

     private DBCategory() {

     } 

 

     /**

      * 向数据库中添加商品类别

      * @param c Category 需要添加的商品类别。要求已经检验过属性的合法性。

      */

     public static void addCategory(Category c) {

       Connection conn = null;

       try {

         conn = ConnectionManager.getConnection(); // 获得数据连接

         Statement stmt = conn.createStatement(); // 建立Statement执行SQL操作

         stmt.executeUpdate("INSERT INTO CATEGORY (NAME) VALUES ('" +

                            c.getName() + "')"); // 执行SQL命令

         stmt.close();

       } catch (Exception ex) {

         ex.printStackTrace();

       } finally {

         ConnectionManager.closeConnection(conn);

       }

     }

 

 

     /**

      * 获得全部商品分类

      * @return Iterator 商品分类的迭代器

      */

     public static Iterator getAllCategory() {

       List l = new ArrayList(); //容器类。用于存放所有符合条件的对象。

       Connection conn = null;

       try {

         conn = ConnectionManager.getConnection(); // 获得数据连接

         Statement stmt = conn.createStatement(); // 建立Statement执行SQL操作

         ResultSet rs = stmt.executeQuery("SELECT ID, NAME FROM CATEGORY");

         while (rs.next()) {

           l.add(new Category(rs.getInt(1), rs.getString(2)));

         }

         stmt.close();

       } catch (Exception ex) {

         ex.printStackTrace();

       } finally {

         ConnectionManager.closeConnection(conn);

       }

       return l.iterator();

     }

 

 

     /**

      * 修改商品类别的属性。目前只实现了修改名称。

      * @param c Category 已经填充新属性的商品类别包装类。

      */

     public static void updateCategory(Category c) {

       Connection conn = null;

       try {

         conn = ConnectionManager.getConnection(); // 获得数据连接

 

         // 使用PreparedStatement更新数据。

         // 每个"?"代表一个占位符,在执行之前要一一设置各占位符的内容

         PreparedStatement ps = conn.prepareStatement(

           "UPDATE CATEGORY SET NAME=? WHERE ID=?");

 

         // 设置第一个占位符的内容。设置内容类型为String

         ps.setString(1, c.getName());

 

         // 设置第二个占位符的内容。设置内容类型为int

         ps.setInt(2, c.getId());

 

         ps.executeUpdate(); //执行更新操作

         ps.close();

       } catch (Exception ex) {

         ex.printStackTrace();

       } finally {

         ConnectionManager.closeConnection(conn);

       }

     }

 

 

     /**

      * 获得指定ID的商品类别对象

      * @param id int 商品类别ID

      * @return Category 商品类别对象

      */

     public static Category getCategory(int id) {

       Category c = null;

       Connection conn = null;

              try {

         conn = ConnectionManager.getConnection(); // 获得数据连接

 

         // 建立PreparedStatement用于执行SQL操作

         PreparedStatement ps = conn.prepareStatement(

           "SELECT ID, NAME FROM CATEGORY WHERE ID=?");

         ps.setInt(1, id); // 设置第一个占位符的内容

         ResultSet rs = ps.executeQuery(); // 执行SQL命令

         if (rs.next()) { //因为每个类别的ID是唯一的,所以只返回一个结果既可

           c = new Category(rs.getInt(1), rs.getString(2));

         }

         ps.close();

       } catch (Exception ex) {

         ex.printStackTrace();

       } finally {

         ConnectionManager.closeConnection(conn);

       }

       return c;

     }

 

 

     (待续)

分享到:
评论

相关推荐

    经典java编程练习题

    经典Java编程练习题 Java编程练习题是一组经典的编程练习题,旨在考核Java编程能力。这30道练习题涵盖了Java基础知识、数据类型、运算符、控制结构、方法、数组、面向对象编程等方面的知识点。 知识点1: Java基础...

    Java编程练习题

    本资源“Java编程练习题”旨在帮助学习者深化对Java Standard Edition(Java SE)的理解,通过实践来提高编程技能。Java SE是Java平台的基础,提供了用于桌面应用程序和服务器端应用程序开发的核心API。 这些练习题...

    Java课后编程练习题答案

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而著名。...通过这些练习题答案,学习者不仅可以检查自己的解题思路,还能对比最佳实践,加深对Java编程的理解,进一步提高编程技能。

    Java面向对象编程练习题.pdf

    Java面向对象编程练习题 本资源摘要信息涵盖了 Java 面向对象编程的基础知识,通过三个练习题,展示了 Java 编程语言的基本概念和应用。 练习题 01: 类的成员变量 本练习题展示了 Java 中类的成员变量的概念。类 ...

    50道java程序练习题

    "50道Java程序练习题"提供了一个绝佳的机会来提升你的编程技能。下面,我们将深入探讨这些练习题可能涵盖的知识点,并给出一些关键概念的解释。 1. **基础语法**:练习题可能包括变量声明、数据类型(如整型、浮点...

    Java数组练习题(带答案).doc

    Java数组是Java编程语言中的基本数据结构之一,用于存储固定数量的同类型元素。了解和熟练掌握数组的使用是学习Java的重要环节。本篇练习题涵盖了数组的基本概念、操作和异常处理,下面是针对题目中涉及知识点的详细...

    java 集合练习题

    在Java编程中,集合是一个非常重要的概念,它用于存储一组对象。在这个“java集合练习题”中,我们主要关注如何使用Java集合框架来处理数据,特别是对于学生信息的存储、排序和输出。以下是对这个练习题的详细解析:...

    java基础练习题(基础)精选

    Java基础练习题由本人整理并上传,非常适合于初学者加强巩固自己的知识,编程学好的唯一途径就是多练习。

    50道JAVA基础编程练习题

    Java 基础编程练习题汇总 本资源提供了 50 道 Java 基础编程练习题,涵盖了 Java 编程的多个方面,包括数据类型、运算符、控制结构、函数、数组、字符串等。这些练习题可以帮助初学 Java 编程的开发者更好地理解 ...

    (IT类课程习题)Java编程练习题Java面试题.zip

    (IT类课程习题)Java编程练习题Java面试题.zip (IT类课程习题)Java编程练习题Java面试题.zip (IT类课程习题)Java编程练习题Java面试题.zip (IT类课程习题)Java编程练习题Java面试题.zip

    java编程练习题

    java编程练习题,内有许多基础、经典的java编程练习题,快来下载吧!

    (IT类课程习题)Java编程练习题Java面试题PGJ.zip

    (IT类课程习题)Java编程练习题Java面试题【PGJ】.zip (IT类课程习题)Java编程练习题Java面试题【PGJ】.zip (IT类课程习题)Java编程练习题Java面试题【PGJ】.zip (IT类课程习题)Java编程练习题Java面试题【PGJ】.zip

    (IT类课程习题)Java编程练习题Java面试题PGC.zip

    (IT类课程习题)Java编程练习题Java面试题【PGC】.zip (IT类课程习题)Java编程练习题Java面试题【PGC】.zip (IT类课程习题)Java编程练习题Java面试题【PGC】.zip (IT类课程习题)Java编程练习题Java面试题【PGC】.zip

    Java编程思想练习题答案(代码)

    通过这些练习题和代码实现,学习者可以逐步提升Java编程能力,理解Java编程思想的精髓,从而在实际项目中游刃有余。这些解答不仅提供正确结果,还应该解释背后的原理和最佳实践,有助于深化理解并提升编程技巧。

    java语言程序设计 10th by梁勇 编程练习题答案.zip

    总的来说,这个名为"java语言程序设计 10th by梁勇 编程练习题答案.zip"的压缩包文件,为Java学习者提供了一份宝贵的资源,涵盖了从基础到高级的Java编程知识,有助于巩固理论学习,提高实践能力,对于个人的Java...

    java基础练习题 (目前到集合内含三个小综合案例)

    这份"java基础练习题(目前到集合内含三个小综合案例)"涵盖了Java的基础知识,旨在帮助学习者巩固并提升Java编程技能。从JDK(Java Development Kit)入门到集合框架的学习,这是一个全面了解和实践Java编程的重要...

    java多态练习题

    java多态、继承练习题,包含题目与答案,............................................................................................................

    Java学习练习题

    Java学习是编程领域中不可或缺的一部分,它是一种广泛使用的...通过上述四套附有答案的Java学习练习题,学习者不仅可以检验自己的学习效果,还能通过解答过程深化对各知识点的理解,从而在实践中不断提升Java编程能力。

    Java编程练习题资源 学习Java编程是一项重要的技能,无论是初学者还是有经验的开发人员都可以从练习题中受益 这份练习题

    【Java编程练习题资源】 学习配套博客地址:https://blog.csdn.net/qq_36631076/article/details/136791045 在学习Java编程时,熟练掌握常用的Java类和API是至关重要的。以下是关于Java编程基础、面向对象和常用类...

Global site tag (gtag.js) - Google Analytics