JDBC基础学习(一)—JDBC的增删改查

一、数据的持久化

    持久化(persistence): 把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,数据持久化意味着将内存中的数据保存到硬盘上加以固化,而持久化的实现过程大多通过各种关系数据库来完成。

     持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。

     image

二、JDBC简介

1.JDBC概述

     JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口。定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法,方便地访问数据库资源。

     JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。

     image

2.JDBC体系结构

JDBC接口(API)包括两个层次:
     面向应用的API: Java API,抽象接口,供应用程序开发人员使用(连接数据库,执行SQL语句,获得结果)。
     面向数据库的API: Java Driver API,供开发商开发数据库驱动程序用。

     image

三、JDBC的操作

1.JDBC的连接

     (1)注册驱动(只做一次)。

     (2)建立连接(Connection)。

     (3)创建执行SQL的语句(Statement)。

     (4)执行语句。

     (5)处理执行结果(ResultSet)。

     (6)释放资源。

	public static void test() throws SQLException{
		
		//1.注册驱动
		DriverManager.registerDriver(new com.mysql.jdbc.Driver());
		
		String url = "jdbc:mysql://localhost:3306/jdbc";
		String user = "root";
		String password = "123456";
		
		//2.建立连接
		Connection con = DriverManager.getConnection(url,user,password);
		
		//3.创建语句
		Statement st = con.createStatement();
		
		//4.执行语句
		ResultSet rs = st.executeQuery("select * from user");
		 
		//5.处理结果
		while(rs.next()){
			System.out.println(rs.getObject(1) + "	" + rs.getObject(2) + "	" + rs.getObject(3) + "	" + rs.getObject(4));
		}
		
		//6.释放资源
		rs.close();
		st.close();
		con.close();
	}

结果:

      1    张三    2016-04-18    100.0
      2    李四    2016-04-17    200.0
      3    王朝    2016-04-16    150.0
      4    马汉    2016-04-14    300.0
      5    张龙    2016-04-01    400.0
      6    赵虎    2016-04-12    250.0

(1)注册驱动

Class.forName("com.mysql.jdbc.Driver");
   推荐这种方式,不会对具体的驱动类产生依赖。
DriverManager.registerDriver(com.mysql.jdbc.Driver);
    会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。
System.setProperty("jdbc.drivers", "driver1:driver2");
   虽然不会对具体的驱动类产生依赖;但注册不太方便,所以很少使用。

(2)建立连接

Connection con = DriverManager.getConnection(url, user, password);

url格式: jdbc:子协议:子名称//主机名:端口/数据库名?属性名=属性值&… User,password可以用“属性名=属性值”方式告诉数据库;其他参数如: useUnicode=true&characterEncoding=GBK。

对于Oracle 数据库连接: jdbc:oracle:thin:@localhost:1521:sid
对于SQLServer 数据库连接:
jdbc:microsoft:sqlserver//localhost:1433; DatabaseName=sid
对于MySQL 数据库连接:   jdbc:mysql://localhost:3306/sid

(3)创建语句

     通过调用 Connection 对象的 createStatement 方法创建该对象。

     该对象用于执行静态的 SQL 语句,并且返回执行结果。

(4)执行语句

     通过调用 Statement 对象的 excuteQuery() 方法创建该对象。

     ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现

     ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行。

(5)释放资源

     释放ResultSet, Statement,Connection。

     数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

(6)优化代码

JdbcUtils.java

public final class JdbcUtils{
	
	private static String url = "jdbc:mysql://localhost:3306/jdbc";
	private static String user = "root";
	private static String password = "123456";
	
	private JdbcUtils(){
		
	}
	
	static{
		try{
			//注册驱动
			Class.forName("com.mysql.jdbc.Driver");
		}catch(ClassNotFoundException e){
			throw new ExceptionInInitializerError(e);
		}
	}
	
	/*
	 * 获取连接
	 * @return
	 * @throws SQLException
	 */
	public static Connection getConnection() throws SQLException{
		return DriverManager.getConnection(url,user,password);
	}
	
	/*
	 * 释放资源
	 * @param con
	 * @param st
	 * @param rs
	 */
	public static void releaseResource(Connection con,Statement st,ResultSet rs){
		try{
			if(rs != null){
				rs.close();
			}
		}catch(SQLException e){
			e.printStackTrace();
		}finally{
			try{
				if(st != null){
					try{
						st.close();
					}catch(SQLException e){
						e.printStackTrace();
					}
				}
			}finally{
				if(con != null){
					try{
						con.close();
					}catch(SQLException e){
						e.printStackTrace();
					}
				}
			}
		}
	}
}

Base.java

public class Base{

	public static void main(String[] args) throws Exception{	
		init();
	}
	
	public static void init() throws Exception{
		
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		
		try{			
			//建立连接
			con = JdbcUtils.getConnection();
			
			//创建语句
			st = con.createStatement();
			
			//执行语句
			rs = st.executeQuery("select * from user");
			
			//处理结果
			while(rs.next()){
				System.out.println(rs.getObject(1) + "	" + rs.getObject(2) + "	" + rs.getObject(3) + "	" + rs.getObject(4));
			}
		}
		finally{
			JdbcUtils.releaseResource(con,st,rs);
		}
	}
}

2.JDBC的增删改查

/**
 * JDBC的增删改查
 * @date 2016-4-18
 */
public class CRUD{

	public static void main(String[] args) throws Exception{
		delete();
		read();
	}
	
	/*
	 * 插入数据
	 */
	public static void create() throws Exception{
		
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		
		try{		
			//建立连接
			con = JdbcUtils.getConnection();
			
			//创建语句
			st = con.createStatement();
					
			//执行语句
			String sql = "insert into user(name,birthday,money) values('Tom','1992-12-12','400')";
			int i = st.executeUpdate(sql);
			
			//处理结果
			System.out.println("有" + i + "行受到影响");
			
		}
		finally{
			JdbcUtils.releaseResource(con,st,rs);
		}
	}
	
	/*
	 * 查询数据
	 */
	public static void read() throws Exception{
		
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		
		try{		
			//建立连接
			con = JdbcUtils.getConnection();
			
			//创建语句
			st = con.createStatement();
			
			//执行语句
			rs = st.executeQuery("select id,name,birthday,money from user");
			
			//处理结果
			while(rs.next()){
				System.out.println(rs.getObject("id") + "	" 
						+ rs.getObject("name") + "	"
						+ rs.getObject("birthday") + "	" 
						+ rs.getObject("money"));
			}
		}
		finally{
			JdbcUtils.releaseResource(con,st,rs);
		}
	}
	

	/*
	 * 更新数据
	 */
	public static void update() throws Exception{
		
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		
		try{		
			//建立连接
			con = JdbcUtils.getConnection();
			
			//创建语句
			st = con.createStatement();
						
			//执行语句
			String sql = "update user set money = money + 10";
			int i = st.executeUpdate(sql);
			
			//处理结果
			System.out.println("有" + i + "行受到影响");
			
		}
		finally{
			JdbcUtils.releaseResource(con,st,rs);
		}
	}
	
	/*
	 * 删除数据
	 */
	public static void delete() throws Exception{
		
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		
		try{			
			//建立连接
			con = JdbcUtils.getConnection();
			
			//创建语句
			st = con.createStatement();		
			
			//执行语句
			String sql = "delete from user where id > 5";
			int i = st.executeUpdate(sql);
			
			//处理结果
			System.out.println("有" + i + "行受到影响");
			
		}
		finally{
			JdbcUtils.releaseResource(con,st,rs);
		}
	}
}
原文地址:https://www.cnblogs.com/yangang2013/p/5404134.html