JDBC练习

x33g5p2x  于2022-02-17 转载在 其他  
字(6.3k)|赞(0)|评价(0)|浏览(380)

完成商品品牌数据的增删改查操作

查询:查询所有数据

添加:添加品牌

修改:根据id修改

删除:根据id删除

准备环境:

数据库表tb-brand

实体类Brand

测试用例

 表的信息

  1. drop table if exists tb_brand;
  2. -- 创建tb_brand
  3. create table tb_brand
  4. (
  5. -- id 主键
  6. id int primary key auto_increment,
  7. -- 品牌名称
  8. brand_name varchar(20),
  9. -- 企业名称
  10. company_name varchar(20),
  11. -- 排序字段
  12. ordered int,
  13. -- 描述信息
  14. description varchar(100),
  15. -- 状态:0:禁用1启用
  16. `status` int
  17. )
  18. character set utf8;
  19. -- 添加数据
  20. insert into tb_brand (brand_name, company_name, ordered, description, `status`)
  21. values ('三只松鼠','三只松鼠股份有限公司',5,'好吃不上火',0),
  22. ('华为','华为技术有限公司',100,'华为致力于把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界',1),
  23. ('小米','小米科技有限公司', 50,'are you ok', 1);
  24. SELECT * FROM tb_brand;

整列编辑:alt+鼠标左键

快捷生成方法:alt+insert

1、查询所有 

在pojo包下创建一个类(pojo就是用来存放对象的Brand):

  1. package com.pojo;
  2. public class Brand {
  3. // id 主键
  4. private Integer id;
  5. // 品牌名称
  6. private String brand_name;
  7. // 企业名称
  8. private String company_name;
  9. // 排序字段
  10. private Integer ordered;
  11. // 描述信息
  12. private String description;
  13. // 状态:0:禁用1启用
  14. private Integer status;
  15. public Integer getId() {
  16. return id;
  17. }
  18. public void setId(Integer id) {
  19. this.id = id;
  20. }
  21. public String getBrand_name() {
  22. return brand_name;
  23. }
  24. public void setBrand_name(String brand_name) {
  25. this.brand_name = brand_name;
  26. }
  27. public String getCompany_name() {
  28. return company_name;
  29. }
  30. public void setCompany_name(String company_name) {
  31. this.company_name = company_name;
  32. }
  33. public Integer getOrdered() {
  34. return ordered;
  35. }
  36. public void setOrdered(Integer ordered) {
  37. this.ordered = ordered;
  38. }
  39. public String getDescription() {
  40. return description;
  41. }
  42. public void setDescription(String description) {
  43. this.description = description;
  44. }
  45. public Integer getStatus() {
  46. return status;
  47. }
  48. public void setStatus(Integer status) {
  49. this.status = status;
  50. }
  51. @Override
  52. public String toString() {
  53. return "Brand{" +
  54. "id=" + id +
  55. ", brand_name='" + brand_name + '\'' +
  56. ", company_name='" + company_name + '\'' +
  57. ", ordered='" + ordered + '\'' +
  58. ", description='" + description + '\'' +
  59. ", status=" + status +
  60. '}'+"\n";
  61. }
  62. }

因为status是状态0或1,如果我们弄int类型,默认值是0,而用Integer包装类默认值则是null,符合我们的要求

新建一个example创建一个BrandText类

  1. package com.example;
  2. import com.alibaba.druid.pool.DruidDataSourceFactory;
  3. import com.pojo.Brand;
  4. import org.junit.Test;
  5. import javax.sql.DataSource;
  6. import java.io.FileInputStream;
  7. import java.sql.Connection;
  8. import java.sql.PreparedStatement;
  9. import java.sql.ResultSet;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.Properties;
  13. /**
  14. * 品牌数据的增删改查
  15. */
  16. public class BrandText {
  17. /**
  18. * 查询所有的
  19. * 1、SQL:select*from tb_brand
  20. * 2、参数:不需要
  21. * 3、结果:List<Brand>
  22. */
  23. @Test
  24. public void textSelectAll() throws Exception{
  25. //1、获取Connection连接对象
  26. Properties prop=new Properties();
  27. //加载
  28. prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));
  29. //获取连接池对象
  30. DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
  31. //获取数据库连接Connection
  32. Connection conn = dataSource.getConnection();
  33. //2、定义SQL
  34. String sql="select*from tb_brand";
  35. //3、获取pstmt对象
  36. PreparedStatement pstmt=conn.prepareStatement(sql);
  37. //4、设置参数
  38. //5、执行sql
  39. ResultSet rs=pstmt.executeQuery();
  40. //6、处理结果List<Brand> 封装Brand对象,装载到List集合
  41. //创建List集合对象
  42. List<Brand> list=new ArrayList<>();
  43. Brand brand=null;
  44. while(rs.next()){
  45. //获取数据
  46. int id = rs.getInt("id");//快捷键ctrl+alt+v生成左边
  47. String brandName = rs.getString("brand_name");
  48. String companyName = rs.getString("company_name");
  49. int ordered = rs.getInt("ordered");
  50. String description = rs.getString("description");
  51. int status = rs.getInt("status");
  52. //封装Brand对象
  53. brand=new Brand();
  54. brand.setId(id);
  55. brand.setBrand_name(brandName);
  56. brand.setCompany_name(companyName);
  57. brand.setOrdered(ordered);
  58. brand.setDescription(description);
  59. brand.setStatus(status);
  60. list.add(brand);
  61. }
  62. System.out.println(list);
  63. //7、释放资源
  64. rs.close();
  65. pstmt.close();
  66. conn.close();
  67. }
  68. }

