Java复习笔记15【JDBC基础】

package com.lesson12.jdbc;

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

/*
 * 了解JDBC基础
 * */
/*
 * 基本概念
 * 1.JDBC(Java Data Base Connectivity,java数据库连接)是java应用程序
 * 	以面向对象的方法连接数据库的技术。JDBC为java提供了一个SQL级的调用接口(即JAVA
 * 	可以通过JDBC写SQL语句控制数据库)
 * 2.调用的过程:JAVA应用程序调用JDBC-->JDBC装载数据库驱动-->访问数据库中的数据
 * */
/*
 * JDBC编程的具体步骤:
 * 1.准备工作:将驱动程序放入工程内
 *  【目标】将数据库厂商提供的驱动程序放入所建的工程内(使其具备使用JDBC技术的权力)
 *  【操作】
 *  (1)创建一个Java Project工程,在该工程下创建一个文件夹libs(libraries),
 *  	将驱动包(jar包)复制粘贴到libs文件夹下
 *  (2)构建并编译java文件->class文件:
 *  	右键点击jar包-->选择[Build Path]-->选择[Add To Build Path]
 *  【注意】构建编译后工程Project下会自动生成referenced libraries文件夹,
 *  	里面有编译好的可以使用的class文件	
 *  --------------------------------------------------------
 * 2.加载JDBC驱动程序:使驱动程序进入Java程序内
 *  【目标】加载驱动程序,使驱动程序进入JAVA程序内
 *  【代码】Class.forName("com.mysql.jdbc.Driver");
 *  【操作】
 *  (1)在驱动包(后缀名为jar的压缩文件)中找到驱动类
 *   	com.mysql.jdbc.Driver
 *  (2)使用驱动类Class.forName加载驱动包
 *  --------------------------------------------------------
 * 3.获取连接:路径、用户名和密码
 *  【代码】
 *  Connection conn = DriverManager.getConnection("jdbc:mysql:
 *  	//localhost:3308/DB_Name", "UserName", "Password");
 *  【操作】
 *  (1)声明连接数据库的路径[用JDBC连接:连接mysql://主机:端口/数据库名称]
 *  	String url = "jdbc:mysql://localhost:3308/DB_Name"
 *  (2)确定用户名和密码
 *  	String user = "userName";
 *  	String psw = "password";
 *  (3)使用Connection的实例接收驱动管理器(DriverManager)获取的数据库连接:
 *  	Connection conn=DriverManager.getConnection(url,user,psw); 
 *  [分解:获取连接的方法getConnection()->驱动对象DriverManager.getConnection()
 *  ->需要保存该连接(定义声明)conn=DriverManager.get…->使用Connection类完成实例化
 *  Connection conn=DriverManager.get…->引包import java.sql.DriverManager
 *  和import java.sql.Connection;]
 *  ---------------------------------------------------------
 * 4.创建语句和语句对象:语句对象是语句(sql语句)的载体
 *  【代码】
 *  (1)String sql="select/update/delete…"等sql语句;
 *  (2)Statement stmt = conn.createStatement();
 *  【操作】
 *  (1)创建sql语句
 *  (2)创建语句对象Statement:
 *  	Statement stmt = conn.createStatement();
 *  [分解:sql语句的传送需要语句载体,创建语句对象createStatement()->
 *  语句的载体依赖于管道(连接对象connection)conn.createStatement()->
 *  语句对象需要保存(声明并实例化)Statement stmt=conn.createStatement()]
 *  【注意】
 *  (1)sql语句在java中属于String类型,使用双引号,因此在数据库中字符串使用单引号,
 *  	防止出错,如String sql = "insert into employee (name,sex,
 *  	age,address) values ('new名称', '男', 20, 'java')";
 *  (2)结合实际:sql语句通过管道(连接)进入数据库中,需要通过载体(语句对象)的运送,
 *  	就好像一个人或一群人搭乘公交车通过隧道从一个地方到另一个地方   
 *  ------------------------------------------------------------
 * 5.发送语句,并得到结果
 *  【代码】int rows = stmt.executeUpdate(sql)
 *  【操作】
 *  (1)语句对象为载体,执行方法(发送语句):stmt.executeUpdate(sql)
 *  (2)保存结果,例:int rows=stmt.executeUpdate(sql)返回被影响的数据行数
 *  【注意】发送语句使用语句对象作为载体,有多种方法和返回结果,具体应用需要查询API
 *  ------------------------------------------------------------
 * 6.释放资源:释放连接和语句对象
 * 【代码】必须释放
 * (1)stmt.close();
 * (2)conn.close();
 * 【注意】
 *  除了连接和语句对象,还有比如结果集ResultSet也需要释放。关闭的顺序为:ResultSet
 *  ->Statement->Connection
 * */
public class JDBCTools { //所有的操作必须写在异常处理里面,异常处理不能少
	//数据库连接路径:[用JDBC连接:连接mysql://主机:端口/数据库名称]
	private String url = "jdbc:mysql://localhost:3308/test";
	private String user = "root"; //登录数据库的用户名
	private String password = "mysql"; //密码
	private Connection conn = null; //连接对象
	private Statement stmt = null; //语句对象
	private PreparedStatement  pstmt = null; //预处理对象
	private ResultSet res = null; //结果集,存储结果
	
	/*
	 * 静态代码块,加载驱动
	 */
	static{
		try{
			//使用驱动类加载驱动包
			Class.forName("com.mysql.jdbc.Driver");
			//【注意】class是关键字,这里的Class是一个类,Class要大写
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	/*
	 * 该方法用于获取连接
	 * @return conn
	 * */
	public Connection getConnection(){
		try{
			//获取连接
			conn = DriverManager.getConnection(url, user, password);
			//System.out.println("连接对象" + conn);
			return conn; //如果成功获取连接,则返回该连接对象
		}catch(Exception e){
			e.printStackTrace();
		}
		return null;//如果未成功获取连接,返回null
	}
	
	/*
	 * 该方法用于对数据库进行更新操作:增、删、改
	 * @param String sql 
	 * @return int 影响数据行数
	 * */
	public int update(String sql){
		try{
			if(conn == null || conn.isClosed()){
				conn = getConnection();
			}
			//创建语句对象(语句对象依赖于连接)
			stmt = conn.createStatement(); 
			int rows = stmt.executeUpdate(sql);
			//System.out.println("影响了" + rows + "行");
			return rows;
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			close(); //无论有无异常,都需要释放资源
		}
		return 0;
	}
	
	/*
	 * 该方法用于根据sql语句对数据库进行查询操作
	 * @param String sql
	 * @return ResultSet 查询结果集(需要调用者关闭连接)
	 * */
	public ResultSet query(String sql){
		try{
			if(conn == null || conn.isClosed()){
				conn = getConnection();
			}
			stmt = conn.createStatement(); 
			res = stmt.executeQuery(sql);
			return res;
		}catch(Exception e){
			e.printStackTrace();
		}/*finally{
			//注意:此处不能关闭,一旦关闭,则在调用的方法中无法得到结果集
			close(); 	
		}*/
		return null;
	}
	
	/*
	 * 该方法用于关闭资源
	 * */
	public void close(){
		try{
			if(res != null){ //关闭结果集
				res.close();
			}
			if (stmt != null) { //关闭语句对象
				stmt.close();
			}
			if (pstmt != null) { //关闭PreparedStatem预编译的sql语句对象
					pstmt.close();                           }
			if(conn != null){ //关闭连接
				conn.close();
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值