Java编程练习题(九)
(接Java编程练习题(八))???
?/**
????? * 删除指定ID的商品类别
????? * @param id int 商品类别ID
????? */
???? public static void deleteCategory(int id) {
?????? Connection conn = null;
?????? try {
???????? conn = ConnectionManager.getConnection(); // 获得数据连接
?
???????? // 建立PreparedStatement用于执行SQL操作
???????? PreparedStatement ps = conn.prepareStatement(
?????????? "DELETE FROM CATEGORY WHERE ID=?");
??? ?????ps.setInt(1, id); // 设置第一个占位符的内容
???????? ps.executeUpdate();
???????? ps.close();
?????? } catch (Exception ex) {
???????? ex.printStackTrace();
?????? } finally {
???????? ConnectionManager.closeConnection(conn);
?????? }
???? }
?? }
?
?
1. 编写CategoryManager类,该类通过调用DBCategory类的相关方法完成对商品类别的相关操作,要求对所进行的操作进行逻辑判断,使操作合理、合法时才能完成。
package myshop;
?
?import java.util.Iterator;
?
?import myshop.db.DBCategory;
?
?
?/**
? * 本类用于对商品类别的相关操作。通过访问静态方法进行相关操作
? */
? public abstract class CategoryManager {
??? /** 私有空构造方法。保证本类不能够被实例化 */
??? private CategoryManager() {
??? }
?
?
??? /**
???? * 添加商品类别
???? * @param c Category 需要添加的商品类别。要求已经填充类别的各个属性。
???? */
??? public static void addCategory(Category c) {
????? if (c.getName() == null || c.getName().trim().length() == 0) {
?? ?????// 类别名称是未设置。抛出异常。
??????? throw new IllegalArgumentException(
????????? " Category name is null or empty.");
????? } else {
??????? // 向数据库中保存商品类别
??????? DBCategory.addCategory(c);
????? }
??? }
?
?
??? /**
???? * 获得全部商品分类
???? * @return Iterator 商品分类的迭代器
???? */
??? public static Iterator getAllCategory() {
????? return DBCategory.getAllCategory();
??? }
?
?
??? /**
???? * 修改商品类别的属性。目前只实现了修改名称。
???? * @param c Category 已经填充新属性的商品类别包装类。
???? */
??? public static void updateCategory(Category c) {
????? DBCategory.updateCategory(c);
??? }
?
?
??? /**
???? * 获得指定ID的商品类别对象
???? * @param id int 商品类别ID
???? * @return Category 商品类别对象。如果指定ID的商品类别不存在返回null
???? */
??? public static Category getCategory(int id) {
????? return DBCategory.getCategory(id);
??? }
?
?
??? /**
???? * 删除指定ID的商品类别
???? * @param id int 商品类别ID
???? */
??? public static void deleteCategory(int id) {
????? DBCategory.deleteCategory(id);
??? }
? }
?
?
2? 仔细阅读题目,并按以下说明完成题目要求的所有内容。
要求:
????? ①本题目录下应有名字为1.txt的文本文件:写清建库、使用库、建表、向表中添加记录的所有SQL语句。
????? ②通过JDBC操作MYSQL数据库的应用程序的源代码。
????? ③将MYSQL安装目录C:\Program Files\MySQL\MySQL Server 4.1下的data目录拷贝到本题根目录下。?
?
编写应用程序,通过JDBC实现MySql数据库的以下操作。
? (1)修改MySql密码为111111。
? (2)在命令行启动MySql,创建数据库:my_shop。
? (3)在my_shop数据库中创建表category,该表包含两个字段:整型id,向表中添加记录时,其值自动增加;可变长字符串name,最大字符串长度为200;其中id为category表的主键。
?? (4)向表中添加两条记录,其name字段的值分别是:book,house。
? (5)编写Java应用程序,通过JDBC建立数据库连接,并查询my_shop库中category表中的所有记录,并在命令行显示。
??? 程序中用到的驱动程序包含在:
c:\javasoftware\mysql-connector-java-3.0.15-ga-bin.jar中。
?
?
参考答案:
(1)1.txt文本文件的内容:
?????? 建库:CREATE DATABASE my_shop;
? ???使用库:use my_shop;
???? 建表:
????????? CREATE TABLE CATEGORY(
?????? ???????? ID??????????????? INTEGER???????????? AUTO_INCREMENT,
?????? ???????? NAME????????? VARCHAR(200),
?????? ???????? PRIMARY KEY (ID)
????????? );
???? 添加记录:
???????? insert into category (name) values('book');
???????? insert into category (name) values('house');
(2)源程序:
import? java.sql.*;?
public class Test {???
??? public static void main(String[] args) {??? ???
??????? Connection? conn=null;
??????? try{
??????????? //1. 定义JDBC驱动程序??????????
??????????? String driverName = "org.gjt.mm.mysql.Driver";//MySQL 驱动程序名
??????????? Class.forName(driverName);???????????
??????????? //2.建立连接?
??????????? String serverName = "localhost"; // 数据库主机名称
??????????? String mydatabase = "my_shop"; // 数据库名称??
??????????? String url = "jdbc:mysql://" + serverName + "/" +
?????????????????? mydatabase + "?useUnicode=true&characterEncoding=GBK";
??????????? String username = "root"; // 连接用户名
??????????? String password = "111111"; // 连接密码???????????
??????????? conn = DriverManager.getConnection(url, username,password);
??????????? //3.查询
??????????? String? sqlString = "SELECT? *? FROM CATEGORY " ;?????????
??????????? Statement? stm = conn.createStatement();?????????
??????????? ResultSet rs = stm.executeQuery (sqlString) ;?????
??????????? while ( rs.next () ) {?????????
??????????????? System.out.print(rs.getInt(1)+"\t"); // 获得SQL命令中的第一个字段内容
??????????????? System.out.println(rs.getString(2)); // 获得SQL命令中的第二个字段内容
??????????? }
??????????? stm.close();???????????
??????? }
?????? catch (ClassNotFoundException e) {
????? ????? // 不能够找到所需类
????? ????? e.printStackTrace();
?????? }
?????? catch (SQLException e) {
????? ????? // 获得数据库连接发生异常
????? ????? e.printStackTrace();
?????? }
??? }
}