java第八次作业

(一)学习总结

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

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

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

1>方法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)); 
    }

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);

3>方法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() + "条");
        } 

3 . 文本框内容的清空

清除文本的话可用setText("");
移除文本框的话可用remove(文本框);

(二)实验总结

实验内容:
使用JDBC实现实验七的宠物商店
完成实验内容,代码上传到码云,注意,务必将创建数据库的脚本文件随项目文件一起上传,在随笔中分析程序设计思路,用PowerDesigner画出类图结构,并对完成实验内容过程中遇到的问题、解决方案和思考等进行归纳总结,注意代码中必须有必要的注释。
格式如下:
程序设计思路:将实验七中的数据类都转换成Pet数据库中的表,建立JDBC类,连接数据库,对数据库中的数据进行读取放在ArrayList集合中,进行数据的查找添加删除,并进行对数据库内容的修改


问题1:所有对数据查询的时候出现问题
原因:在数据库中,对数据类型的定义为char类型,如果所输入的数据或存入数据不能达到所定义的位数,软件会用空格自动填充,所以和所查询时输入的字符串之间存在空格的差异,进行比较固然会显示错误。所有查询,包括用户登录时,都会遇到相同的问题。
解决方案:将数据库对数据定义的类型为varchar型,字符串长度设置相对较小,满足一般设定的需求,这样就不会有空格进行补位。


问题2:用户购买结束后,登录第二个用户时,购买界面还显示上一位用户的购买信息。

解决方案:使用清除文本的方法setText("");
实现代码:

public void showWelcomePetStorePlus() {
	show.setText("
");
	this.setVisible(false);
	new WelcomePetStorePlus().setVisible(true);
}

问题3:第二位用户显示购买信息时,会在之前购买的内容上面叠加
原因:购买的信息存在了表buy内,表中的内容没有删除,所以叠加
解决方案:添加清除数据库的方法,在点击显示购买信息时,不光表用显示buy中数据的方法,在此之后在调用清除表buy中信息的方法。这样,在显示购买之后,清除了购买的内容,其他用户购买时,表buy是一个空表。

实现代码:

//显示按钮监听
		showBtn.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent e){
				showPet();   //调用显示方法
				dell();
			}


//清除购买列表
	public boolean dell(){
		boolean result=false;
		Connection conn = null;
		PreparedStatement pstmt = null;	
		try{
			conn = JDBCUtils.getConnection(1);
			String  sql="delete from buy";
			pstmt = conn.prepareStatement(sql);
			if(pstmt.executeUpdate()>0){
				result = true;
			}					
		}catch(Exception e ){
			e.printStackTrace();
		}finally{
			JDBCUtils.close(conn);
		}	
		return result;
	}

欢迎界面:

管理员界面:

用户登录界面:

用户注册界面:

购买界面:

(三)代码托管

  • 码云commit历史截图

原文地址:https://www.cnblogs.com/hc395071675/p/6848431.html