Java第八次作业--数据库编程

(一)学习总结

1.用思维导图对本周的学习内容进行总结。

2 . 通过实验内容中的具体实例说明在执行executeUpdate()方法和executeQuery()方法中使用动态参数时,为什么要使用PreparedStatement接口而不使用Statement,比较使用两种接口的不同之处。

JDBC中Statement 接口提供了三种执行 SQL 语句的方法:executeQueryexecuteUpdateexecute。使用哪一个方法由 SQL 语句所产生的内容决定。

  • 方法executeQuery

    用于产生单个结果集(ResultSet)的语句,例如 SELECT 语句。 被使用最多的执行 SQL 语句的方法。这个方法被用来执行 SELECT 语句,它几乎是使用最多的 SQL 语句。但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。

    如:

      //加载数据库驱动
      Class.forName("com.mysql.jdbc.Driver");
      //使用DriverManager获取数据库连接
      Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234");
      //使用Connection来创建一个Statment对象
      Statement  stmt = conn.createStatement();
      //执行查询语句
      ResultSet rs =stmt.executeQuery("select * from teacher");
      //把查询结果输出来
      while (rs.next())
      {
      	System.out.println(rs.getInt(1) + "/t" +    rs.getString(2)); 
      }
    
  • 方法executeUpdate

    用于执行 INSERT、UPDATE或DELETE语句以及SQLDDL(数据定义语言)语句,例如 CREATE TABLE 和DROPTABLE。INSERT、UPDATE或DELETE语句的效果是修改中零行或多行中的一列或多列。executeUpdate的返回值是一个整数(int),指示受影响的行数(即更新计数)。对于CREATETABLE或DROPTABLE等不操作行的语句,executeUpdate 的返回值总为零。

    如:

      //加载数据库驱动
      Class.forName("com.mysql.jdbc.Driver");
      //使用DriverManager获取数据库连接
      Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","1234");
      //使用Connection来创建一个Statment对象
      Statement  stmt = conn.createStatement(); 
      //执行DML语句,返回受影响的记录条数
      return stmt.executeUpdate(sql);
    
  • 方法execute:

    可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。但它执行SQL语句时比较麻烦,通常我们没有必要使用execute方法来执行SQL语句,而是使用executeQuery或executeUpdate更适合,但如果在不清楚SQL语句的类型时则只能使用execute方法来执行该SQL语句了。

    如:

      //加载驱动
      Class.forName(driver);
      //获取数据库连接
      conn = DriverManager.getConnection(url , user , pass); 
      //使用Connection来创建一个Statment对象 
      stmt = conn.createStatement();
      //执行SQL,返回boolean值表示是否包含ResultSet 
      boolean hasResultSet = stmt.execute(sql); 
      //如果执行后有ResultSet结果集
      if (hasResultSet){
      	//获取结果集 
      	rs = stmt.getResultSet();
      	//ResultSetMetaData是用于分析结果集的元数据接口 
      	ResultSetMetaData rsmd = rs.getMetaData();
      	int columnCount = rsmd.getColumnCount();
      	//迭代输出ResultSet对象
      	while (rs.next())
          	{//依次输出每列的值
              	for (int i = 0 ; i < columnCount ; i++ ) 
              	{
                  	System.out.print(rs.getString(i + 1) + "/t");
              	}
              	System.out.print("/n");
          	} 
      	}else {
          	System.out.println("该SQL语句影响的记录有" + stmt.getUpdateCount() + "条");
      	} 
    

(二)实验总结

程序设计思路:

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

问题1:

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

原因:

没有为conn赋值,执行注册或者登录时,没有连接数据库

解决方案:

当异常进行增删改查时,捕获异常时,为conn赋值

问题2:

不能显示图片

原因:

未找到原因,待解决

总结:数据库编程是固定的套路,记住JDBC的操作步骤和executeUpdate()、executeQuery()的用法即可

三 .代码托管

地址链接:

http://git.oschina.net/hebau_cs15/java-cs02cmy/tree/master

posted on 2017-05-17 22:35  绝版de初夏  阅读(147)  评论(0编辑  收藏  举报