Oracle+JDBC_Day01

一,创建MAVEN项目,导入Oracle的jdbc驱动(本次为手动导入 ojdbc6.jar)

二、由浅入深,引出最终可用版本

1,Demo01

package cn.tedu.jdbc.day01;

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

//20181026
public class Demo01 {

	public static void main(String[] args) throws Exception{
	//1,导入JDBC驱动jar
	//2,注册JDBC驱动	
		Class.forName("oracle.jdbc.OracleDriver");
		//System.out.println("ok!");
		String url="jdbc:oracle:thin:@localhost:1521:orcl";
		String name="scott";
		String password="abc123";
		//getConnection()方法查找并尝试连接到数据库,如果不成功将出现异常
	//3,获得Connection对象
		Connection conn=DriverManager
				.getConnection(url, name, password);
		
		//输出conn引用对象的实际类型
		//证明:驱动程序提供了Connection接口的实现类
		System.out.println(conn.getClass()); //运行结果:class oracle.jdbc.driver.T4CConnection
  //Statement 接口 :有三个语句:execute(sql) 执行DDL返回boolean值,executeQuery(sql) 执行DQL返回结果集,executeUpdate(sql) 执行DML返回int值
		
	//4,创建Statement“语句”对象
		Statement st=conn.createStatement();
		//执行SQL
		String ddl="create table robin_demo"
				+ "(id number(7),"
				+ "name varchar2(100))";
		boolean b=st.execute(ddl);
		//返回结果:true 表示有结果集
		//         false 表示没有结果集,创建失败抛出异常
	//5,处理SQL执行结果
		System.out.println(b); //运行结果:false
		//String ddl_drop="drop table robin_demo";  //执行删除表语句
		//ResultSet drop=st.executeQuery(ddl_drop);
		
		//System.out.println(drop);
		
	//6,关闭连接,及其重要
		st.close();
		
		
		
		
	}
	/*JDBC是什么?
	 *   -JDBC是Java应用程序和数据库之间的通信桥梁,是Java应用程序访问数据库的
	 *   通道
	 *  1,JDBC标准主要有一组接口组成,其好处是统一了各种数据库访问方式
	 *  2,JDBC接口的实现类称为数据库驱动,有各个数据库厂商提供,使用JDBC
	 *  必须倒入这个驱动
	 * JDBC使用步骤
	 * 1,倒入JDBC驱动jar
	 * 		-使用maven可以快速便捷导入数据库驱动
	 * 2,注册JDBC驱动
	 * 		-参数:”驱动程序类名“
	 * 		-Class.forName("驱动程序类名")
	 * 3,获得Connection对象
	 * 		-需要3个参数:url,username,password
	 * 		-连接到数据库
	 * 4,创建Statement(语句) 对象
	 * 		-conn.createStatement()方法 创建对象
	 * 		-用于执行 SQL 语句
	 * 		-execute(ddl) 执行任何SQL,常用执行DDL,DCL
	 * 		-executeUpdate(dml) 执行DML语句,如:insert update delete
	 * 		-executeQuery(dql) 执行DQL语句,如:select
	 * 5,处理SQL执行结果:
	 * 		-execute(ddl) 如果没有异常则成功
	 * 		-executeUpdate(dml) 返回数字,表示更新”行“数量,抛出异常则失败
	 * 		-executeQuery(dql) 返回ResultSet(结果集)对象,代表二维查询结果
	 * 		-使用for遍历处理,如果查询失败,抛出异常!
	 * 6,关闭数据连接!!!!关闭数据连接极其重要
	 * 		-conn.close();
	 */
}

2,Demo02

package cn.tedu.jdbc.day01;

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

/*
 * 执行DML语句
 */
public class Demo02 {

	public static void main(String[] args) throws Exception {
	//1,导入JDBCjar
	//2,注册驱动
		Class.forName("oracle.jdbc.OracleDriver");
	//3,连接到数据库
		String url="jdbc:oracle:thin:@localhost:1521:orcl";
		String username="scott";
		String password="abc123";
		Connection conn = DriverManager.getConnection(url,username,password);
	//4,创建Statement
		Statement st=conn.createStatement();
	//执行DML
		String dml="insert into robin_demo"
				+ "(id,name)"
				+ "values(1,'Tom')";
		int n=st.executeUpdate(dml);
		
		String dml_upda="update robin_demo set id=10 "
				+ "where id=1";
		//int m=st.executeUpdate(dml_upda);
		//特别主意,如果有换行,一定要在断行处加一个空格,如下命令,否则会报错:SQL命令未正常结束
		String dml_del="delete from robin_demo "
				+ "where id=10";
		int d=st.executeUpdate(dml_del);
		
		System.out.println(n+"@"+d); //执行结果:1
	
	//6,关闭连接
		st.close();
	}

}

