JDBC基础

1.JDBC介绍

JDBC(Java Database Connectivity)是基于JAVA语言访问数据库的一种技术。
JDBC包括一套JDBC的API和一套程序员和数据库厂商都必须去遵守的规范。
定义在两个包中:

java.sql包:提供访问数据库基本的功能
javax.sql包:提供扩展的功能

2.JDBC可以做些什么?

连接到数据库
在Java app中执行SQL命令
处理结果。

3.JDBC中常用的接口和类

1.Java.sql.DriverManager 驱动管理器。用来装载驱动程序,并且为创
建新的数据库连接提供支持。
2. Java.sql.Connection完成对某一指定数据库的连接
3. Java.sql.Statement在一个给定的连接中作为SQL执行语句的容器,他包含了两个重要的子类型。

– Java.sql.PreparedSatement用于执行预编译的sql语句
– Java.sql.CallableStatement用于执行数据库中存储过程的调用

4. Java.sql.ResultSet对于给定SQL语句取得结果的途径


4.通过JDBC连接数据库的步骤:

1.加载驱动程序
使用Class.forName()显式加载驱动程序。

例如:
Class.forName(“oracle.jdbc.driver.OracleDriver”);
加载了oracle提供的jar包内的OracleDriver类

2. 建立连接
使用DriverManager.getConnection(url);建立与给定数据库URL的连接。

例如

1 String url="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
2 String user="SCOTT";
3 String password = "tiger";
4 Connection conn = DriverManager.getConnection(url, user, password);

5.处理块Statement

5.1 静态处理块 Statement

特点: 静态的sql语句
创建: Connection对象调用 createStatement() 方法
操作:

executeQuery(String sql) --> select 查询
executeUpdate(String sql) --> DML操作(insert 、delete、update)
execute(String sql) --> DDL操作

5.2 预处理块 PreparedStatement

特点: 动态的sql语句 凡是Statement 能够处理的 PreparedStatement都能处理反之不一定
创建: Connection对象调用 prepareStatement(String sql) 方法
操作:

executeQuery(String sql) --> select 查询
executeUpdate(String sql) --> DML操作(insert 、delete、update)
execute(String sql) --> DDL操作
可以使用"?"作为参数替换SQL语句中的部分值,后面传入参数(可解决SQL注入问题)

可定义参数的位置:

select -->where sal=?
insert --> values(?)
update --> set sal=? where deptno=?
delete --> where sal=?

设置参数值:setXxx(int index, Xxx x)
index:第几个参数
Xxx:参数类型
x:参数值
注:定义的参数必须填充
例:

1  String sql = "select * from t_user where username = ? and password = ?";
2  PreparedStatement ps = conn.prepareStatement(sql);
3  String u = "zhangsan";
4  String p = "123456";
5  ps.setString(1, u);
6  ps.setString(2, p);
7  ResultSet rs = stat.executeQuery(sql);

5.3 总结:

1.Statement对象在每次执行sql语句时都将语句传给数据库,在多次执行同一个语句时,效率比较低。
2.Statement对象Sql注入引起安全问题。
3.可以使用PreparedStatement,使用数据库的预编译功能,速度可以提高很多.避免sql注入引起的安全问题。
4.PreparedStatement对象的sql语句可以接受参数,每次执行时可以传递不同的参数


6.检索结果集

处理块调用executeQuery(sql)方法会返回一个ResultSet类的对象

ResultSet的基本处理方法:
– ResultSet对象包括一个由查询语句返回的一个表,这个表中包含所有的查询结果,按照行和列进行处理.
– ResultSet对象维持一个指向当前行的指针.最初,这个指针指向第一行之前.ResultSet类的next()方法使这个指针移向下一行.第一次,使用next()方法,将指针指向结果集的第一行.next方法的返回值是一个boolean值,若为true,则成功移向下一行.若返回false则没有下一行.
– getXXX方法可以从某一列中获得结果.其中XXX是jdbc中的java数据类型.如getInt();需要制定检索的列,或名称


7.查询数据库步骤:

1.加载数据库驱动类

1)在工程下新建lib文件夹,将 ojdbc6.jar(jar包在:E:oracleproduct11.2.0dbhome_1jdbclib)拷贝至该目录下
2)右键ojdbc6.jar文件,build path --> add too build path
3)将驱动类加载到内存中
Class.forName("oracle.jdbc.driver.OracleDriver");

2.获取数据库连接对象

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

3.写sql语句

String sql = "xxxxxx";

4.创建PreparedStatement对象

PreparedStatement ps = conn.prepareStatement(sql);

5.执行查询返回ResultSet结果集对象

ResultSet rs = ps.executeQuery();

6.遍历结果集,获取查询结果

while(rs.next){
rs.getXxx()
}

7.释放资源

rs.close()
ps.close()
conn.close()

8.批处理


多次执行数据更新操作时,可以使用批处理减少连接数据库次数,提高效率

Statement批处理方式:
Statement st = conn.createStatement();
st.addBatch(更新语句1);
st.addBatch(更新语句2);
…..
st.executeBatch();
st.close();


PreparedStatement批处理方式:
PreparedStatement ps = conn.preparedStatement(sql);
ps.setXXX(索引,参数值);
… …
ps.addbatch();
ps.executeBatch();
ps.close();

作者:ki16
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/gaojinshun/p/10770432.html