一、DBUtils通用增删改查代码
- 第一种:没有释放资源,有if条件语句
- object…args与onject[]args的区别
以问号个数为准 - 元数据(Meata data)
描述数据的数据 String sql,描述这份sql字符串的数据叫做元数据
数据库元数据:DatabaseMetaData
参数元数据:ParameterMetaData
结果集元数据:ResultSetMetaData
二、开发模式
- 1)开发模式一:
在jsp里面直接写java代码 - 2)开发模式二:MVC设计模式
M:model(模型层)封装数据JavaBean
V:View(视图层)jsp专注于显示
C:Controller(控制层)Servlet接收页面的请求,找模型层去处理,然后响应数据输出
对于大型项目:分层,逻辑比较清楚,便于维护,拓展项目 - 3)三层架构
三、学生管理系统
1)准备阶段
Eclipse “new”“other”“New Dynamic Web Project”
“WebContent”“new”“JSP file”
“Java Resources”“src”“new”“servlet”
日期对象时倒入util包
Eclipse导入jar包:
右击项目“properties”
- DBUtils:
DbUtils是一种 JDBC Utility Component (翻译过来大概就是:JDBC实用部件),故名思意,和数据库操作有关(DbUtils是一个工具类库,用来进行数据库通信的)
在 DbUtils 中的核心类/接口为 QueryRunner 和 ResultSetHandler
QueryRunner
QueryRunner中一共有6种方法:
execute(执行SQL语句)
batch(批量处理语句)
insert(执行INSERT语句)
insertBatch(批量处理INSERT语句)
query(SQL中 SELECT 语句)
update(SQL中 INSERT, UPDATE, 或 DELETE 语句)
源码:
导入c3p0的jar包和c3p0的配置文件后,配置数据源:
//获取数据源
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
//QueryRunner需要一个数据源作为参数
private static QueryRunner queryRunner = new QueryRunner(dataSource);
private static void showAll(){
try{
String sql = "SELECT * FROM test;";
List<Object[]> list = queryRunner.query(sql, new ArrayListHandler());
for (Object[] aList : list) {
System.out.println(Arrays.toString(aList) + " ");
}
}catch (SQLException e){
throw new RuntimeException(e);
}
}
- 获取单选框或者复选框的值
1)利用js得到其value的值并将其赋值给name,传到servlet
单选框:
复选框:
2)利用jstl来来判断单选框的值或者复选框中是否包含某值,再将它定义为checked
单选框
复选框
- 分页功能
物理分页:来数据库查询的时候,只查一页的数据就返回了
逻辑分页:一口去把所有的数据全部查询出来,然后放置在内存中
2)学生管理系统
Dao
StudentDao接口
public interface StudentDao {
//接口里定义的都是常量,一页显示多少条数据
int PAGE_SIZE = 5;
//分页查询
List<Student> findStudentByPage (int currentPage) throws SQLException;
//查询所有学生
List<Student> findAll()throws SQLException;
//根据学生id查询单个学生对象
Student findStudentById(int sid)throws SQLException;
//根据学生姓名或者id模糊查询,返回值可能是list
List<Student>searchStudent(String sname,String sgender) throws SQLException;
//添加信息
void insert(Student student)throws SQLException;
//根据id删除学生
void delete(int sid) throws SQLException;
//更新学生信息
void update(Student student)throws SQLException;
//查询总的学生记录
int findCount()throws SQLException;
}
StudentDaoImpl
public class StudentDaoImpl implements StudentDao {
//分页查询
@Override
public List<Student> findStudentByPage(int currentPage) throws SQLException {
QueryRunner runner = new QueryRunner(JDBCUtil.getDataSource());
//第一个问号表示一页返回多少条记录,第二个问号表示跳过前面多少条记录
//5 0 第一页(1-1)*5
//5 5 第二页(2-1)*5
//5 10 第三页(3-1)*5
//从第几条(第二个问号)开始读取几条(第一个问号)
return runner.query("select * from stu limit ? offset ?", new BeanListHandler<Student>(Student.class),PAGE_SIZE,(currentPage-1)*PAGE_SIZE);
}
//全部查询
@Override
public List<Student> findAll() throws SQLException {
QueryRunner runner = new QueryRunner(JDBCUtil.getDataSource());
return runner.query("select * from stu", new BeanListHandler<Student>(Student.class));
}
//根据ID查询
@Override
public Student findStudentById(int sid) throws SQLException {
QueryRunner runner = new QueryRunner(JDBCUtil.getDataSource());
return runner.query("select * from stu where sid = ?",new BeanHandler<Student>(Student.class),sid);
}
//模糊查询(根据name或者性别查询)
@Override
public List<