201521123108《Java程序设计》第14周学习总结

1. 本周学习总结

2. 书面作业

Q1. MySQL数据库基本操作

建立数据库,将自己的姓名、学号作为一条记录插入。(截图,需出现自己的学号、姓名)
答:

在自己建立的数据库上执行常见SQL语句(截图)
-参考:实验任务书-题目1

Q2. 使用JDBC连接数据库与Statement

2.1 使用Statement操作数据库。(粘贴一段你认为比较有价值的代码,出现学号)
答:采用maven管理项目,添加Mysql依赖。

    </dependency>
       <dependency>
           <groupId>mysql</groupId>
           <artifactId>mysql-connector-java</artifactId>
           <version>6.0.6</version>
       </dependency>
   </dependencies>

代码:

//201521123108

public DBHelper() {                       //连接数据库
    try {
        Driver driver = new com.mysql.cj.jdbc.Driver();
        DriverManager.registerDriver(driver);
        String url = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL=false";
        String user = "root";
        String password = "123456";
        conn = DriverManager.getConnection(url, user, password);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void searchByStm()
{                                         //遍历输出

    try {
        statement=conn.createStatement();
        ResultSet rs = statement.executeQuery(querySql);
        while(rs.next())
        {
            String uname = rs.getString(1);
            String uid = rs.getString(2);
            System.out.println(uid + "\t" + uname );
        }
    }catch(Exception e)
    {
        e.printStackTrace();
    }

}

2.2 你认为使用JDBC操作数据库的套路是什么?有那几点需要注意。
答:1.加载数据库所需驱动
2.提供JDBC所连接的URL

3.创建连接

4.创建Statement实例

5.执行sql语句

6.关闭JDBC对象
-参考:实验任务书-题目2

Q3. PreparedStatement与参数化查询

3.1 使用PreparedStatement根据用户指定的查询条件进行查询。(粘贴一段你认为比较有价值的代码,出现学号)
答:

//201521123108
public void searchByPst()
{
    ArrayList<Long> arr=new ArrayList<Long>();
    try{
        pst=conn.prepareStatement(querySql);
        rs=pst.executeQuery();
        while(rs.next())
        {
            arr.add(rs.getLong("ID"));
        }
        System.out.println(arr);
        this.pst.close();
    }catch (Exception e)
    {
        e.printStackTrace();
    }
}

3.2 批量更新-批量插入1000个学生,统计整个操作所消耗的时间。对比普通方法插入与使用executeBatch方法所消耗的时间。(使用JUint4测试,需要出现时间对比截图)
答:

public void addByPst()
{
    String sql= "insert into lin (Name,ID) values(?,?)";
    try{
        pst=conn.prepareStatement(sql);
        long btime=System.currentTimeMillis();
        for(int i=0;i<1000;i++)
        {
            pst.setString(1,"lin");
            pst.setString(2,"100");
            int n=pst.executeUpdate();
        }
        long atime=System.currentTimeMillis();
        System.out.println(atime-btime+"ms");
        pst.close();
    }catch (Exception e)
    {
        e.printStackTrace();
    }
}

参考:实验任务书-题目3
Q4. JDBCUtil与DAO

4.1 粘贴一段你认为比较有价值的代码,并说明为什么要摘取这段代码。出现学号
答:

//201521123108
class StudentDao
{

    public Connection conn = null;
    public Statement statement = null;
    public PreparedStatement pst=null;
    public ResultSet rs=null;
    private static String querySql ="select * from lin";

    public StudentDao() {
        try {
            Driver driver = new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
            String url = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC&useSSL=false";
            String user = "root";
            String password = "123456";
            conn = DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public boolean add(Student stu)
    {
        boolean flag=true;
        String sql= "insert into lin (Name,ID) values(?,?)";
        try{
            pst=conn.prepareStatement(sql);
            pst.setString(1,stu.name);
            pst.setInt(2,stu.id);
            int i=pst.executeUpdate();
            if(i==0){
                flag=false;
            }

        }catch (Exception e)
        {
            e.printStackTrace();
        }
        finally {
            try {
                pst.close();
            }catch(SQLException e) {}
        }

        return flag;
    }

    public boolean delete(Student stu)
    {
        boolean flag=true;
        String sql="delete from user where id=?";
        try{
            pst=conn.prepareStatement(sql);
            pst.setInt(1,stu.id);
            int i=pst.executeUpdate();
            if(i==0){
                flag=false;
            }
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        finally {
            try {
                pst.close();
            }catch(SQLException e) {}
        }

        return flag;
    }


    public boolean update(Student stu)
    {
        boolean flag=true;
        String sql="update lin set Name=? where ID=?";
        try{
            pst=conn.prepareStatement(sql);
            pst.setString(1,stu.name);
            pst.setInt(2,stu.id);
            int i=pst.executeUpdate();
            if(i==0){
                flag=false;
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        finally {
            try {
                pst.close();
            }catch(SQLException e) {}
        }

        return flag;
    }


    public List<Student> findAll()
    {
        List<Student> students=new ArrayList<Student>();
        try{
            pst=conn.prepareStatement(querySql);
            rs=pst.executeQuery();
            while(rs.next())
            {
                students.add(new Student(rs.getString("Name"),rs.getInt("ID")));
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        finally {
            try {
                rs.close();
                pst.close();
            }catch(SQLException e) {}
        }

        return students;
    }

    public Student findById(int id)
    {
        Student stu=new Student();
        String sql="SELECT * FROM lin where id=?";

        try{
            pst=conn.prepareStatement(sql);
            pst.setInt(1,id);
            rs=pst.executeQuery();
            stu.name=rs.getString("Name");
            stu.id=rs.getInt("ID");
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        finally{
            try {
                rs.close();
                pst.close();
            }catch(SQLException e) {}
        }

        return stu;

    }

    public List<Student> findByName(String name)
    {
        String sql="SELECT * FROM lin where Name like \"?%\"";
        List<Student> students=new ArrayList<Student>();
        try{
            pst=conn.prepareStatement(sql);
            pst.setString(1,name);
            rs=pst.executeQuery();
            while(rs.next())
            {
                students.add(new Student(rs.getString("Name"),rs.getInt("ID")));
            }
        }catch (Exception e)
        {
            e.printStackTrace();
        }
        finally {
            try{
                rs.close();
                pst.close();
            }catch (SQLException e){}
        }

        return students;
    }
}

4.2 使用DAO模式访问数据库有什么好处?
答:DAO的好处就是提供给用户的接口只有DAO的接口,所以如果用户想添加数据,只需要调用create函数即可,不需要数据库的操作。DAO使程序层次分明,逻辑清晰。如需要对程序进行修改,只需要对Dao中的某个方法进行修改,无需对整个程序进行修改,方便代码的维护。

参考:实验任务书-题目5
Q5. 使用数据库改造购物车系统

5.1 使用数据库改造以前的购物车系统(应有图形界面)。如果以前为完成购物车系统,可编写基于数据库的学生管理系统。包括对学生的增删改查,要求使用。
答:

public List<Commodity> findByName(String name)
{
    String sql="SELECT * FROM Commodity where Name like \"?%\"";
    List<Commodity> students=new ArrayList<Commodity>();
    try{
        pst=conn.prepareStatement(sql);
        pst.setString(1,name);
        rs=pst.executeQuery();
        while(rs.next())
        {
            students.add(new Commodity(rs.getInt("ID")rs.getString("Name"),rs.getDouble("Price")));
        }
    }catch (Exception e)
    {
        e.printStackTrace();
    }
    finally {
        try{
            rs.close();
            pst.close();
        }catch (SQLException e){}
    }

    return students;
}

5.2 相比较使用文件,使用数据库存储与管理数据有何不一样?
答:数据库方便管理,并且读取速度快效率高,容量极大。最关键最关键的还是快这个优势,如果是简单的数据存储,那用excel就可以,但作为一些软件的后台数据管理,就必须利用数据库进行操作。

posted @ 2017-05-28 18:43  无人的龙之御币  阅读(235)  评论(0编辑  收藏  举报