201521145042《Java程序设计》第14周学习总结
MySql操作视频与数据库相关jar文件请参考QQ群文件。
0. 本周课程设计发布
1. 本周学习总结
1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容。
2. 书面作业
-
1. MySQL数据库基本操作
建立数据库,将自己的姓名、学号作为一条记录插入。(截图,需出现自己的学号、姓名)
在自己建立的数据库上执行常见SQL语句(截图)
-参考:实验任务书-题目1建立数据库和表:
插入信息:
显示全部信息:
-
2. 使用JDBC连接数据库与Statement
2.1 使用Statement操作数据库。(粘贴一段你认为比较有价值的代码,出现学号)
连接test数据库:
//201521123042 Connection con = null; Statement stmt = null; ResultSet rs = null; String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false"; String userName = "root"; String password = "123456"; String driverName = "com.mysql.jdbc.Driver"; Class.forName(driverName); con = DriverManager.getConnection(url, userName, password);
插入学生信息:
String strSql = "insert into students(stuno,name,age,birthdate,major) values('2015050', '小红', 20,'1997-11-06','cs')"; stmt = con.createStatement(); resultNum = stmt.executeUpdate(strSql); System.out.println(resultNum + "条记录已经插入");
删除学生信息:
strSql = "delete from students where id='2'";// 删除id=2的数据
resultNum = stmt.executeUpdate(strSql);
System.out.println(resultNum + "条记录删除完毕");
更改学生信息:
strSql = "update students set major='中文' where id='1'";
resultNum = stmt.executeUpdate(strSql);
System.out.println(resultNum + "条记录更新完毕");
选择性的输出学生信息:
strSql = "select stuno,name,birthdate,major from students";
rs = stmt.executeQuery(strSql);
System.out.println("学号\t\t姓名\t出生日期\t\t专业");
while (rs.next()) {
System.out.print(rs.getString("stuno") + "\t\t");
System.out.print(rs.getString(2) + " \t");
System.out.print(rs.getDate("birthdate") + "\t");
System.out.print(rs.getString(4) + "\t\n");
}
######2.2 使用JDBC操作数据库主要包含哪几个步骤?
>1.注册驱动
>2.创建连接
>3.通过连接创建语句
>4.通过语句获得结果集
>5.处理结果集
>6.释放资源
**-参考:实验任务书-题目2**
-
3. PreparedStatement与参数化查询
3.1 使用PreparedStatement根据用户指定的查询条件进行查询。(粘贴一段你认为比较有价值的代码,出现学号)
查询ID=16的学生信息
//201521123042 strSql = "select * from students where Id = ?"; pStatement = con.prepareStatement(strSql); pStatement.setInt(1, 16); rs = pStatement.executeQuery();
查询ID小于5的所有学生信息
strSql = "select * from students where Id < ?";
pStatement = con.prepareStatement(strSql);
pStatement.setInt(1, 5);
rs = pStatement.executeQuery();
######3.2 批量更新-批量插入1000个学生,统计整个操作所消耗的时间。(使用方法executeBatch)
//201521123042
long start=System.currentTimeMillis();
for(int i=0;i<1000;i++){
pStatement.setInt(1, i);
pStatement.setString(2, "周迅");
pStatement.setInt(3, 18);
pStatement.setString(4, hmFromat.format(new Date()));
pStatement.setString(5, "电气工程");
pStatement.addBatch();
}
pStatement.executeBatch();
long finish=System.currentTimeMillis();
System.out.println("用时" +(finish-start));
**参考:实验任务书-题目3**
-
4. JDBCUtil与DAO
4.1 粘贴一段你认为比较有价值的代码,出现学号
增加学生信息:
//201521123042 public int add(Student stu) { Connection conn = null; PreparedStatement pst = null; String sql= "insert into students(id,name) values(?,?)"; int result=-1; try{ conn = JDBCUtil.getConnection(); pst=conn.prepareStatement(sql); pst.setInt(1,stu.getId()); pst.setString(2, stu.getName()); result=pst.executeUpdate(); }catch (SQLException sqle) { sqle.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.realeaseAll(null,pst, conn); } return result>0?1:-1; }
删除学生信息:
public int delete(int sid) { Connection conn = null; PreparedStatement pst = null; int result=-1; String strSql = "delete from students where id = ?"; try { conn = JDBCUtil.getConnection(); pst = conn.prepareStatement(strSql); //连接数据库 pst.setInt(1, sid); result = pst.executeUpdate(); //显式释放资源 pst.close(); }catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtil.realeaseAll(null, pst, conn); } return result>0?1:-1; }
更新学生信息:
public int update(Student stu) { Connection conn = null; PreparedStatement pst = null; String strSql = "update students set name = ? where Id = ?"; int result=-1; try{ conn = JDBCUtil.getConnection(); pst = conn.prepareStatement(strSql); pst.setInt(2, stu.getId()); pst.setString(1, stu.getName()); result= pst.executeUpdate(); }catch (SQLException sqle) { sqle.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.realeaseAll(null,pst, conn); } return result>0?1:-1; }
显示所有学生信息,以及按条件查询:
public List<Student> findAll() { Connection conn = null; Statement stat = null; ResultSet rs = null; Student stu=null; List<Student> students=new ArrayList<Student>(); String sql = "select * from student";//表中有id和name这列 try { conn = JDBCUtil.getConnection(); stat = conn.createStatement(); rs = stat.executeQuery(sql); while(rs.next()){ stu=new Student(rs.getInt("id"),rs.getString("name")); students.add(stu); } }catch (SQLException sqle) { sqle.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.realeaseAll(rs,stat, conn); } return students; } public Student findById(int id) { ResultSet rs = null; Connection conn = null; Student stu = new Student(); PreparedStatement pst = null; String strSql = "select * from students where Id = ?"; try{ conn = JDBCUtil.getConnection(); pst=conn.prepareStatement(strSql); pst.setInt(1, id); rs = pst.executeQuery(); while(rs.next()){ stu = new Student( rs.getInt("id"), rs.getString("name")); } }catch (SQLException sqle) { sqle.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.realeaseAll(rs,pst, conn); } return stu; } public List<Student> findByName(String name){ Connection conn = null; PreparedStatement pstat = null; ResultSet rs = null; String sql = "select * from student where name like ?";//表中有id和name这列 Student student = null; List<Student> students=new ArrayList<Student>(); try { conn = JDBCUtil.getConnection(); pstat = conn.prepareStatement(sql); pstat.setString(1, name); rs = pstat.executeQuery(); while(rs.next()){ int stuId = rs.getInt("id"); String stuName = rs.getString("name"); student = new Student(stuId, stuName); students.add(student); } }catch (SQLException sqle) { sqle.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.realeaseAll(rs,pstat, conn); } return students; }
编写一个函数将List中的所有Student取出,放入Map中,其中key为学生的姓名,value为相应的学生对象。
public Map<String,Student>showAllinMap(List<Student> students){ Map<String,Student> map=new HashMap<String,Student>(); for(Student e:students){ System.out.println(e.toString()); map.put(e.getName(), e); } return map; }
4.2 使用DAO模式访问数据库有什么好处?
DAO使程序层次分明,把对数据库的操作都放在这一层,这样其他层的逻辑控制就变得清晰明了了。
对于实现业务逻辑而言,DAO层是基石。
而且分层后DAO的代码维护与变更等也变得清晰可理解。
参考:实验任务书-题目5 -
5. 使用数据库改造购物车系统
5.1 使用数据库改造以前的购物车系统(应有图形界面)。如果以前为完成购物车系统,可编写基于数据库的学生管理系统。包括对学生的增删改查,要求使用。
先在数据库里存放几本书的信息:
查询所需书籍:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Connection conn = null; Statement stat = null; ResultSet rs = null; PreparedStatement pstat = null; String sql = "select * from student where name like ?";//表中有id和name这列 try { conn = JDBCUtil.getConnection(); pstat = conn.prepareStatement(sql); pstat.setString(1, name); rs = pstat.executeQuery(); while(rs.next()){ jLabel6.setText(""+rs.getString("name")); jLabel7.setText(""+rs.getDouble("price")); jLabel8.setText(""+rs.getInt("num")); } }catch (SQLException sqle) { sqle.printStackTrace(); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtil.realeaseAll(rs,pstat, conn); } }
加入购物车:
//201521123042
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
Connection conn = null;
PreparedStatement pstat = null;
int result;
String sql = "insert into ShoppingCart(name,price,num) values(?,?,?) ";//表中有id和name这列
try {
conn = JDBCUtil.getConnection();
pstat = conn.prepareStatement(sql);
pstat.setString(1, jLabel6.getText());
pstat.setDouble(1, Double.parseDouble(jLabel7.getText()));
pstat.setInt(1, Integer.parseInt(jLabel8.getText()));
result = pstat.executeUpdate();
}catch (SQLException sqle) {
sqle.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}finally{
JDBCUtil.realeaseAll(null,pstat, conn);
}
![](http://images2015.cnblogs.com/blog/1109769/201705/1109769-20170528175627688-88088867.png)
######5.2 相比较使用文件,使用数据库存储与管理数据有何不一样?
>①数据库效率高。利用数据库存储访问修改数据比较方便.所有关系型数据库都可以用sql(结构化查询语言)操作数据库;数据库在数据写入读取上做了优化,文本的没有,数据少时执行速度可能看不出区别,但是一旦数据成千上万,那么效率就很明显了。
>②在非数据库系统中,每个应用程序都有自己的专用文件,浪费存储空间。利用数据库可以解决这个问题.
3. 码云
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图