发表于: 2018-04-01 21:16:03
1 477
编辑日报内容...
一、今天完成的事情
1. 还是增删改查
查
public List<UserVO> queryAll() throws Exception {
Connection conn = DBUtil.connectDB();
String sql = "SELECT * FROM jdbctemplate";
List<UserVO> userList = new ArrayList<UserVO>();
Statement stmt = (Statement) conn.createStatement(); //创建statement对象
ResultSet rs = stmt.executeQuery(sql); //查询之后返回结果集
while (rs.next()){ //将rs全部进行读取 rs.next()的意思是进行读取结果集的下一条数据;
// next()方法返回的是boolean型,用来确认有没有数据
UserVO user = new UserVO();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
userList.add(user);
}
return userList;
List<?>
List指的是集合.<>是泛型,里面指定了这个集合中存放的是什么数据.比如有一个学生类Student,Student里面包含了学生的一些信息.这样每一个Student对象就代表了一个学生.此时List<Student>就代表这个集合中存放了很多个学生对象,这个集合就像一个班级一样
public static void main(String[] args) throws Exception {
UserDao dao = new UserDao();
List<UserVO> userList = dao.queryAll();
for (UserVO user : userList) {
System.out.println(user);
}
}
输出结果:
增
String sql = " INSERT INTO jdbctemplate(ID,name,age)VALUES (?,?,?)";
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
//PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
//statement每次执行sql语句,相关数据库都要执行sql语句的编译
// preparedstatement是预编译得
// preparedstatement支持批处理
pstmt.setInt(1,user.getId()); // parameterIndex 指定第几个参数的下标
pstmt.setString(2, user.getName());
pstmt.setInt(3,user.getAge());
pstmt.execute();
public static void main(String[] args) throws Exception { //加上throw exception。调用 的地方就必须try catch,不然编译都不过。。
UserDao dao = new UserDao();
UserVO userVO = new UserVO();
userVO.setId(4);
userVO.setName("Lucy");
userVO.setAge(25);
// dao.addUser(userVO);
try {
dao.addUser(userVO);
} catch (Exception e) {
e.printStackTrace();
}
try语句是用来捕捉异常的,捕捉程序在运行时可能出现的异常。
当try语句中出现异常时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception e 初始化,也就是实例化Exception类型的对象。e是此对象引用名称。然后e(引用)会自动调用Exception类中指定的方法,也就出现了e.printStackTrace() ;。
printStackTrace()方法的意思是:在命令行打印异常信息在程序中出错的位置及原因。
删
public void deleteUser(int ID) throws Exception {
Connection conn = DBUtil.connectDB();
String sql = "DELETE FROM jdbctemplate WHERE ID=?";
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setInt(1,ID);
pstmt.execute();
}
try {
dao.deleteUser(1);
}catch (Exception e){
e.printStackTrace();
}
运行结果
改
public void updataUser(UserVO user)throws Exception{
Connection conn = DBUtil.connectDB();
String sql ="UPDATE jdbctemplate SET name=?,age=? WHERE ID=?";
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1,user.getName());
pstmt.setInt(2,user.getAge());
pstmt.setInt(3, user.getId());
pstmt.executeUpdate();
}
userVO.setName("Joohn");
userVO.setAge(26);
userVO.setId(2);
try {
dao.updataUser(userVO);
} catch (Exception e) {
e.printStackTrace();
}
2.学习IOC/DI
图例说明
传统应用程序示意图
有IoC/DI容器后程序结构示意图
Inversion of Control,控制反转
所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
Dependency Injection,依赖注入
比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。
二、明天计划的事情:
学习JDBCtemplate
三、遇到的问题:
使用sql语句的时候一定要注意空格,没有空格IDEA也不会报错,但就是编译无法通过。我在这里找了好久的错误最后才知道是少了个空格
四、收获:
看了抽象类和接口概念,基本明白怎么去创建使用抽象类和接口
抽象类abstract | 接口interface |
可以拥有成员变量和普通的成员方法 抽象类可以提供成员方法的实现细节 | 接口中只能存在public abstract 方法; |
抽象类中的成员变量可以是各种类型的 | 接口中的成员变量只能是public static final类型的; |
抽象类可以有静态代码块和静态方法; | 接口中不能含有静态代码块以及静态方法 |
一个类只能继承一个抽象类 | 一个类却可以实现多个接口。 |
对一种事物的抽象,即对类抽象 | 接口是对行为的抽象 |
抽象类作为很多子类的父类,它是一种模板式设计 | 接口是一种行为规范,它是一种辐射式设计 |
任务开始时间:2018年3月1日
预计demo时间:2018年4月20日
评论