鱼C论坛

 找回密码
 立即注册
查看: 1280|回复: 7

求求大佬看看这个JDBC

[复制链接]
发表于 2022-5-25 10:04:30 | 显示全部楼层 |阅读模式
8鱼币
package test02;

import Utils.JDBCUtils;
import org.junit.Test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DeptOper {
    //全查dept表中的字段 最终显示出来
    public List<Dept>findAll(){
        List<Dept> list= new ArrayList<>();
        try{
            //获取数据库的连接
            Connection connection = JDBCUtils.getConnection();
            //编写查询语句
            String sql="select*from dept";
            //预编译
            PreparedStatement ps = connection.prepareStatement(sql);
            //进行查询
            ResultSet rs = ps.executeQuery();
            //遍历rs
            while(rs.next()){
                //每读取一条记录,就会创建一个dept对象
                int id=rs.getInt("id");
                String dname= rs.getNString("dname");
                String loc= rs.getNString("loc");
                //将查询的结果保存在dept对象中
                Dept dept = new Dept();
                dept.setId(id);
                dept.setDname(dname);
                dept.setLoc(loc);
                //将对象保存在list集合中
                list.add(dept);
            }
            JDBCUtils.close(connection,ps,rs);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return  list;
    }
    //根据id查询部门 说明每次返回一个对象
    public Dept findById(int deptno){
        //将查询出的结果保存在dept对象中
        Dept dept = new Dept();
        try{
            //获取数据库的连接
            Connection connection = JDBCUtils.getConnection();
            //编写查询语句
            String sql="select*from dept where id=?";
            //进行预编译
            PreparedStatement ps = connection.prepareStatement(sql);
            //传递参数
            ps.setInt(1,deptno);
            //执行查询
            ResultSet rs = ps.executeQuery();
            //遍历rs
            while(rs.next()){
                //没读取一条记录,就会创建一个dept对象
                int id=rs.getInt("id");
                String dname= rs.getString("dname");
                String loc= rs.getString("loc");
                dept.setId(id);
                dept.setDname(dname);
                dept.setLoc(loc);

            }
            JDBCUtils.close(connection,ps,rs);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return dept;
    }

    //编写修改的方法  修改
    public int update(int deptno,String deptname){
        int i=0;
        try{
         //获取数据库的连接
         Connection connection = JDBCUtils.getConnection();
         //编写查询语句
         String sql="update dept set dname=? where id=?";
         //进行预编译
         PreparedStatement ps = connection.prepareStatement(sql);
         //传递参数
         ps.setString(1,deptname);
         ps.setInt(2,deptno);
         i=ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return i;
    }

//删除
//插入


    //单元测试:  在测试方法时可以避免不用写主方法
    //要求:1.测试的方法不能有返回值 2.测试的方法不能有参数  3.需要在方法上加上list注解
    @Test
    public void testFindAll(){
        /*List<Dept> all=findAll();*/

        /*Dept dept = findById(10);
        System.out.println(dept);*/

        /*int i=update(30,"摆烂部");
        System.out.println(i);*/

        int i=delete(30,"摆烂部");
        System.out.println(i);

        /*int i=insert(40,"摆烂部");
        System.out.println(i);*/
    }
}


后面的删除和插入应该怎么去写啊?改了n遍还是或多或少的出现问题

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-25 10:14:27 | 显示全部楼层


插入和删除和前者没差别吧,只是改个 SQL 语句

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-25 10:40:28 | 显示全部楼层
Twilight6 发表于 2022-5-25 10:14
插入和删除和前者没差别吧,只是改个 SQL 语句

啊这,那姐姐可否给俺说一声这个怎么改的sql语句呀?我改的总感觉哪边有点问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-25 12:39:06 | 显示全部楼层
揽一池星河 发表于 2022-5-25 10:40
啊这,那姐姐可否给俺说一声这个怎么改的sql语句呀?我改的总感觉哪边有点问题


哈哈,俺是 Guy ,你 delete 传入的参数是什么? 30 表示 Id 吗? 如果是的话可以直接这样:

  1. delete from 库名 where id = ?
复制代码


第二个参数没啥用吧,名称不唯一,插入的话就要看你数据库是怎么设计的,因为有些字段不为空约束,如果你插入为空就会报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-25 16:10:07 | 显示全部楼层
Twilight6 发表于 2022-5-25 12:39
哈哈,俺是 Guy ,你 delete 传入的参数是什么? 30 表示 Id 吗? 如果是的话可以直接这样:
  1. package test02;

  2. import Utils.JDBCUtils;
  3. import org.junit.Test;

  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8. import java.util.ArrayList;
  9. import java.util.Date;
  10. import java.util.List;

  11. public class DeptOper {
  12.     //全查dept表中的字段 最终显示出来
  13.     public List<Dept>findAll(){
  14.         List<Dept> list= new ArrayList<>();
  15.         try{
  16.             //获取数据库的连接
  17.             Connection connection = JDBCUtils.getConnection();
  18.             //编写查询语句
  19.             String sql="select*from dept";
  20.             //预编译
  21.             PreparedStatement ps = connection.prepareStatement(sql);
  22.             //进行查询
  23.             ResultSet rs = ps.executeQuery();
  24.             //遍历rs
  25.             while(rs.next()){
  26.                 //每读取一条记录,就会创建一个dept对象
  27.                 int id=rs.getInt("id");
  28.                 String dname= rs.getNString("dname");
  29.                 String loc= rs.getNString("loc");
  30.                 //将查询的结果保存在dept对象中
  31.                 Dept dept = new Dept();
  32.                 dept.setId(id);
  33.                 dept.setDname(dname);
  34.                 dept.setLoc(loc);
  35.                 //将对象保存在list集合中
  36.                 list.add(dept);
  37.             }
  38.             JDBCUtils.close(connection,ps,rs);
  39.         } catch (SQLException throwables) {
  40.             throwables.printStackTrace();
  41.         }
  42.         return  list;
  43.     }
  44.     //根据id查询部门 说明每次返回一个对象
  45.     public Dept findById(int deptno){
  46.         //将查询出的结果保存在dept对象中
  47.         Dept dept = new Dept();
  48.         try{
  49.             //获取数据库的连接
  50.             Connection connection = JDBCUtils.getConnection();
  51.             //编写查询语句
  52.             String sql="select*from dept where id=?";
  53.             //进行预编译
  54.             PreparedStatement ps = connection.prepareStatement(sql);
  55.             //传递参数
  56.             ps.setInt(1,deptno);
  57.             //执行查询
  58.             ResultSet rs = ps.executeQuery();
  59.             //遍历rs
  60.             while(rs.next()){
  61.                 //没读取一条记录,就会创建一个dept对象
  62.                 int id=rs.getInt("id");
  63.                 String dname= rs.getString("dname");
  64.                 String loc= rs.getString("loc");
  65.                 dept.setId(id);
  66.                 dept.setDname(dname);
  67.                 dept.setLoc(loc);

  68.             }
  69.             JDBCUtils.close(connection,ps,rs);
  70.         } catch (SQLException throwables) {
  71.             throwables.printStackTrace();
  72.         }
  73.         return dept;
  74.     }

  75.     //编写修改的方法  修改
  76.     public int update(int deptno,String deptname){
  77.         int i=0;
  78.         try{
  79.          //获取数据库的连接
  80.          Connection connection = JDBCUtils.getConnection();
  81.          //编写查询语句
  82.          String sql="update dept set dname=? where id=?";
  83.          //进行预编译
  84.          PreparedStatement ps = connection.prepareStatement(sql);
  85.          //传递参数
  86.          ps.setString(1,deptname);
  87.          ps.setInt(2,deptno);
  88.          i=ps.executeUpdate();
  89.         } catch (SQLException throwables) {
  90.             throwables.printStackTrace();
  91.         }
  92.         return i;
  93.     }

  94.   


  95.    //删除
  96.    //插入



  97.     //单元测试:  在测试方法时可以避免不用写主方法
  98.     //要求:1.测试的方法不能有返回值 2.测试的方法不能有参数  3.需要在方法上加上list注解
  99.     @Test
  100.     public void testFindAll(){
  101.         /*List<Dept> all=findAll();*/
  102.         int i=delete(30,"摆烂部");
  103.         System.out.println(i);
  104.     }
  105. }
复制代码



其实就是这个图片,用idea实现改mysql插入和 删除  。然后刚刚geigei说的那个我也试过,但是感觉还是有点问题,仍然运行不出来。可否劳烦一下帮忙看一下怎么写嘛。是真的不知道改什么地方了qwq


snipaste_20220525_160704.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-28 15:01:46 | 显示全部楼层
  1. delete from dept where id=?
  2. 如果设置了id自增
  3. insert into dept(dname, loc) value(?, ?)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-31 13:45:59 | 显示全部楼层
//添加
insert into 表名 values(?,?...)//you主键自增就写默认值
ps.setInt()要变得值的次序和值设置进去
然后下面但就是看需不需要返回值
//删除
delete from 表名 where id=?//单用id直接删就行
ps.setInt(1,xxx)//将id为xxx的删除
改ps.exec..update(有返回值)//按着提示打,后面看需不需要返回值,
最后就是为防空针异常,最好把Connection connection =null;写在try块外面,把释放资源写到finally里面(就是try-catch-finally里),确保不论如何都一定执行,加个判断(
if(null != ps){
ps.close
}
)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-1 12:02:43 | 显示全部楼层
//获取数据库连接
        try (Connection conn = DBUtils.getConn()){
            Statement s = conn.createStatement();
            s.executeUpdate("insert into hero values(null,'"+name+"',"+money+")");
            System.out.println("执行完成!");
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
SQL语句你需要拼接一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 04:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表