题目管理模块
数据库设计
根据LeetCode刷题的页面来看,对于题目表的设计应该有以下关键字:主键、标题、难度级别、题目描述、题目模板代码和测试用例。
create table oj_table(
id int primary key auto_increment, //主键
title varchar(50), //标题
level varchar(50), //难度级别
description text, //题目描述
templateCode text, //题目模板代码
testCode text //测试用例
);
数据库表对应表示关系:
注:主要要思考的是测试用例,其实测试用例都是我们自己去编写判定的,不同的题目,给定不同的测试用例,不过也并不难,无非就是if/else的判定。
数据库连接
其实这里用mybatis非常方便,但是就当做复习,就直接用原生jdbc了。
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//借助这个类和数据库建立连接,进一步的操作数据库
public class DBUtil {
private static final String URL = "jdbc:mysql://127.0.0.1:3306/system_oj?characterEncoding=utf8&useSSL=true";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
private static volatile DataSource dataSource = null;
private DBUtil(){
}
public static DataSource getDataSource(){
if (dataSource == null) {
synchronized (DBUtil.class) {
if(dataSource == null){
dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl(URL);
((MysqlDataSource)dataSource).setUser(USERNAME);
((MysqlDataSource)dataSource).setPassword(PASSWORD);
}
}
}
return dataSource;
}
public static Connection getConection(){
try {
return getDataSource().getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet){
try {
if(resultSet != null){
resultSet.close();
}
if(statement != null){
statement.close();
}
if(connection != null){
connection.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
注:主要注意两点,一:获取dataSource是单例的,用到双重校验锁;二:关闭资源是反向关闭。
建立Model
与数据库对应实体类
//实体类,每个Problem对象就对应到system_oj中的一条记录
public class Problem {
private int id;
private String title;
private String level;
private String description;
private String templateCode;
private String testCode;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getLevel() {
return level;
}
public void setLevel(String level) {
this.level = level;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getTemplateCode() {
return templateCode;
}
public void setTemplateCode(String templateCode) {
this.templateCode = templateCode;
}
public String getTestCode() {
return testCode;
}
public void setTestCode(String testCode) {
this.testCode = testCode;
}
@Override
public String toString() {
return "Problem{" +
"id=" + id +
", title='" + title + '\'' +
", level='" + level + '\'' +
", description='" + description + '\'' +
", templateCode='" + templateCode + '\'' +
", testCode='" + testCode + '\'' +