JDBC

一、JDBC概述:

1、Java DataBase Connectivity(java数据库连接)

2、组成包:java.sql.*;javax.sql.*;这两个包都包含在了JDK中。

3、还需要数据库的驱动,这些驱动就相当于对JDBC规范的实现(驱动由数据库厂商提供)


JDBC全称为:Java Data Base Connectivityjava数据库连接),它主要由接口组成。


组成JDBC的2个包:

java.sql

javax.sql


开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)


二、JDBC的编码步骤:

1、把数据库的驱动加入到classpath中

2、开发步骤:

 * 开发步骤:(必须记住的)

 * 1、注册驱动

 *  2、获取与数据库的链接

 *  3、得到代表SQL语句的对象

 *  4、执行语句

 *  5、如果执行的是查询语句,就会有结果集,处理

 *  6、释放占用的资源

3、具体代码

package com.heima.jdbc;

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


//演示第一个JDBC案例
public class JdbcDemo1 {

	public static void main(String[] args) throws Exception {
		//1. 注册驱动
		   Class.forName("com.mysql.jdbc.Driver") ;
		//2. 创建一个连接对象
		   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","root") ; 
		//3. 创建一个sql语句的发送命令对象
		   Statement stmt = conn.createStatement() ;
		//4. 执行SQL,拿到查询的结构集对象
		   ResultSet rs = stmt.executeQuery("select * from stu") ;
		//执行结果有两种:
		//增删改 :不用返回任何数据
		//查:返回一个虚拟的结果集
		//5. 输出结果集的数据   
		   while(rs.next()){
			   System.out.println(rs.getInt("id") + ":" + rs.getString("name") + ":" + rs.getString("address"));
		   }
		//6. 关闭连接,命令对象,结果集
		   rs.close() ;
		   stmt.close();
		   conn.close() ;
	}
}

1.注册驱动

三种方式:

第一种:

 Driver driver = new Driver() ;
 DriverManager.registerDriver(driver) ;


第二种:

Driver d = (Driver)Class.forName("com.mysql.jdbc.Driver").newInstance() ;
DriverManager.registerDriver(d) ;

第三种:

Class.forName("com.mysql.jdbc.Driver") ;  //自动进行注册

2.获取连接对象

三种方式:

connection:让应用程序连接到数据库的一个连接对象。

第一种:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?user=root&password=root") ;

第二种方式:

读取properties文件:

新建一个properties文件:放在src下

里面写连接信息:



//第二种方式
		   //读取properties文件
		   Properties pro = new Properties() ;
		   InputStream in = JdbcDemo3.class.getClassLoader().getResourceAsStream("dbcfg.properties") ;
		   pro.load(in) ;
		   
		   Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", pro) ;




第三种方式:

		String driverClass = "" ;
		String url = "" ;
		String user = "" ;
		String password = "" ;
		
		 Properties pro = new Properties() ;
		 InputStream in = JdbcDemo3.class.getClassLoader().getResourceAsStream("dbcfg.properties") ;
		 pro.load(in) ;
		 
		 
		 driverClass = pro.getProperty("driverClass") ;
		 url = pro.getProperty("url") ;
		 user = pro.getProperty("user") ;
		 password = pro.getProperty("password") ;
		
		
		//1. 注册驱动
		  Class.forName(driverClass) ;<pre name="code" class="html" style="color: rgb(63, 95, 191);">                  Connection conn = DriverManager.getConnection(url,user,password) ; 

 
 

statement接口:

接口resultset:

JDBC的增删改:

                  //添加:
		   String sql = "insert into stu(id,name,sex,age,address) values(12,'东方不败','男',20,'黒木崖')" ;
		   //修改:
		   String sql = "update stu set sex ='女' where id = 12" ;
		   //删除:
		   String sql = "delete from stu where id  = 12" ;//根据主键来删
		   
		   int n = stmt.executeUpdate(sql) ; //n:插入的记录数
		   System.out.println(n);
		   
		//5. 关闭连接,命令对象,结果集
		   stmt.close();
		   conn.close() ;