运行结果: 

2、增加数据

  1. /**
  2. * 添加
  3. * SQL:insert into tb_brand (brand_name, company_name, ordered, description, status)values(?,?,?,?,?);
  4. * 参数是除了id之外的所有参数信息
  5. * 结果:boolean
  6. * @throws Exception
  7. */
  8. @Test
  9. public void textAdd()throws Exception{
  10. /*
  11. 模拟页面提交的参数
  12. 品牌名称[]'
  13. */
  14. String brand_name="阿里巴巴";
  15. // 企业名称
  16. String company_name="阿里巴巴";
  17. // 排序字段
  18. int ordered=1;
  19. // 描述信息
  20. String description="知名top企业";
  21. // 状态:0:禁用1启用
  22. int status=1;
  23. //1、获取Connection连接对象
  24. Properties prop=new Properties();
  25. //加载
  26. prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));
  27. //获取连接池对象
  28. DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
  29. //获取数据库连接Connection
  30. Connection conn = dataSource.getConnection();
  31. //2、定义SQL
  32. String sql="insert into tb_brand (brand_name, company_name, ordered, description, status)values(?,?,?,?,?)";
  33. //3、获取pstmt对象
  34. PreparedStatement pstmt=conn.prepareStatement(sql);
  35. //4、设置参数
  36. pstmt.setString(1, brand_name);//ctrl+b快速复制
  37. pstmt.setString(2, company_name);
  38. pstmt.setInt(3, ordered);
  39. pstmt.setString(4, description);
  40. pstmt.setInt(5, status);
  41. //5、执行sql
  42. int count = pstmt.executeUpdate();
  43. System.out.println(count>0);
  44. //7、释放资源
  45. pstmt.close();
  46. conn.close();
  47. }

乱码问题: 

我们运行之后发查询数据库发现乱码了,此时说明编码不一致,只需要在配置文件druid.properties中加入:

  1. characterEncoding=utf8

加完之后运行:

3、修改数据

  1. @Test
  2. public void textUpdate()throws Exception{
  3. /*
  4. 模拟页面提交的参数
  5. 品牌名称[]'
  6. */
  7. String brand_name="一本正经";
  8. // 企业名称
  9. String company_name="一本";
  10. // 排序字段
  11. int ordered=666;
  12. // 描述信息
  13. String description="心心比心";
  14. // 状态:0:禁用1启用
  15. int status=1;
  16. int id=3;
  17. //1、获取Connection连接对象
  18. Properties prop=new Properties();
  19. //加载
  20. prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));
  21. //获取连接池对象
  22. DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
  23. //获取数据库连接Connection
  24. Connection conn = dataSource.getConnection();
  25. //2、定义SQL
  26. String sql="update tb_brand set brand_name=?,company_name=?,ordered=?,description=?,status=? where id=?";
  27. //3、获取pstmt对象
  28. PreparedStatement pstmt=conn.prepareStatement(sql);
  29. //4、设置参数
  30. pstmt.setString(1, brand_name);//ctrl+b快速复制
  31. pstmt.setString(2, company_name);
  32. pstmt.setInt(3, ordered);
  33. pstmt.setString(4, description);
  34. pstmt.setInt(5, status);
  35. pstmt.setInt(6, id);
  36. //5、执行sql
  37. int count = pstmt.executeUpdate();
  38. System.out.println(count>0);
  39. //7、释放资源
  40. pstmt.close();
  41. conn.close();
  42. }

**运行结果: **

** 数据库中的数据变化:**

 4、删除数据

  1. /**
  2. * 删除数据的sql为delete from 表名 where 删除条件
  3. * @throws Exception
  4. */
  5. @Test
  6. public void textDelete()throws Exception{
  7. //1、获取Connection连接对象
  8. Properties prop=new Properties();
  9. //加载
  10. prop.load(new FileInputStream("E://JDBC/jdbc-demo/src/druid.properties"));
  11. //获取连接池对象
  12. DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
  13. //获取数据库连接Connection
  14. Connection conn = dataSource.getConnection();
  15. //2、定义SQL
  16. String sql="delete from tb_brand where id=3";
  17. //3、获取pstmt对象
  18. PreparedStatement pstmt=conn.prepareStatement(sql);
  19. //5、执行sql
  20. int count = pstmt.executeUpdate();
  21. System.out.println("删除"+(count>0));
  22. //7、释放资源
  23. pstmt.close();
  24. conn.close();
  25. }

运行结果:

数据库对比图;

后面也可以通过前端回传数据到后端接收来使用数据

相关文章