一个小实例(使用JDBC,JSP在浏览器展示数据库中的数据)
采用Model1(JSP+javabean)来实现
步骤:
- dbHelper是创建数据库的链接对象,操作数据库JDBC
- 创建实体类:商品类
- 创建业务逻辑类(DAO)
- 创建页面层(也可以放在第一步)
业务逻辑类中包括:
- 查询所有商品
- 查询指定商品等
项目原型
items.sql是我们要用到的数据库表。是写好的,直接导入数据库中就行
界面图:
DBHelper类的设计
把jar包放进来
链接mysql的驱动
中文乱码的时候,在Idea右下角,选择GBK然后reload即可,因为默认的是UTF-8
DBHelper
package util; import java.sql.Connection; import java.sql.DriverManager; public class DBHelper { private static final String driver = "com.mysql.jdbc.Driver"; //数据库驱动 //连接数据库的URL地址 private static final String url="jdbc:mysql://localhost:3306/shopping?useUnicode=true&characterEncoding=UTF-8"; private static final String username="root";//数据库的用户名 private static final String password="123456";//数据库的密码 private static Connection conn=null; //静态代码块负责加载驱动 static { try { Class.forName(driver); } catch(Exception ex) { ex.printStackTrace(); } } //单例模式返回数据库连接对象 public static Connection getConnection() throws Exception { if(conn==null)//如果conn不存在就新建一个 { conn = DriverManager.getConnection(url, username, password); return conn; } return conn; } public static void main(String[] args) { try { Connection conn = DBHelper.getConnection(); if(conn!=null) { System.out.println("数据库连接正常!"); } else { System.out.println("数据库连接异常!"); } } catch(Exception ex) { ex.printStackTrace(); } } }
数据库中建好shopping这个scheme
然后将items.sql导入。
写一个main方法测试一下是否链接正常
实体类
编写的字段名字最好跟数据库中的字段名字相同
package entity; //商品类 public class Items { private int id; // 商品编号 private String name; // 商品名称 private String city; // 产地 private int price; // 价格 private int number; // 库存 private String picture; // 商品图片 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } public String getPicture() { return picture; } public void setPicture(String picture) { this.picture = picture; } }
接下来设计数据访问层也就是DAO层
创建业务逻辑类(DAO)
获得所有的商品信息,并在页面上显示
以下三个类重点
- Connection
- PreparedStatement
- ResultSet
package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import util.DBHelper; import entity.Items; //商品的业务逻辑类 public class ItemsDAO { // 获得所有的商品信息 public ArrayList<Items> getAllItems() { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; ArrayList<Items> list = new ArrayList<Items>(); // 商品集合 try { conn = DBHelper.getConnection(); String sql = "select * from items;"; // SQL语句 stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); while (rs.next()) { Items item = new Items(); item.setId(rs.getInt("id")); item.setName(rs.getString("name")); item.setCity(rs.getString("city")); item.setNumber(rs.getInt("number")); item.setPrice(rs.getInt("price")); item.setPicture(rs.getString("picture")); list.add(item);// 把一个商品加入集合 } return list; // 返回集合。 } catch (Exception ex) { ex.printStackTrace(); return null; } finally { // 释放数据集对象 if (rs != null) { try { rs.close(); rs = null; } catch (Exception ex) { ex.printStackTrace(); } } // 释放语句对象 if (stmt != null) { try { stmt.close(); stmt = null; } catch (Exception ex) { ex.printStackTrace(); } } } } }
业务逻辑层写好后,下面要做的就是在页面上来显示就可以了
展示所有商品
在index.jsp中(只贴出了body标签中的内容),这时候还么有去写jsp代码,仅仅是html页面
<body> <h1>商品展示</h1> <hr> <center> <table width="750" height="60" cellpadding="0" cellspacing="0" border="0"> <tr> <td> <!-- 商品循环开始 ,里面的属性值需要等下动态从数据库获取--> <div> <dl> <dt> <a href="details.jsp?id=<%=item.getId()%>"><img src="images/<%=item.getPicture()%>" width="120" height="90" border="1"/></a> </dt> <dd class="dd_name"><%=item.getName() %></dd> <dd class="dd_city">产地:<%=item.getCity() %> 价格:¥ <%=item.getPrice() %></dd> </dl> </div> <!-- 商品循环结束 --> </td> </tr> </table> </center> </body>
加入jsp代码后(标红的部分):
<body> <h1>商品展示</h1> <hr> <center> <table width="750" height="60" cellpadding="0" cellspacing="0" border="0"> <tr> <td> <!-- 商品循环开始 --> <% ItemsDAO itemsDao = new ItemsDAO(); ArrayList<Items> list = itemsDao.getAllItems(); if(list!=null&&list.size()>0) { for(int i=0;i<list.size();i++) { Items item = list.get(i); %> <div> <dl> <dt> <a href="details.jsp?id=<%=item.getId()%>"><img src="images/<%=item.getPicture()%>" width="120" height="90" border="1"/></a> </dt> <dd class="dd_name"><%=item.getName() %></dd> <dd class="dd_city">产地:<%=item.getCity() %> 价格:¥ <%=item.getPrice() %></dd> </dl> </div> <!-- 商品循环结束 --> <% } } %> </td> </tr> </table> </center> </body>
最终展示:
这行一定要有,否则中文乱码。
<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8"%>
Items item = itemDao.getItemsById(Integer.parseInt(request.getParameter("id")));
这句话是从上一个页面得到的指定的item
request.getParameter("id")传过来的是字符串了理性所以要转换成int类型
关于前后端的合作:前端页面先写死,固定排版,后面需要改变的变量,用jsp代码替换掉即可。