3,Demo03

package cn.tedu.jdbc.day01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;

public class Demo03 {
	public static void main(String[] arg) throws Exception{
		//注册驱动
		Class.forName("oracle.jdbc.OracleDriver");
		//连接数据库
		String url="jdbc:oracle:thin:@localhost:1521:orcl";
		String username="scott";
		String password="abc123";
		Connection conn=DriverManager.getConnection(url,username,password);
		//创建Statement
		Statement st=conn.createStatement();
		//执行SQL
		String dql="select * from emp";
		//处理结果
		//rs.next():移动游标到下一行
		//检查是否有数据,如果有返回true,否则false
		ResultSet rs=st.executeQuery(dql);
		while(rs.next()){
			int id=rs.getInt(1);
			String name=rs.getString(2);
			String job=rs.getString("job");
			int mgr=rs.getInt("mgr");
			Date date=rs.getDate("hiredate");
			
			System.out.println(id+","+name+","+job+","+mgr+","+date);
		}
		//关闭连接
		rs.close();
		st.close();
		conn.close();
	}
	/*
	 *  ## 处理结果集ResultSet
	 *   ResultSet代表DQL查询结果,是2维结果,其内容维护了一个读取数据的游标
	 *   默认情况在,游标在第一行数据之前,当调用next()方法的时候
	 *   游标会向下移动,并将返回结果集中是否包含数据,如果包含
	 *   数据就返回true,结果集还提供了很好的getXXX方法用于获取结果集
	 *   游标指向当前行数据
	 *   
	 *  ## 管理数据库连接
	 *   在软件中数据库连接使用非常频繁,如果每次都创建连接,就会造成
	 *   代码的大量冗余,常规的做法是建立数据库连接工具类,封装数据库连接过程
	 *   统一数据库连接过程,使用时候就可以简化代码
	 *   
	 *  实现步骤:
	 *  1,创建数据库连接参数文件 db.properties
	 *  2,创建DbUtils.java封装数据库连接方法
	 *  	-利用Properties读取配置文件夹中的数据库连接参数
	 *  	-创建 getConnection封装数据库临街过程
	 *  3,使用 getConnection方法
	 *  
	 *  ### 创建配置文件 db.properties
	 *  	-见db.properties
	 *  ### 创建Dbutils.java
	 *  	-见DbUtils.java 类
	 *  
	 *  说明:
	 *  1,driver url username password 是4个数据库连接参数,因为
	 *  只需要一份,则定义为静态变量
	 *  2,静态代码块的目的是从配置文件中读取4个数据库连接参数的值
	 *  3,getConnection方法封装了数据库连接过程
	 *  4,close方法封装了数据库连接关闭的过程
	 *  
	 *  ### DbUtils 的使用
	 *  	-详见Demo6
	 *  > 显然:使用DbUtils可以简化JDBC代码的书写
	 *	> 这个代码中在finally中关闭数据库连接,其好处是可靠关闭连接
	 *  
	 *  ## 作业:
	 *  1,创建Maven项目,倒入Oracle数据库驱动
	 *  2,独立编写数据库连接管理工具类 DbUtils
	 *  3,利用DbUtils实现员工表的 插入操作
	 *  4,利用DbUtils实现员工表的 修改操作
	 *  5,利用DbUtils实现员工表的 删除操作
	 *  6,利用DbUtils实现员工表的 查询操作
	 */
	
}

4,DbUtils 连接工具

package cn.tedu.jdbc.day01;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;

public class DbUtils {
	static String driver; //写成静态的只要取一次,静态变量只加载一次
	static String url;
	static String username;
	static String password;
	
	//读取文件中的数据库连接参数
	static{
		//初始化静态属性
		//1,利用properties读取配置文件
		//2,从配置文件中查找相应参数值
		try{
		Properties cfg= new Properties();
		InputStream in=DbUtils.class.getClassLoader()
				.getResourceAsStream("db.properties");
		cfg.load(in);
		System.out.println(cfg);
		//初始化连接参数
		driver=cfg.getProperty("jdbc.driver");
		url=cfg.getProperty("jdbc.url");
		username=cfg.getProperty("jdbc.username");
		password=cfg.getProperty("jdbc.password");
		}catch(Exception e){
			e.printStackTrace();
			throw new RuntimeException();
		}
	}
		