拿取结果集数据的方式:
第一种:(推荐)
ResultSet rs = stmt.executeQuery("select id 编号,name 姓名 from stu") ;  
			   //第一种:根据字段名拿取 (推荐)
			  // int id = rs.getInt("编号") ;  //是结果集的字段名 
			 //  String name = rs.getString("姓名") ;
第二种:
			   //第二种: 根据字段的索引(索引从1开始)
			   int id = rs.getInt(1) ;
			   String name = rs.getString(2) ;


DriverManger类详解

1.1作用:a、注册驱动b、获取与数据库的链接

1.2改进注册驱动:(不能依赖具体的数据库驱动

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

缺点:严重依赖具体的驱动类;会导致驱动被注册2次。

 

替代方案:Class.forName("com.mysql.jdbc.Driver");


数据库URL

lURL用于标识数据库的位置,程序员通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

   jdbc:mysql:[]//localhost:3306/test ?参数名=参数值



常用数据库URL地址的写法:
Oracle 写法: jdbc:oracle:thin:@localhost:1521:sid
SqlServer—jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid
MySql—jdbc:mysql://localhost:3306/sid

lMysql的url地址的简写形式: jdbc:mysql:///sid

常用属性:useUnicode=true&characterEncoding=UTF-8


Connection

所有的与数据库的交互都是基于链接的基础之上的,因此该对象相当重要。

Statement stmt =conn.createStatement():创建向数据库发送sql的statement对象

lJdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:
createStatement():创建向数据库发送sqlstatement对象。
prepareStatement(sql):创建向数据库发送预编译sqlPrepareSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit():在链接上提交事务。
rollback():在此链接上回滚事务。


Statement

作用:代表SQL语句;向数据库发送并执行SQL语句

常用方法:

ResultSet executeQuery(String sql):只适合查询,返回的是查询的结果集

int executeUpdate(String sql):适合DML,或者没有返回结果集的DDL,返回的是影响的

l Jdbc 程序中的 Statement 对象用于向数据库发送 SQL 语句, Statement 对象常用方法:
executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql) :用于向数据库发送 insert update delete 语句
execute(String sql) :用于向数据库发送任意 sql 语句
addBatch(String sql) :把多条 sql 语句放到一个批处理中。
executeBatch() :向数据库发送一批 sql 语句执行。 

4、ResultSet详解

作用:代表者查询语句的查询结果集

4.1遍历过程:有一个游标,如何遍历结果集,请看图



Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet对象维护了一个指向表格数据行的 游标,初始的时候,游标在第一行之前,调用ResultSet.next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
•获取任意类型的数据
•getObject(int index)
•getObject(string columnName)

•获取指定类型的数据,(封装数据时方便)例如:
•getString(int index)
•getString(String columnName)

ResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast():移动到resultSet的最后面。


常用数据类型转换表


结果集的移动:
     //5. 结果集的移动:
		   rs.first() ;  //移动到第一条
		   rs.last() ;  //移动到最后一条
		   rs.absolute(5) ;  //移动到第五条 移动到具体的某一条
		   rs.previous() ; //移动到第4条
		   //rs.afterLast() ;   //移动到最后一条记录的后边  使其拿不到数据
		   System.out.println(rs.getInt("id") + ":" + rs.getString("name") + ":" + rs.getString("address"));


为了防止sql注入,采用preparedStatement

特点和作用

a、指示SQL语句的预编译。提高数据库的执行效率

b、防止SQL注入。给数据库的已经不是字符串了

c、语句中的参数可以使用占位符(?)


预处理对象,提前编译好sql语句,传递值就可以了,不用再去编译了,效率大大高于Statement
         pstmt = conn.prepareStatement("select * from users where username=? and password = ?") ;
			//指定?的值
			pstmt.setString(1, username) ; //数字表示第几个问号
			pstmt.setString(2, password) ;
			rs = pstmt.executeQuery();



如何获取列的数据



遍历结果集应该封装到JavaBean中




5、释放占用的资源

按照打开的顺序,以相反的方向进行释放。

Connection要尽量晚的创建和尽量早的释放。


为了保障资源能被释放,应该放到finally代码块中





四、JDBC的编码规范和工具类的提取


1、编写配置文件:


2、抽取了工具类




3、以后代码的编写



五、JDBC进行CRUD










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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值