《Java技术》第八次作业

Java第八次作业


一 . 学习总结

1.XMind

2.在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,使用PreparedStatement接口而不使用Statement的原因

  • Statement接口
  • 一个Statement对象用于执行静态SQL语句,并获得语句执行后的结果
  • executeUpdate(String sql)方法执行数据库的SQL语句,如INSERT,UPDATE,DELETE等,返回更新记录数
  • executeQuery(String sql)方法执行数据库查询操作,返回一个结果集对象
  • PreparedStatement接口
  • 创建一个可以编译的SQL语句对象,该对象可以被多次运行,以提高执行效率,该接口是Statement类的子接口,属于预处理操作,与Statement接口不同的是,PreparedStatement接口操作时,在数据表中准备好SQL语句,内容暂时不设置,等待用户分别设置,PreparedStatement接口除Statement的所有操作,还有新操作
  • executeUpdate()方法执行设置的预处理SQL语句
  • executeQuery()方法执行数据库查询操作,返回ResultSet
  • 使用Statement接口(进行查询时,SQL语句的内容是具体的)
  • 实例:
        public boolean queryAllData(String name, String password) {
	        Connection conn = null;
	        Statement stmt = null;
	        ResultSet rs = null;
	        boolean flag = false;
	        ArrayList<LoginCheck> list = new ArrayList<LoginCheck>();
	        try {
		        conn = JDBCUtils.getConnectionSQL();
		        stmt = conn.createStatement();
		        String sql = "select name,password from uers where name = 'lcy' and password = '123456'";
		        rs = stmt.executeQuery(sql);
		        while (rs.next()) {
			        LoginCheck thisUser = new LoginCheck();
			        thisUser.setName(rs.getString("name"));
			        thisUser.setPassword(rs.getString("password"));
			        list.add(thisUser);
			        if (name.equals(thisUser.getName())
					&& password.equals(thisUser.getPassword())) {
				        flag = true;
			        }
		        }
	        } catch (Exception e) {
		            e.printStackTrace();
	        } finally {
		        JDBCUtils.close(conn);
	        }
	        return flag;
        }
  • 使用PreparedStatement接口(进行查询时,SQL语句使用占位符进行设置具体内容)
> * 实例:
	    
        person.add(new LoginCheck(name, password1, phone, email));
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = JDBCUtils.getConnectionSQL();
			String sql = "insert into uers (name,password,phone,email) values (?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			pstmt.setString(2, password1);
			pstmt.setString(3, phone);
			pstmt.setString(4, email);
			int num = pstmt.executeUpdate();
			} catch (Exception e1) {
				e1.printStackTrace();
			} finally {
				JDBCUtils.close(conn);
		}

3.其他内容总结


二 . 实验总结

1. 宠物商店图形界面

  • 程序设计思路:

    • 首先,创建WelcomeFrame界面,进行注册或登录功能;点击注册,进入LoginFrame注册界面,进行注册,注册时,进行数据库连接,注册信息存入数据库;点击登录,判断输入的信息与数据库内容比较,若为管理员登录,进入AdFrame管理员界面,否则为UserFrame用户界面;若购买,进行数据库连接,若在用户界面购买后,信息存入数据库,点击宠物清单进入ListFrame清单界面
    • 其次创建Pet宠物类存放宠物属性,LoginCheck注册类存放注册属性,创建JDBCUtils数据库类,与数据库进行连接,注册时比较TextFiled的字符串与数据库数据,GUITools类对于界面组件显示的方法
    • 最后,AdminDao类是对管理界面的按钮组件功能进行实现,实现按钮功能时,进行数据库连接,AdService类是对AdminDao类中的方法进行判断,UserDao类是对用户界面的按钮组件功能进行实现,实现按钮功能时,进行数据库连接,UserService类是对UserDao类中的方法进行判断
  • 问题1:

    • 注册登录时出现空指针异常,conn对象无法执行
  • 原因:

    • 没有为conn赋值,执行注册或者登录时,没有连接数据库
  • 解决方案:

    • 当异常进行增删改查时,捕获异常时,为conn赋值
         conn = JDBCUtils.getConnectionSQL();
    
  • 问题2:

    • 执行带有数据库的项目时,不能正确执行
  • 原因:

    • 没有创建项目里的数据库
  • 解决方案:

    • 打开项目的.sql文件,先创建数据库,再创建表,添加数据等操作,再执行项目的Main方法
  • 类图:


三 .代码托管


四 .学习进度条

进程 代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
目标 5000行 300小时
第2-4周 500/500 45/45 自学了前四章的内容,自己练习了学习过程中的所有代码,并写了一些练习题提交到了码云中
第5周 200/700 15/55 学习了老师要求的内容
第6周 300/1000 15/70 学习了作业中要求的内容
第7-8周 200/1200 15/85 掌握了本次学习的全部内容
第9周 300/1500 10/95 掌握了本次学习的内容
第10周 400/1900 10/95 掌握了本次学习的内容
第11周 600/2500 20/95 对图形界面有了一定的理解
第12周 500/3000 20/115 对Java数据库编程有了深入的理解

posted @ 2017-05-15 22:19  Melody529  阅读(173)  评论(0编辑  收藏  举报