(接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();
}
}
}