JDBC

JDBC是什么?
1、Java DataBase Connectivity(java语言连接数据库)

2、JDBC的本质是什么?
JDBC是SUN公司制定的一套接口(interface)
java.sql.*;(这个软件包下有很多接口)

接口都有调用者和实现者
面向接口调用,面向接口实现类,这都属于面向接口编程

为什么要面向接口编程?
解耦合:降低程序的耦合度,提高程序的扩展力
多态机制就是非常典型的:面向抽象编程。(不要面向具体编程)
	建议:
	Animal a = new Cat();
	Animal a = new Dog();
	//喂养的方法
	public void feed(Animal a){
		//面向父类型编程
	}
	不建议
		Dog d = new Dog();
		Cat  c = new Cat();

思考:为什么SUN制作一套JDBC接口呢?
	因为每个数据库的底层实现原理都不一样。
	Oracle数据库由自己的原理
	MySQL数据库也有自己的原理
	..
	每一个数据库产品都有自己独特的实现原理

在这里插入图片描述
(以上图片摘自网络,仅供自己学习笔记学习使用)
我们面向JDBC编程,JDBC在分别去连接各个数据库。所有的数据库驱动都以jar包的形式存在,jar包当中有很多.class文件,这些class文件就是对JDBC的实现
驱动不是SUN公司提供的,是各大数据库厂家负责提供的,下载驱动jar包需要去数据库官网下载。

3.JDBC开发前的准备工作,先从官网下载对应的jar包,然后将其配置到classpath里去
classpath=.;路径
以上的配置是针对于文本编辑器的方式开发,使用IDEA工具的时候,不需要配置以上的环境变 量。
IDEA有自己的配置方式,

4.JDBC编程六步(重要)
第一步:注册驱动(告诉Java程序,即将要连接的是哪个品牌的数据库)

第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,属于进程间的通信,用完关通道)

第三步:获取数据库操作对象(专门执行的sql语句的对象)

第四步:执行SQL语句(DQL DML)
第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有的第五步处理查询结果)
第六步:释放资源(使用完资源之后一定要关闭资源,java程序进程和sql进程之间进程通信,必须要释放资源)

url
/*
* url:统一资源定位符
* url包括几部分:
* 协议
* IP
* PROT
* 资源名
* 例如:http://182.61.200.7:80/index.html 可以访问百度
* indext.hmtl是资源名
* */

package jdbc.test;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

import com.mysql.jdbc.Connection;
public class JdbcTest {

	public static void main(String[] args) {
		Statement createStatement = null;
		Connection conn = null;
		try {
		//1.注册驱动 java.sql.DriverManager
		//static void registerDriver(Driver driver)    这里面Driver是一个接口,具体是由个数据库厂家实现,开发人员负责调用
		//注册与给定的驱动程序 DriverManager 。
		Class c1 = Class.forName("com.mysql.jdbc.Driver");  //通不过反射机制来创建,可以去耦合
		Driver driver = (Driver) c1.newInstance();
		DriverManager.registerDriver(driver);
		
		//2.获取连接
		/*
		 * url:统一资源定位符
		 * 	url包括几部分:
		 * 	协议
		 * IP
		 * PROT
		 * 资源名
		 * http://182.61.200.7:80/index.html  可以访问百度
		 * 
		 * */
		/*jdbc:mysql://127.0.0.1:3306/bjpowernode
		 * jdbc:mysql :协议,协议是提前定好了的,连接mysql的协议
		 * 127.0.0.1:3306 :ip地址
		 * 3306:端口号
		 * bjpowernode:资源名
		 * */
		String url = "jdbc:mysql://127.0.0.1:3306/bjpowernode";
		String user = "root";
		String password = "wen";
		 conn = (Connection) DriverManager.getConnection(url,user,password);
		//conn   --->  com.mysql.jdbc.JDBC4Connection@3c130745    
		//通过分析可知道这是一个多态,返回来的实际类名是Connection的子类com.mysql.jdbc.JDBC4Connection,在我们的实际应用中,不同的数据库厂家都去实现这个Connection接口,就去耦合,不用关心具体是哪个厂家了
		System.out.println("数据库连接对象"+conn);
		
		
		//3.获取数据库操作对象
		//Connection下的createStatement()方法
		//创建一个Statement对象,用于将SQL语句发送到数据库
		 createStatement = conn.createStatement();
		
		//拿到执行对象后,再执行SQL语句
		//4.执行SQL语句
		String sql = "insert into dept(deptno,dname,loc) values(50,'人事部','北京')";
		//专门执行DML语句的(insert delete upadate)
		//返回值是“影响数据库中的记录条数”  操作了几条数据,就返回几条数据
		int count = createStatement.executeUpdate(sql);
		System.out.println(count);
		
		//
		
		
		

		}catch (Exception e) {
		// TODO: handle exception
		System.out.println("注册时出现错误");
		e.printStackTrace();
		}finally {
			//释放资源
			//为了包装一定释放,再finally中释放,并遵循从小到大,关闭分别进行try catch
			if(createStatement != null) {
				try {
					createStatement.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
			if(conn!=null) {
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

}
}

通过反射机制直接注册驱动

package jdbc.test;

import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.Statement;

import com.mysql.jdbc.Connection;

public class JdbcTest02 {
		static Connection connection = null;
		static Statement createStatement = null;
	
	public static void main(String[] args) throws Exception {
		
		//注册驱动
		//反射机制,Class.forName的执行,会让反射的类的静态代码块执行
		//在Driver的静态代码块里,已经完成了驱动的注册
		//不需要接收返回值,只需要完成注册驱动的注册
		Class.forName("com.mysql.jdbc.Driver");
		
		//建立连接
		connection = (Connection) DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/bjpowernode","root","wen");
		System.out.println("连接成功");
		
		//获取操作对象
		createStatement = connection.createStatement();
		
		//执行SQL语句
		//JDBC中SQL语句不用写分号
		String DML= "delete from emp2 where bir = 1";
		int count = createStatement.executeUpdate(DML);
		System.out.println(count == 1 ?"成功":"失败");
		
		//释放资源
		if(connection!=null)
		{
			connection.close();
		}
		if(createStatement!=null) {
			createStatement.close();
		}
	}

}

处理查询结果集
处理结果的接口ResultSet
executeQuery专门执行DQL语句,方法返回一个ResultSet对象(处理查询结果集)

ResultSet 里的方法next(),如果当该行有数据时返回true,没有数据时返回false

ResultSet里的方法getString(int num),取出num列的元素,均以字符串的形式取出,不论原数据是何种类型

注意:JDBC中的下标从1开始了,不再从0开始
例:ResultSet r1 = s1.executeQuery(sql);
r1.next(); //先将光标下移
r1.getString(1);

也可以直接跟上列名,如getString(“列名”),这里的列名需要是数据库里面对应的列名

除了可以以String类型取出,也可以以特定的数据类型取出,当然有特定的方法,比如getInt(列名或者列编号),取出整型的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值