目录
一、java+MySQL,java对数据库表进行增删改查任务前提:
要求一:创建lib文件夹
要求二:添加druid.properties
要求三:创建四个子文件夹
二、具体要求如下:
1、编写DbUtils类,连接数据库;
2、写一个实体类Product.java
3、写一个产品表数据访问类ProductDao.java
4、写一个测试类TestProDao.java
三、数据库表配置和java完整代码如下:
1、在MySQL数据库中,我创建的数据库,命名为mydata1
2、DbUtils.java连接数据库的类:
3、实体类Product.java
4、ProductDao.java包含增删改查的方法
5、TestProDao.java调用方法,对数据库表进行增删改查
四、运行结果
1、添加产品:
2、修改产品:
3、根据pro_Id查询一个产品:
4、查询所有产品,返回一个list列表:
5、删除产品
已在项目路径下,创建了一个lib文件夹,粘贴两个jar包:duruid-1.0.9.jar和mysql-connector-java-5.1.37-bin.jar;
并分别鼠标右键,选中add as library,添加到环境配置中;
在本项目的src目录下,粘贴druid.properties;
在本项目的src目录下创建四个文件夹,分别命名为com.qingruan.dao、com.qingruan.entity、com.qingruan.test、com.qingruan.util(com后面的是公司名,可替换):
文件夹下分别放相应功能的java文件,这样分工明确,不会混乱。
com.qingruan.dao:创建包含增删改查的方法的类,命名为:ProductDao.java
com.qingruan.entity:创建实体类,命名为:Product.java
com.qingruan.test:创建测试类,命名为:TestProDao.java
com.qingruan.util:创建java连接数据库的类,命名为:DbUtils.java
分割线————————————————————————————
java连接MySQL的具体讲解在上一篇。
同时在MySQL创建产品表product,注意数据类型和属性要一致;在实体类应有三个私有属性:
产品序号pro_Id、产品名称pro_name、产品价格pro_price,其中pro_Id要设置为主键,并自增;
最后创建get/set方法;
包含增删改查的方法:
(在这个类中先抛出异常,在测试类调用方法时,再进行try..catch...)
提示如下:
增加产品的方法:public int addProd(Product p)throws Exception;
删除产品的方法:public int delProd(int pro_Id) throws Exception;
修改产品的方法:public int updateProd(Product p)throws Exception;
查询所有产品的方法,并返回产品集合:public List selectAll() throws Exception;
根据pro_Id产品id查询单个产品的方法:public Product selectProdById(int id)throws Exception;
要求使用数据访问ProductDao.java中的增删改查方法,并测试打印结果。
分割线——————————————————————————
数据库下的表名为product;
表的配置如下:
我的MySQL的账号名为:root,密码为1234;(请根据自身情况,对以下代码进行改动)
package com.qingruan.util; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; // 针对数据库的连接作用 public class DbUtils { //定义私有成员 private static DataSource ds; //1.静态代码块 加载配置文件,初始化连接池对象 static{ // 特点:用于给类进行初始化,只加载一次,随着类的加载而加载 try { Properties pro =new Properties(); //加载属性文件 pro.load(DbUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //获得连接池对象 ds = DruidDataSourceFactory.createDataSource(pro); }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //2.定义一个方法:获取连接对象 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } //3.定义一个方法:用于释放资源 public static void close(ResultSet rs,PreparedStatement ps,Connection cn){ if(rs!=null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(ps!=null){ try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(cn!=null){ try { cn.close(); // 此时的关闭,是归还给连接池对象 } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 获得连接池的方法 * @return */ public static DataSource getDataSource(){ return ds; } }
package com.qingruan.entity; // 产品类 与 数据库中的product产品表是与之对应的 // 将数据库的产品表 看作是 java中的一个产品类 数据库中产品表的字段可以看作是 java中产品类的属性 public class Product { private Integer pro_Id; //产品编号(给程序使用) private String pro_name; // 产品名称 private Integer pro_price; // 产品价格 public Product() { // TODO Auto-generated constructor stub } public Product( String pro_name, Integer pro_price) { this.pro_name = pro_name; this.pro_price = pro_price; } public Product(Integer pro_Id, String pro_name, Integer pro_price) { this.pro_Id = pro_Id; this.pro_name = pro_name; this.pro_price = pro_price; } @Override public String toString() { return "Product [pro_Id=" + pro_Id + ", pro_name=" + pro_name + ", pro_price=" + pro_price + "]"; } public Integer getPro_Id() { return pro_Id; } public void setPro_Id(Integer pro_id) { this.pro_Id = pro_id; } public String getPro_name() { return pro_name; } public void setPro_name(String pro_name) { this.pro_name = pro_name; } public Integer getPro_price() { return pro_price; } public void setPro_price(Integer pro_price) { this.pro_price= pro_price; } }
package com.qingruan.test; import com.qingruan.entity.Product; import com.qingruan.util.DbUtils; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; // dao 负责与数据库交互的,目前实现的技术是jdbc public class ProductDao { private static PreparedStatement ps = null; private static Connection cn = null; private static ResultSet rs = null; /** * 添加产品 * * @param p 需要传入的参数是产品对象 * @return 返回受影响的行数 */ public int addProd(Product p) throws Exception { // 传入一个产品对象 // 1.获得连接 cn = DbUtils.getConnection(); // 2.获得预处理对象 String sql = "insert into product values(null,?,?)"; ps = cn.prepareStatement(sql); // 3.赋予实际的参数 ps.setString(1, p.getPro_name()); ps.setInt(2, p.getPro_price()); // 4.得到结果集 int result1 = ps.executeUpdate(); DbUtils.close(null, ps, cn);// 5.释放资源 return result1; } /** * 修改产品信息 * * @param p 需要修改的产品信息 * @return 返回受影响的行数 */ public int updateProd(Product p) throws Exception { cn = DbUtils.getConnection(); String sql = "update product set pro_name=?,pro_price=?where pro_Id=?"; ps = cn.prepareStatement(sql); ps.setString(1, p.getPro_name()); ps.setInt(2, p.getPro_price()); ps.setInt(3, p.getPro_Id()); int result2 = ps.executeUpdate(); DbUtils.close(null, ps, cn); return result2; } /** * 依据产品id删除产品信息 * * @param pro_Id 需要删除的产品id * @return 返回受影响的行数 */ public int delProd(int pro_Id) throws Exception { cn = DbUtils.getConnection(); String sql = "delete from product where pro_Id=?"; ps = cn.prepareStatement(sql); ps.setInt(1, pro_Id); int result = ps.executeUpdate(); return result; } /** * 依据产品id查询产品详细信息 * * @param pro_Id 需要传入的产品编号 * @return 返回产品信息 */ public Product selectProdById(int pro_Id) throws Exception { Product pro = null; cn = DbUtils.getConnection(); String sql = "select * from product where pro_id=?"; ps = cn.prepareStatement(sql); ps.setInt(1, pro_Id); rs = ps.executeQuery(); if (rs.next()) { pro = new Product(rs.getInt(1), rs.getString(2),rs.getInt(3)); } DbUtils.close(null, ps, cn); return pro; } /** * 查询产品列表 * * @return 返回产品集合 */ public List selectAll() throws Exception{ List
list = new ArrayList (); cn = DbUtils.getConnection(); String sql = "select * from product"; ps = cn.prepareStatement(sql); rs = ps.executeQuery(); while (rs.next()) { list.add(new Product(rs.getInt(1), rs.getString(2),rs.getInt(3)));//放到集合中 } return list; } }
package com.qingruan.test; import com.qingruan.entity.Product; import org.junit.Test; import java.util.List; public class TestProDao { ProductDao dao =new ProductDao(); //添加产品 @Test public void save(){ int result = 0; try { result = dao.addProd(new Product("苹果", 22)); } catch (Exception e) { e.printStackTrace(); } System.out.println(result>0?"添加成功":"添加失败"); } //单个查询 @Test public void findById() { Product pro = null; try { pro = dao.selectProdById(1); } catch (Exception e) { e.printStackTrace(); } System.out.println(pro); } //查询所有 @Test public void findAll(){ List
list = null; try { list = dao.selectAll(); } catch (Exception e) { e.printStackTrace(); } for(Product pro : list){ System.out.println(pro); } } //删除 @Test public void delete(){ int result = 0; try { result = dao.delProd(5); } catch (Exception e) { e.printStackTrace(); } System.out.println(result > 0 ? "删除成功" : "删除失败"); } //修改 @Test public void update() { Product pro = null; int result2 = 0; try { pro = dao.selectProdById(2); pro.setPro_name("哇塞"); result2 = dao.updateProd(pro); } catch (Exception e) { e.printStackTrace(); } System.out.println(result2 > 0 ? "删除成功" : "删除失败"); } }