	//读取文件中的数据库连接参数,消除软件中的硬编码
	
	/**
	 * 封装创建数据库连接的过程
	 * 简化数据库连接
	 */
	public static Connection getConnection() {
		try{
		
		Class.forName(driver);
		Connection conn=
				DriverManager.getConnection(url, username, password);
		return conn;
		}catch(Exception e){
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
	
	//DbUtils.java
	/*
	 * 关闭数据库的连接方法,封装复杂的关闭过程
	 */
	public static void close(Connection conn){
		if(conn!=null){
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}	
}

5,Demo04

package cn.tedu.jdbc.day01;

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

/**
 * 调用 DbUtils封装类中封装好的Connection对象
 * @author Administrator
 *
 */
public class Demo4 {
	public static void main(String[] arg) throws Exception{
		//调用连接管理方法创建连接
		Connection conn=DbUtils.getConnection();
		Statement st=conn.createStatement();
		String dql="select * from robin_demo";
		ResultSet rs=st.executeQuery(dql);
		while(rs.next()){
			int id=rs.getInt(1);
			String name=rs.getString(2);
			System.out.println(id+","+name);
		}
		conn.close();
	}
}

6,Demo05

package cn.tedu.jdbc.day01;

import java.io.InputStream;
import java.util.Properties;

/**
 *  properties文件的读取
 * @author Administrator
 *
 */
public class Demo05 {
	public static void main(String[] arg) throws Exception{
		//Properties 就是为了读取 *.properties文件而设计的
		//API,其底层就是文本文件IO, Properties本身,实现
		//Map接口,内部是散列表,限定了key和Value都是String类型
		
		//方法:load(流) 将文件就读取为散列表
		//String getProperty(key) 查询value
		//1,创建Properties对象
		Properties cfg = new Properties();
		System.out.println(cfg);
		System.out.println(cfg.size());
		System.out.println(cfg.isEmpty());
		//2,利用load方法读取文件
		InputStream in=Demo05.class.getClassLoader()//读取配置文件,就这样用!!!!!!!!!!!!!!
				.getResourceAsStream("db.properties");//读取配置文件,很重要
		cfg.load(in);
		System.out.println(cfg);
		System.out.println(cfg.size());
		String s=cfg.getProperty("jdbc.url");
		System.out.println(s);
	}
	
	/*
	 * ## 使用Properties 读取配置文件
	 * Properties 是Java中专门用于读取配置文件的API
	 * 1,其底层就是文本文件IO
	 * 2,Prpoerties 本身 实现Map接口,内部是散列表
	 * 3,Properties 限定了key和values都是String类型
	 * 
	 * Properties常用API方法
	 * - load(流) 读取一个配置文件
	 * - String getProperty(key) 读取一个属性值
	 * 
	 * 使用步骤
	 * 1,创建Properties对象
	 * 2,利用load方法读取配置文件
	 * 3,利用getProperty查询属性文件的内容
	 * 案例,读取配置文件
	 * -在resource文件夹中添加配置文件db.properties
	 * 	#db.properties
	 * 	jdbc.driver=oracle.jdbc.OracleDriver
	 * 	jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
	 * 	jdbc.username=scott
	 * 	jdbc.password=abc123
	 * 
	 * 使用Properties读取配置文件内容
	 *  详细步骤在本类开始部分,从开头位置开始
	 *  
	 * > 利用配置文件可以将程序中的参数保存到配置文件中,修改程序参数
	 * 只需要修改配置文件即可
	 * 
	 */		
}

7,Demo06

package cn.tedu.jdbc.day01;

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

public class Demo06 {
	public static void main(String[] args){
		Connection conn=null;
		try {
			conn=DbUtils.getConnection();
			Statement st=conn.createStatement();
			String sql="select * from robin_demo";
			ResultSet rs=st.executeQuery(sql);
			while(rs.next()){
				int id=rs.getInt("id");
				String name=rs.getString("name");
				System.out.println(id+","+name);
			}
			rs.close();//释放查询结果
			st.close();//释放语句对象(当有多个Statement连接对象时)
			
			
		} catch (Exception e) {
			// TODO: handle exception
		}finally{
			DbUtils.close(conn);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值