java+MySQL调用方法对MySQL的表进行增删改查操作

Posted 我要写爪哇一百题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java+MySQL调用方法对MySQL的表进行增删改查操作相关的知识,希望对你有一定的参考价值。

目录

一、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、删除产品


一、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的表进行增删改查操作的主要内容,如果未能解决你的问题,请参考以下文章

JAVA之MySQL数据库增删改查Java入门练手

数据库基础学习

如何用java对mysql 里面的数据进行批量修改

mysql5.7版本的增删改查

Android用jdbc链接mysql并对数据库进行增,删,改,查;注意是Android

java能够实现对数据库的监听吗