(一)、数据库、数据表的规划
首先我们需要考虑一下作为考试系统我们需要哪些数据,这些数据将以后作为字段值出现。
我们先来看看这张图:
图中框起来的部分基本上就是我们需要的数据,细数数就是:
1.试题序号,它作为主键出现不可以重复(id)
2.适用工程,可以理解为这个题适用于哪个学科(adaptEngineering)
3.难易度(complexity)
4.试题类型,用来区分是单选题还是多选题或者是判断题(type)
5.试题内容(content)
6.图片名称,如果这道题带图片则需要录入图片名称(pic)
7.选项A,B,C,D的内容(a,b,c,d)
8.正确答案(answer)
这张图虽然体现的是选择题数据,但是判断题其实和它的数据差不多,我们可以让判断题的A,B选项内容始终为正确、错误,因此C,D两个部分不填入内容即可,其他完全和选择题相同。
(二)、具体实现:
1.创建数据库并与其建立连接:
Connection con;
PreparedStatement ppStatement;
String sql="";
//建立名为Examination的数据库
String url="jdbc:derby:Examination;create=true";
try{
con=DriverManager.getConnection(url);
//建立名为Question的表
sql ="create table Question"+
"(id int primary key not null,"+
"adaptEngineering varchar(20)," +
"complexity varchar(20),"+
"type int,"+
"content varchar(500),"+
"pic varchar(300),"+
"a varchar(300),"+
"b varchar(300),"+
"c varchar(300),"+
"d varchar(300),"+
"answer varchar(20))";
ppStatement=con.prepareStatement(sql);
ppStatement.executeUpdate();
con.close();
}catch(SQLException exception)
{
System.out.println(exception);
}
2.添加试题
sql="insert into Question values(?,?,?,?,?,?,?,?,?,?,?)";
id=Integer.valueOf(mView.mQuestionID.getText().trim());
ppStatement=con.prepareStatement(sql);
ppStatement.setInt(1,id); //向数据库中写入该题id
ppStatement.setString(2,mView.mApplicable.getText().trim());//写入适用工程
ppStatement.setString(3, mView.mComplexityBox.getSelectedItem().toString());//复杂度
ppStatement.setInt(4,type);//试题类型
ppStatement.setString(5,mView.mContext.getText().trim()); //试题内容
ppStatement.setString(6,mView.mPictureName.getText().trim()); //图片名字(可为空,为空表示无图)
ppStatement.setString(7,mView.inputA.getText().trim()); //a选项内容
ppStatement.setString(8,mView.inputB.getText().trim()); //b选项内容
ppStatement.setString(9,mView.inputC.getText().trim()); //c选项内容
ppStatement.setString(10,mView.inputD.getText().trim());//d选项内容
ppStatement.setString(11,mAnswer);//答案
isSucceed=ppStatement.executeUpdate();//提交数据
con.close();//关闭与数据库连接
3.还需要一个工具类PreQuery类,他负责从数据库中获取字段值和我们想要查询的数据,我们可以通过他来查看数据是否被插入到表中
public class PreQuery {
String databaseName;//数据库名称
String SQL;//需要执行的sql语句
String[] columnName;//字段值
String[][] record;//读取记录保存在二维数