zoukankan      html  css  js  c++  java
  • 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);
    		}
    	}
    }
  • 相关阅读:
    noip模拟赛 寻宝之后
    noip模拟赛 剪纸
    noip模拟赛 天天和不可描述
    noip模拟赛 罪犯分组
    noip模拟赛 天天寄快递
    Uva10562
    Uva10305 Ordering Tasks
    Uva 816 Abbott's Revenge
    Uva1103 Ancient Messages
    Uva297 Quadtrees
  • 原文地址:https://www.cnblogs.com/yangang2013/p/5404134.html
Copyright © 2011-2022 走看看