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程序对数据库的操作,降低开发成本