(韩顺平讲解)jdbc学习(一)---jdbc简介、Statement、ResultSet、Connection的使用

Jdbc简介

jdbc sun 公司定义的一套访问数据库的规范接口 ),主要是放在 java.sql javax.sql 

原理图:

 

做jdbc开发的几个前提

1.import java.sql.*  有时  import javax.sql.*;

2.把 jar 包导入到你的java项目

 

JDBC全称为:Java Database Connectivity(java数据库连接)

 

jdbc的步骤:

一、搭建实验环境 :

1、在oracle中创建一个库,并创建user表和插入表的数据。

2、新建一个Java工程,并导入数据驱动。

二、编写程序,在程序中加载数据库驱动

DriverManager. registerDriver(Driver driver) 

Class.forName(“oracle.jdbc.driver.OracleDriver”);

三、建立连接(Connection)

Connection conn = DriverManager.getConnection(url,user,password); 

四、创建用于向数据库发送SQL的Statement对象,并发送sql

Statement st = conn.createStatement();

ResultSet rs = st.excuteQuery(sql);

五、从代表结果集的ResultSet中取出数据,打印到命令行窗口

六、断开与数据库的连接,并释放相关资源

 

Connection接口

面试题: 什么时候,需要把 setAtuoCommit设为 false?

答: 当有多个DML同时执行,将其看做一个整体提交,则使用 事务管理 ,则需要把 setAutoCommit 设为false.

 

具体使用:

//1加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

//2得到连接

ct=DriverManager.getConnection

("jdbc:oracle:thin:@127.0.0.1:1521:orclhsp", "scott", "tiger");

//把事务设为不自动提交

ct.setAutoCommit(false);

//3.创建sql对象(Statement / PreparedStatement /CallableStatement)

statement=ct.createStatement();

//4.通过statement向数据库发出sql 指令.

//需求: 对emp表进行操作: 把SMITH 的sal -10 给 KING sal+10

statement.executeUpdate("update emp set sal=sal-10 where                            ename='SMITH'");

int i=9/0;

statement.executeUpdate("update emp set sal=sal+10 where                ename='KING'");

//提交所有事务

ct.commit();

 

ResultSet 的说明

在默认情况下,我们的rs结果集,只能向前移动,这样rs 结果就不能复用 ,如果希望复用,则可以这样做:

ResultSet 的可选项有:

resultSetType - 结果集类型,它是ResultSet.TYPE_FORWARD_ONLY、ResultSet.TYPE_SCROLL_INSENSITIVE 或 ResultSet.TYPE_SCROLL_SENSITIVE 之一 

resultSetConcurrency - 并发类型;它是 ResultSet.CONCUR_READ_ONLY 或 ResultSet.CONCUR_UPDATABLE 之一 

 

//通过java 来查询所有的雇员.

//假设我们希望rs结果,可以滚动(可以向前,亦可向后)

statement=ct.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

rs=statement.executeQuery("select * from emp");

//循环取出

while(rs.next()){

System.out.println(rs.getInt("empno")+"名字"+rs.getString("ename"));

}

//如果我们希望,重新使用rs

rs.beforeFirst();

System.out.println("*********************");

while(rs.next()){

System.out.println(rs.getInt("empno")+"名字"+rs.getString("ename"));

}

 

orace 表的数据类型和 java 程序(jdbc) 的对应关系

 

 

细节: 

(1)尽量晚创建,早释放

(2)关闭资源的代码,一定放在finally

SqlHelper类的编写

在进行jdbc 程序编写的时候,因为对数据库操作很多,所有都会把对数据库的各种操作,封装到一个类(SqlHelper/DBUtil)

如果访问数据库很频繁,则我们的Connection 、PreparedStatement,ResultSet.. 就不要搞成static.

 

程序详解—DriverManager

DriverManager.registerDriver(new OracleDriver())

注意:在实际开发中,并不推荐采用这个方法注册驱动。如果采用此种方式,会导致驱动程序加载两次,也就是在内存中会有两个Driver对象。

推荐方式:Class.forName(“oracle.jdbc.driver.OracleDriver”)

DriverManager.getConnection(url, user, password),根据url获取数据库的链接。

 

数据库URL

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

   jdbc:oracle:[]:@localhost:1521:orcl

协议  子协议   主机:端口 数据库实例

常用数据库URL地址的写法:

Oracle—  jdbc:oracle:thin:@localhost:1521:sid

SqlServer—jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid

MySql—jdbc:mysql://localhost:3306/orcl

 

程序详解—Connection接口

createStatement():创建向数据库发送sql的statement对象。

prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。

prepareCall(sql):创建执行存储过程的callableStatement对象。 

setAutoCommit(boolean autoCommit):设置事务是否自动提交。 

commit() :在链接上提交事务。

rollback() :在此链接上回滚事务。

 

程序详解—ResultSet

Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。

获取任意类型的数据:

getObject(int index)

getObject(string columnName)

获取指定类型的数据:

getString(int index)

getString(String columnName)

 

ResultSet还提供了对结果集进行滚动的方法:

next():移动到下一行

Previous():移动到前一行

absolute(int row):移动到指定行 [row从1开始计算]

beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。

 

使用JDBC对数据库进行CRUD

Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。

 

Statement对象的executeUpdate方法,用于向数据库发送增、删、改的sql语句,executeUpdate执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。

 

Statement.executeQuery方法用于向数据库发送查询语句,executeQuery方法返回代表查询结果的ResultSet对象。

 

SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为。

1、statement存在sql注入攻击问题,例如登陆用户名采用' or 1=1 or name=‘

2、防范 SQL 注入,需要采用PreparedStatement取代Statement。

3、或者通过程序来控制,这个比较麻烦,推荐使用PrepareStatement来完成.

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值