zoukankan      html  css  js  c++  java
  • 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历史截图

  • 相关阅读:
    pandas
    高性能的异步爬虫
    组件推荐Forloop.HtmlHelpers 用来实现MVC的js加载顺序
    MVC 表单防伪,自定义提示(AntiForgery.Validate)
    Dapper 多表(三表以上)查询小技巧
    layui记录
    java websocket中的ping-pong 机制
    图像读取Exif小知识,图像扶正,还原拍摄时的角度
    关于人脸识别引擎FaceRecognitionDotNet的实例
    .NET的关于人脸识别引擎分享(C#)
  • 原文地址:https://www.cnblogs.com/hc395071675/p/6848431.html
Copyright © 2011-2022 走看看