求求大佬看看这个JDBC
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();
}
returnlist;
}
//根据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遍还是或多或少的出现问题
插入和删除和前者没差别吧,只是改个 SQL 语句
Twilight6 发表于 2022-5-25 10:14
插入和删除和前者没差别吧,只是改个 SQL 语句
啊这,那姐姐可否给俺说一声这个怎么改的sql语句呀?我改的总感觉哪边有点问题 揽一池星河 发表于 2022-5-25 10:40
啊这,那姐姐可否给俺说一声这个怎么改的sql语句呀?我改的总感觉哪边有点问题
哈哈,俺是 Guy ,你 delete 传入的参数是什么? 30 表示 Id 吗? 如果是的话可以直接这样:
delete from 库名 where id = ?
第二个参数没啥用吧,名称不唯一,插入的话就要看你数据库是怎么设计的,因为有些字段不为空约束,如果你插入为空就会报错 Twilight6 发表于 2022-5-25 12:39
哈哈,俺是 Guy ,你 delete 传入的参数是什么? 30 表示 Id 吗? 如果是的话可以直接这样:
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();
}
returnlist;
}
//根据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();*/
int i=delete(30,"摆烂部");
System.out.println(i);
}
}
其实就是这个图片,用idea实现改mysql插入和 删除。然后刚刚geigei说的那个我也试过,但是感觉还是有点问题,仍然运行不出来。可否劳烦一下帮忙看一下怎么写嘛。是真的不知道改什么地方了qwq
delete from dept where id=?
如果设置了id自增
insert into dept(dname, loc) value(?, ?) //添加
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
}
)
//获取数据库连接
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语句你需要拼接一下
页:
[1]