JDBC基础

JDBC

一. 概念:

通过java数据库的连接,是一种用于执行SQL语句的api,可以为多种关系型数据库的链接提供统一访问,是有一组用java语言编写的类和接口组成

二.本质:

就是java 官方提供的一套规范(接口)用于帮助开发人员快速实现不同关系型数据库(MYsql, sqlserver,Oracle,)的连接.

三. 快速入门 :

1.导包

2 . 注册驱动

Class.forName("com.mysql.jdbc.Driver");
  1. 获取数据库的连接

     //三个参数: url : jdbc:mysql://ip地址:端口号/数据库名;username : 用户名 password : 密码
    Connetion con = DriverMannager.getConnetion(url,username,password)
    

​ 4.获取执行者对象

Statement sta = con.createStatement();//普通执行者对象
prepareStatment preparStatrment(String sql);// 预编译执行者对象

​ 5.执行 sql 语句

resultSet res = sta.executuQuery(String sql); //操作DQL语句(查询)
int i = sta.executeUpdata(String sql);  //操作DML语句(增删改)

​ 6.解析处理结果

int i // 修改语句中,返回的int 类型的值,表示操作的哪一行数据
resultSet // 把查询的数据封装到resultSet 对象中返回, 
  boolean  b =      resultSet.next();
 // next( ) 方法返回boolean值,表示指向的行是否还有数据,有返回true, 没有返回false;
	resultSet.getxxx(参数) // 获取实际数据
  

​ 7.释放资源

四. 功能类详解
DriverMannger 驱动管理对象(Driver-驱动,)
1.   //注册驱动: (告诉程序该使用哪一个数据库驱动)
	static void registerDriver(Driver driver)
//在底层源码中,有个静态代码块,已经执行了该条语句, 所以只需要加载这个类就可以.所以可以用反射的方式执行,在mysql5后,还可以省略加载的步骤,因为有个配置文件(java.aql.Driver).文件中指定了加载
    //源码
    public class Driver implements java.sql.Driver {
		 public Driver() throws SQLException {
             //构造方法
         }
	 static {
 			try {
				 DriverManager.registerDriver(new Driver()); //注册数据库驱动
 			} catch (SQLException var1) {
				 throw new RuntimeException("Can't register driver!");
			 }
 }

// 2. 获取数据库连接
static Connection getConnection(三个参数)
   //. 第一个参数 : URL, 指定的路径, jdbc:sql//ip地址:端口号/数据库名称(ping 查看是否连接 ,netstat -ant|grep 端口号, 查询是否监听)
   //第二个参数 :数据库用户名, 第三个参数: 数据库密码
Connection 对象 – 数据库连接对象
	/*
		1.获取执行者对象
	*/
	statement createStatement();//普通
	prepareStatment preparStatrment(String sql);// 预编译执行者对象
	/*
		2.管理实务	
	*/
		setAutoCommit(boolean auto )
           //..
     /*
     	3.释放资源
     */
	
Statement --执行者对象(执行sql语句)
// 执行DML语句
	int executeUpdate(String aql);
	//返回值: 结果为int类型,管理的哪一行
//执行DQL 语句
	ResultSer executeQuery(String sql);
	//返回值: 封装了查询的结果信息
// 释放资源
	close ..		

ResultSet – 结果集对象(封装查询信息)

//1.判断结果集中是否还有数据:
		boolean next ();
// 有数据返回ture,并将索引向下移动一行,没有返回false;
//2. 获取结果集中的数据, 
		XXX getXxx('列名');
// 3. 释放资源

ResultSet 的储存结构–??

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lR8GDhtQ-1592196190480)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200613145323397.png)]

//next 方法:(模拟源码(帮助理解))--以学生表为例
public	ResultSet{
    //定义一个集合,用来保存数据
    public List<map<String s ,Objict o>> list;
    //定义一个变量,当做指针
    int p=0;
    map<String s ,Student> map = list.get(p);
    publid boolean next(){
        if(p>list.size()){
            ruturn false;
        }else{
            p++;
            map = list.get(p);
            return true;
        }
    }
}
	
五. JDBC 入门案例
// 1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 获取链接
Connetction con = DriverManager.getConnection(url, username, pwd);
// 3. 获取Statement
Statement sta = con.createStatement();
// 4. 执行sql语句
ResultSet rs = sta.executeQuery("select * from student");
// 5. 通过ResultSet解析结果集(List<Map<String, Object>>)
while(rs.next()) {
    sout(rs.getString("name"));
}
// 6. 释放资源
rs.close();
sta.close();
con.close();

六. 编写配置文件的好处
1. 不用修改java代码
2.配置文件不会常驻内存中,在使用时重新加载文件(可以再程序运行是动态修改配置文件)

七.JDBC 工具类

目的: 提取冗余代码,读取配置文件的信息,读取src 文件的数据,需要用类加载器动态获取输入/出流.

类加载器的作用: 将我们编写的class文件,加载到jvm文件中(永久代).

八. sql 注入

实现方式就是拼接字符串在密码错误的情况下实现sql能够正常查询数据(利用sql 语句的漏洞来对系统进行攻击)

sql注入攻击的原理:

​ Statement 对象在执行sql语句时,将密码的一部分内容当做查询条件来执行,如果查询条件判断成立,就会查询到数据,进行操作.

SELECT * FROM user WHERE loginname= '' or 1 = 1 -- AND password='" + password + "'

解决:

​ preparedStatement 预编译执行者对象

作用: 预编译aql语句,又来解决sql注入问题

//创建
String sql = "select * from 表名 where name = ? "; 
preparedStatement ps = connection.preparedStatement( sql);
//这是sql语句中参数占位符
	ps.setxxx();
  //方法跟statement一样
	...
九 . JDBC事务

使用对象: connection对象

如何管理事务:

​ 开启: setAutoCommit(booleab b ) false 表示开启

​ 提交: Commit();

​ 回滚: roolback();

onnection.preparedStatement( sql);
//这是sql语句中参数占位符
ps.setxxx();
//方法跟statement一样


##### 九 . JDBC事务

使用对象: connection对象

如何管理事务: 	

​	开启: setAutoCommit(booleab b ) false 表示开启

​	提交: Commit();

​	回滚: roolback();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值