JDBC编程(数据库增添、查询、删除方法的定义)

JDBC编程即JAVA数据库连接,数据库连接完成后,可在eclipse里面执行相关数据库的查询,删除,增添等操作
为了JDBC程序可以跨平台,我们首先要加载相应的驱动文件
以连接MySQL数据库为例
在这里插入图片描述
首先在eclipse中创建一个libs包,将驱动文件复制进去,点击OK
在这里插入图片描述
在这里插入图片描述

或者点击Configure Build Path,在ClassPath里面添加驱动文件
在这里插入图片描述
这样我们就可以看到驱动文件已经添加成功了
在这里插入图片描述
驱动文件导入成功以后即可以加载数据库驱动
一般使用Class类的forName()静态方法实现

//	com.mysql.cj.jdbc.Driver
    Class.forName("com.mysql.cj.jdbc.Driver");

为了防止驱动名记不住,我们可以先在外面跟着自动提示打一遍再复制进来
获取连接时,需要传入三个参数分别是

  1. 连接数据库的URL(jdbc:mysql://localhost:3306(默认端口)/movies_db(数据库名称))
  2. 登录数据库的账号USER
  3. 登录数据库的密码PASSWORD
    为了便于管理,进行封装
 //	com.mysql.cj.jdbc.Driver
	private static final String DRIVERNAME="com.mysql.cj.jdbc.Driver";
	private static final String URL="jdbc:mysql://localhost:3306/movies_db";
	private static final String USER="root";
	private static final String PASSWORD="123456";
	static{
			Class.forName(DRIVERNAME);
	}

第17行语句会报错
这里直接根据提示抛出异常
在这里插入图片描述

	static{
			try {
				Class.forName(DRIVERNAME);
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
	}

随后就是使用DriverManager类获取数据库连接
同样,在使用DriverManager类里面的方法时也会报错,抛出异常

	public static Connection getConnection() throws Exception{
		try {
			return DriverManager.getConnection(URL, USER, PASSWORD);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			throw new Exception();
		}
	}

然后就是释放数据库资源

public static void close(ResultSet rs,Statement stat,Connection conn) throws Exception{
		try{
			if (rs != null) {
				rs.close();
			}
			if (stat != null) {
				stat.cancel();
			}
			if (conn != null) {
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
			throw new Exception();
		}
	}

数据库是否连接成功可以在main方法里面进行测试

	public static void main(String[] args) {
		try {
			Connection conn = getConnection();
			System.out.println("连接成功");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

同样,这里也会报错,但是在抛出异常时不能 add throw,这样会改变main方法的固定写法,所以选择try{ }catch{ }
运行测试结果如下
在这里插入图片描述

下面就可以定义方法来进行数据库的查询,删除,增添等操作了
一般分为以下几个步骤

  1. 定义正确的SQL语句
    可以在数据库新建查询,在查询里面写语句,查询不报错以后将语句复制进去,用占位符替换值
  2. 获取数据库连接
  3. 获取PreparedStatement对象预处理SQL语句
  4. 执行SQL语句
  5. 关闭相关资源
    新创建一个工具类BASEDAO
    定义查询方法:定义一个返回值为二维数组的方法,然后进行遍历,就能把数据库的表的查询数据传进来
public static Object[][] select() throws Exception{
		String sql = "SELECT * FROM tb_book";
		Connection conn = DbConnection.getConnection();
		PreparedStatement stat = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
		ResultSet rs = stat.executeQuery();
		rs.last();
		int row = rs.getRow();
		int colCount = rs.getMetaData().getColumnCount();
		Object[][] data = new Object[row][colCount];
		rs.beforeFirst();
		while (rs.next()) {
			for (int i = 0; i < colCount; i++) {
				data[rs.getRow()-1][i] = rs.getObject(i+1); 
			}
		}
		DbConnection.close(null, stat, conn);
		return data;	
	}

由于后面在窗体中要滚动条来浏览记录,而结果集的一个特点是只能从上往下浏览,所以先浏览到最后一条数据

rs.last();

然后获取它的行数与列

int row = rs.getRow();
int colCount = rs.getMetaData().getColumnCount();

将行数与列传给二维数组

Object[][] data = new Object[row][colCount];

再返回第一条记录,从第一条开始给他进行遍历,最后再返回数据

while (rs.next()) {
			for (int i = 0; i < colCount; i++) {
				data[rs.getRow()-1][i] = rs.getObject(i+1); 
			}
		}

同样,也要在main方法里面测试一下查询方法是否正确

System.out.println(select());

在这里插入图片描述
定义增添方法:定义一个返回值类型为boolean的方法,添加成功返回true,不成功返回false

public static boolean add(Movies movies) throws Exception {
	String sql = "INSERT INTO tb_movies (id,name,duration,area,moviedate,price)"+"VALUES(null,?,?,?,?,?);";
//		获取连接
		Connection conn = DbConnection.getConnection();
//		从连接中获取Statement对象
		PreparedStatement stat = conn.prepareStatement(sql);
//		用Statement对象执行SQL语句
		stat.setObject(1, movies.getName());
		stat.setObject(2, movies.getDuration());
		stat.setObject(3, movies.getArea());
		stat.setObject(4, movies.getMoviedate());
		stat.setObject(5, movies.getPrice());
//		处理结果集
		int result = stat.executeUpdate();
//		关闭资源
		DbConnection.close(null, stat, conn);
		return result>0?true:false;
	}

写SQL语句直接复制过来有“+”时,要注意被“+“隔开的中间是否有空格,有括号时会默认是隔开的,但是有些语句没有注意空格就会默认语句连在一起,会报错

INSERT INTO tb_movies"+"VALUES(null,?,?,?,?,?);

这个就相当于
在这里插入图片描述
是无法添加成功的
同样也需要在main方法里面测试一下
我们首先还是要创建一个包含所有字段的实体类
例如我这里是创建的一个电影的数据库

public class Movies {
	private static String id;
	private static String name;
	private static String duration;
	private static String area;
	private static String moviedate;
	private static double price;
	public static String getId() {
		return id;
	}
	public static void setId(String id) {
		Movies.id = id;
	}
	public static String getName() {
		return name;
	}
	public static void setName(String name) {
		Movies.name = name;
	}
	public static String getDuration() {
		return duration;
	}
	public static void setDuration(String price2) {
		Movies.duration = price2;
	}
	public static String getArea() {
		return area;
	}
	public static void setArea(String area) {
		Movies.area = area;
	}
	public static String getMoviedate() {
		return moviedate;
	}
	public static void setMoviedate(String moviedate) {
		Movies.moviedate = moviedate;
	}
	public static double getPrice() {
		return price;
	}
	public static void setPrice(double price) {
		Movies.price = price;
	}
}

这里可以声明好变量以后
在这里插入图片描述
在这里插入图片描述
这样可以自动生成

然后在main方法里面设置每个字段的值

Movies movies = new Movies();
movies.setId("NUll");
movies.setName("复仇者联盟");
movies.setDuration("123");
movies.setArea("好莱坞");
movies.setMoviedate("2021-05-27");
movies.setPrice(38);
System.out.println(add(movies));

运行结果如下
在这里插入图片描述
再刷新一下数据库里面的表
在这里插入图片描述
这里已经添加好了

定义一个删除方法:定义一个返回值类型为boolean的方法,添加成功返回true,不成功返回false

public static boolean delete(Movies movies) throws Exception {
		String sql = "DELETE FROM tb_movies WHERE name=?";
//		获取连接
		Connection conn = DbConnection.getConnection();
//		从连接中获取Statement对象
		PreparedStatement stat = conn.prepareStatement(sql);
//		用Statement对象执行SQL语句
		stat.setObject(1, movies.getName());
//		处理结果集
		int result = stat.executeUpdate();
//		关闭资源
		DbConnection.close(null, stat, conn);
		return result>0?true:false;
		
	}

同样,测试一下方法是否定义正确

	Movies movies = new Movies();
	movies.setName("复仇者联盟");
	System.out.println(delete(movies));

运行结果如下
在这里插入图片描述
刷新数据库表
在这里插入图片描述
删除成功

总结:

  1. JDBC编程要先导入驱动文件,加载驱动,获取数据库连接,要注意给连接数据库的类DbConnection进行封装(便于管理,实现代码的复用)
  2. 报错可以抛出异常,但在main方法时不能throw,这样会改变main方法的固定写法
  3. 定义方法时要注意SQL语句的正确写法。**特别是中间是否空格,这里真的很容易踩雷。**查询语句要注意结果集只能从上往下浏览的特点,浏览到最后一条记录了再去获取它的行数列数
  4. 方法定义完成后要在main方法里面测试一下方法是否正确定义,方法不报错后去数据库刷新一下表的数据
  5. 还要注意添加时的字段顺序最好与数据库的表顺序相同,后面在窗体里面添加可以会发现添加不上去的情况,这也是跟字段顺序有关系的
  6. 要创建实体类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值