一,创建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);
}
}
}