📄 itemmapper.java
字号:
/*
* ItemMapper.java
*
* MSE06B班张智力的实验报告
*
* 2006年12月11日
*/
package olts.dao;
import java.util.*;
import java.io.*;
import java.sql.*;
import olts.item.*;
import olts.util.ErrorRecorder;
/**
* ItemMapper类,负责获取题目、增加题目、修改题目、删除题目的数据库操作
*/
public class ItemMapper {
/**
* ItemMapper对象,SingleTon模式的单一对象
*/
private static ItemMapper itemMapper;
/**
* Connection对象,数据库连接器
*/
private Connection conn;
/**
* Statement对象
*/
private Statement stmt;
/**
* driver属性,记录odbc的驱动程序名
*/
private String driver;
/**
* url属性,记录数据源的url字段
*/
private String url;
/**
* List对象,在数据库中取出试题数据,组织成<code>Item<code>对象,并存放在该List对象容器中
*/
private List itemLibrary = new LinkedList();
/**
* 构造函数,从driver.ini文件中读出驱动程序名并初始化数据源的url。
*/
private ItemMapper(){
try{
File file = new File("driver.ini");
BufferedReader reader = new BufferedReader(new FileReader(file));
driver = reader.readLine();
url = "jdbc:odbc:OLTSDB";
reader.close();
}catch(IOException e){
ErrorRecorder.record(e);
driver = "sun.jdbc.odbc.JdbcOdbcDriver";
}
}
/**
* getItemMapper方法,SingleTon模式下用于返回单一对象的方法。
* @return
*/
public static ItemMapper getItemMapper(){
if(itemMapper == null){
itemMapper = new ItemMapper();
return itemMapper;
}
else return itemMapper;
}
/**
* getItemLibrary方法,从数据库中查询Item数据,返回一队列的Item对象
* @return List 返回一个Item对象的容器
* @throws SQLException 当发生SQL语法、数据库等错误时抛出该异常
*/
public List getItemLibrary(String sql)throws SQLException{
itemLibrary.clear();
try{
Class.forName(driver);
conn = DriverManager.getConnection(url);
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
String content = rs.getString("content");
String standAnswer = rs.getString("standAnswer");
int difficulty = rs.getInt("difficulty");
int score = rs.getInt("score");
int time = rs.getInt("expecttime");
String subject = rs.getString("subject");
int type = rs.getInt("type");
switch(type){
case 1: itemLibrary.add(new SingleChoiceItem(content, standAnswer, difficulty, score, time, subject)); break;
case 2: itemLibrary.add(new MultiChoiceItem(content, standAnswer, difficulty, score, time, subject)); break;
case 3: itemLibrary.add(new TrueFalseItem(content, standAnswer, difficulty, score, time, subject)); break;
case 4: itemLibrary.add(new BlankFillItem(content, standAnswer, difficulty, score, time, subject)); break;
}
}
rs.close();
stmt.close();
conn.close();
}catch(ClassNotFoundException cnfe){
ErrorRecorder.record(cnfe);
}
return itemLibrary;
}
/**
* addItem方法,提供向数据库添加一条Item记录的方法。
* @param item 要加入数据库的Item记录
* @param type 该记录的试题类型
* @return boolean 当添加Item记录成功时返回true,不成功时返回false
* @throws SQLException 当发生SQL语法、数据库等错误时抛出该异常
*/
public boolean addItem(Item item, int type)throws SQLException{
boolean b = false;
try{
Class.forName(driver);
conn = DriverManager.getConnection(url);
PreparedStatement pstmt = conn.prepareStatement("insert into ItemTable(content, standAnswer, difficulty, score, time, subject, type) values(?,?,?,?,?,?,?)");
pstmt.setString(1, item.content);
pstmt.setString(2, item.standAnswer);
pstmt.setInt(3, item.difficulty);
pstmt.setInt(4, item.score);
pstmt.setInt(5, item.time);
pstmt.setString(6, item.subject);
pstmt.setInt(7, type);
b = pstmt.execute();
pstmt.close();
conn.close();
}catch(ClassNotFoundException cnfe){
ErrorRecorder.record(cnfe);
}
return b;
}
/**
* alterItem方法,提供向数据库修改Item记录的方法
* @return int 返回该修改操作影响的行数
* @throws SQLException 当发生SQL语法、数据库等错误时抛出该异常
*/
public int alterItem()throws SQLException{
try{
Class.forName(driver);
stmt = conn.createStatement();
stmt.execute("Update ");
}catch(ClassNotFoundException cnfe){
ErrorRecorder.record(cnfe);
}
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -