⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 itemmapper.java

📁 支持GUI和持久对象的联机测试系统
💻 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 + -