09-08JDBC操作数据库

JDBC操作数据库

持久化和JDBC概述
持久化
定义:持久化是将程序数据在持久状态和瞬时状态转换的机制。
持久化:读取、保存、删除、修改、查找。
JDBC

JDBC技术
路 :Connection连接
人 :Statement执行命令
车:ResultSet结果集

定义:JDBC是用于执行SQL语句时,对多种数据库进行统一访问的Java API。

*由一组java类和接口组成
*用来执行SQL语句
*对多种数据库进行统一访问

JDBC API
提供者:Sun公司
内容:供程序员调用的接口与类,集成在java.sql和javax.sql中,如:
*DriveManager类
*Coonection接口
*Statement接口
*ResultSet接口

JDBC API功能
主要功能:加载驱动、与数据库建立连接、执行SQL语句、处理结果。
1、DriverManager(加载驱动)
2、Connection(路:连接)
3、Statement(人:传送执行SQL语句)
4、ResultSet(车:处理结果)
JDBC API常用接口
在这里插入图片描述

使用JDBC实现增、删、改功能

JDBC访问数据库的步骤
在这里插入图片描述
1、加载JDBC驱动
2、与数据库建立连接
3、执行SQL语句并返回结果
4、处理返回结果
5、释放资源

package util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * @author ShanHai:操作数据库的工具类
 * @version 创建时间:2021年9月8日 上午10:53:37
 */
public class JDBCUtil {
	private static final String DB_USER_NAME = "root";// 数据库的用户名
	private static final String DB_PASSWORD = "root";// 数据库密码
	private static final String DB_NAME = "hello_world";// 数据库名称
	private static final String IP = "127.0.0.1";// 安装MySQL的服务器的IP地址
	private static final String URL = "jdbc:mysql://" + IP + ":3306/" + DB_NAME;

	private static Connection conn;// 创建连接对象(路)
	private static Statement stmt;// 执行命令的对象(执行sql语句) (人)
	private static ResultSet rs;// 保存select之后查询结果的数据的对象(车)

	/**
	 * 获得数据库连接对象Connection
	 * 
	 * @return
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	private static Connection getCon() throws ClassNotFoundException, SQLException {
		// 加载MySQL驱动
		Class.forName("com.mysql.jdbc.Driver");
		if (conn == null) {
			conn = DriverManager.getConnection(URL, DB_USER_NAME, DB_PASSWORD);
		}
		return conn;
	}

	/**
	 * 获得Statement对象,用于执行SQL语句
	 * 
	 * @return
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	private static Statement openStmt() throws ClassNotFoundException, SQLException {
		stmt = getCon().createStatement();
		return stmt;
	}

	/**
	 * 执行数据库增(insert)、删(delete)、改(update)的操作
	 * 
	 * @param sql
	 * @return
	 */
	public static int executeSQL(String sql) {
		int i = 0;
		try {
			i = openStmt().executeUpdate(sql);//执行sql语句
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 关闭数据库相关对象
			close();
		}
		return i;
	}

	/**
	 * 执行数据库查询(select)的操作
	 * @param sql
	 * @return
	 */
	public static ResultSet search(String sql){
		try {
			rs = openStmt().executeQuery(sql);
		} catch (ClassNotFoundException | SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return rs;
	}
	
	/**
	 * 关闭数据库方法
	 */
	public static void close() {
		try {
			if (rs != null) {
				rs.close();// 关闭resultSet(车)
			}
			if (stmt != null) {
				stmt.close();// 关闭Statement对象(人)
			}
			if (conn != null) {
				conn.close();// 关闭Connection对象(路)
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

注意关流顺序
1、ResultSet
2、Statement
3、Connection

使用JDBC实现查询功能
SQL语句:SELECT * FROM admin

package test;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import org.junit.Test;

import util.JDBCUtil;

/**
*@author ShanHai:
*@version 创建时间:2021年9月8日 下午2:02:50
*/
public class SQLDemo {
	
	@Test
	public void testInsert(){//测试向数据库中添加数据
		String sql ="insert into goods values(default,'香肠',3.5,'2021-09-01',100)";
		int i = JDBCUtil.executeSQL(sql);
		System.out.println(i);
	}
	
	@Test
	public void testUpdate(){//测试修改数据库中的数据
		String sql = "update goods set g_price =2.5 where g_name = '可口可乐'";
		int i = JDBCUtil.executeSQL(sql);
		System.out.println(i);
	}
	
	@Test
	public void testDelete(){//测试删除数据库中的数据
		String sql ="delete from goods where g_name ='可口可乐'";
		int i = JDBCUtil.executeSQL(sql);
		System.out.println(i);
	}
	
	@Test
	public void testSelect() throws Exception{//测试查询
		String sql ="select * from goods";
		ResultSet rs =JDBCUtil.search(sql);
		while(rs.next()){
			int id =rs.getInt("id");//表中字段为id的值,类型是int型
			String name = rs.getString("g_name");//表中字段为g_name的值,类型为varchar
			double price = rs.getDouble("g_price");//获得表中字段为g_price的值,类型是double
			Date date =rs.getDate("g_date");//获得表中字段为g_date的值,类型为date
			int cnt = rs.getInt("cnt");//获得表中字段为cnt的值,类型为int
			System.out.println("id:"+id+"名字:"+name+"价格:"+price+"生产日期:"+date+"库存:"+cnt);
		}
		JDBCUtil.close();
	}
}

JDBC编程模板
*加载JDBC驱动
*与数据库建立连接
*执行SQL语句并返回结果(查询调用executeQuery()方法)
*处理返回结果(读取结果集中的数据)
*释放资源

JDBC的作用
1、扩展了Java操作数据库的功能
2、释耦Java程序与数据库的依赖,实现了跨数据库编程
3、统一Java程序对数据库的操作,降低开发成本

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShanHai山海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值