java+MySQL调用方法对MySQL的表进行增删改查操作
Posted 我要写爪哇一百题
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java+MySQL调用方法对MySQL的表进行增删改查操作相关的知识,希望对你有一定的参考价值。
目录
一、java+MySQL,java对数据库表进行增删改查任务前提:
1、在MySQL数据库中,我创建的数据库,命名为mydata1
5、TestProDao.java调用方法,对数据库表进行增删改查
一、java+mysql,java对数据库表进行增删改查任务前提:
要求一:创建lib文件夹
已在项目路径下,创建了一个lib文件夹,粘贴两个jar包:duruid-1.0.9.jar和mysql-connector-java-5.1.37-bin.jar;
并分别鼠标右键,选中add as library,添加到环境配置中;
要求二:添加druid.properties
在本项目的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
分割线————————————————————————————
二、具体要求如下:
1、编写DbUtils类,连接数据库;
java连接MySQL的具体讲解在上一篇。
2、写一个实体类Product.java
同时在MySQL创建产品表product,注意数据类型和属性要一致;在实体类应有三个私有属性:
产品序号pro_Id、产品名称pro_name、产品价格pro_price,其中pro_Id要设置为主键,并自增;
最后创建get/set方法;
3、写一个产品表数据访问类ProductDao.java
包含增删改查的方法:
(在这个类中先抛出异常,在测试类调用方法时,再进行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;
4、写一个测试类TestProDao.java
要求使用数据访问ProductDao.java中的增删改查方法,并测试打印结果。
分割线——————————————————————————
三、数据库表配置和java完整代码如下:
1、在MySQL数据库中,我创建的数据库,命名为mydata1
数据库下的表名为product;
表的配置如下:
2、DbUtils.java连接数据库的类:
我的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;
3、实体类Product.java
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;
4、ProductDao.java包含增删改查的方法
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<Product> list = new ArrayList<Product>(); 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;
5、TestProDao.java调用方法,对数据库表进行增删改查
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<Product> 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 ? "删除成功" : "删除失败");
四、运行结果
1、添加产品:
2、修改产品:
3、根据pro_Id查询一个产品:
4、查询所有产品,返回一个list列表:
5、删除产品
JAVA之MySQL数据库增删改查Java入门练手
@[toc]
如上为基本的页面设计。
三,具体描述
3.1,添加熟食包点
上述代码块解释:
终端输入数字1进入adduser方法,执行添加操作。
依次输入熟食编号,熟食名称,熟食价格,熟食库存。
service.addUser(uid, eatname, eatprice, spare);
调用service的方法进行添加。
3.1.1,service.addUser方法
public void addUser(String uid, String eatname, String eatprice, String spare) throws SQLException
dao.addUser(uid, eatname, eatprice, spare);
接受ui传递的四个属性值,调用dao,进行添加。
起了一个中间传递的作用。
3.1.2,dao方法执行添加sql
添加一条记录。
上述代码块解释:
PreparedStatement:是包中的一个接口,继承Statement,里面有已编译的 SQL 语句。
我觉得他的作用就是简化sql繁琐的拼接过程,方便使用。
里面的sql语句里的?就是他的功劳,提高代码的可读性和可维护性。
执行INSERT 添加sql语句。
后使用executeUpdate抽象方法,返回更新计数。
3.2,删除熟食包点
按照编号删除和按照名称删除基本差不多,我们已按照编号删除来写一下。
ui核心代码:
Scanner input = new Scanner(System.in);
int a = input.nextInt();
int m = service.delete(a);
把我们需要删除的id输入,存储到变量a,执行service.delete方法,传递a给service类。
3.2.1,service.delete方法
public int delete(int a) throws SQLException
// TODO Auto-generated method stub
return dao.deletewww(a);
依然是传递作用哈。调用dao,进行删除。
3.2.2,dao方法执行删除sql
public int deletewww(int a) throws SQLException
String sql = "DELETE FROM eat WHERE uid=?";
PreparedStatement pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setInt(1, a);
return pstmt.executeUpdate();
如上代码解释:
较为简单获取传递的目标id值,执行删除sql语句。
后使用executeUpdate抽象方法,返回更新计数。
3.3,查询熟食包点
举例:按照熟食编号查询
上述代码块解释:
把终端输入的查询目标id存入变量inputeatId,后执行:
UserBean user= service.searchByid(inputeatId);
调用service的方法进行查询。
3.3.1,service.searchByid方法
和上文一样,不多说了,传递的作用。
目标dao.searchByid。
3.2.2,dao方法执行查询sql
上述代码块解释:
executeQuery()方法来下达select指令以查询数据库。
rs.next():指针指向下一条记录,如果有记录,返回true
user=new UserBean(u,n, psw,s);
传入UserBean实体类。
如果传递的user不为空,执行输出语句。
System.out.format("%-2s %-8s %-5s %-5s"+\\n,"食品编号","食物名称","食物价格","食品库存");
。。。
System.out.format("%-8s %-8s %-8s %-5s "+\\n,user.getNumber(),user.geteatname(),user.geteatprice(),user.getspare());
为了规范输出,对其操作。
3.4,修改熟食包点
以按照编号修改为例
上述代码块解释:
前面和查询操作一样,先执行查询操作,找到目标值。
System.out.println(user.getNumber()+"\\t"+user.geteatname()+"\\t"+user.geteatprice()+"\\t"+user.getspare());
输出目标的查询结果(和上文查询操作一模一样)。
之后输入输入新的食物名称,输入新的食物价格,输入新的食物库存。
后执行updateid方法。
3.4.1,service.updateid方法
和上文一样,不多说了,传递的作用。
调用dao的searchByupdateid
3.4.2,dao方法执行更新sql
String sql ="update eat set eatname=?,eatprice=?,spare=? where uid=?";
PreparedStatement pstmt =(PreparedStatement) conn.prepareStatement(sql);
使用PreparedStatemen接口,继承Statement。
执行update sql更新语句。
将传递来的新目标变量,存入数据库中。
3.5排序熟食包点
以按照按照价格排序为例。
System.out.println("按照价格排序:");
ResultSet rs = service.sortprice();
先执行service.sortprice方法。
3.5.1,service.updateid方法
和上文一样,不多说了,传递的作用。
调用dao的dao.sortprice
3.5.2,dao方法执行排序sql
public ResultSet sortprice() throws SQLException
Statement stmt = conn.createStatement();
//String sql = "select * from eat";//表名
String sql ="select * from eat order by eatprice desc";
ResultSet rs = stmt.executeQuery(sql);
return rs;
上述代码解释:
执行排序sql语句以eatprice为目标建执行降序排序操作。
返回排序后的对象。
3.5.3,返回ui输出排序后
while遍历结果集。
规定每一个元素占位符大小,为了美观好看,整齐。
以上是关于java+MySQL调用方法对MySQL的表进行增删改查操作的主要内容,如果未能解决你的问题,请参考以下文章