day10—JDBC
2016-03-08 20:27
337 查看
JDBC:Java Database Connectivity:Java访问数据库的解决方案。
JDBC定义了一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自数据库的特点去实现这些接口。
JDBC中定义了一些接口:
1、驱动管理:DriverManager
2、连接接口:Connection、DatabasemetaData
3、语句对象接口:Statement、PreparedStatement、CallableStatement
4、结果集接口:ResultSet、ResultSetMetaData
其中,我们常用的接口仅有:
DriverManager、Connection、Statement(少用)、PreparedStatement(常用)、ResultSet、
JDBC访问数据库的工作过程:
1、加载驱动
2、建立连接
3、获取SQL连接对象
4、执行SQL语句
5、处理结果集
6、关闭连接
一、加载驱动
Driver接口及驱动类加载:以oracle为例
要使用JDBC接口,需要先将对应数据库的实现部分
(驱动)加载进来。
驱动类加载方式(Oracle):
Class.forName("oracle.jdbc.driver.OracleDriver");
二、建立连接
Connection接口
Connection接口负责应用程序对数据库的连接,在加载驱动之后,使用url、username、password三个参数,创建到具体数据库的连接。
Connection conn = DriverManager.getConnection(url,username,password);
其中url为固定写法字符串:
jdbc:oracle:thin:@ip:1521:sid
三、获取SQL连接对象
Statement接口
Statement接口用来处理发送到数据库的SQL语句对象,通过Connection对象创建:Statement stmt=conn.createStatement();
主要有三个常用方法:
1、boolean execute(sql)
如果执行的sql是查询语句且有结果集则返回true,如果是非查询语句或者没有结果集,返回false
2、ResultSet executeQuery(sql)
执行查询语句,返回结果集
3、boolean executeUpdate(sql)
执行DML语句,返回影响的记录数
PreparedStatement
Statement主要用于执行静态SQL语句,即内容固定不变的SQL语句。Statement每执行一次都要对传入的SQL语句编译一次,效率较差。
某些情况下,SQL语句只是其中的参数有所不同,其余子句完全相同,适用于PreparedStatement。
PreparedStatement的另外一个好处就是预防sql注入攻击
PreparedStatement是接口,继承自Statement接口。
使用PreparedStatement时,SQL语句已提前编译,三种常用方法 execute、 executeQuery 和 executeUpdate 已被更改,以使之不再需要参数。
PreparedStatement 实例包含已事先编译的 SQL 语句,SQL 语句可有一个或多个 IN 参数,IN参数的值在 SQL 语句创建时未被指定。该语句为每个 IN 参数保留一个问号(“?”)作为占位符。
预编译的SQL语句写法如下:
select * from t where username = ? and password = ?;
通过PreparedStatement pstmt = conn.prepareStatement(sql)
对占位符进行初始化
pstmt.setString(1, "system");
pstmt.setInt(1, 123456);
ps:PreparedStatement比Statement接口更常用,PreparedStatement能有效防止SQL Injection(SQL注入)。
四、执行sql语句,接收结果集
ResultSet接口
执行查询SQL语句后返回的结果集,由ResultSet接口接收。
常用处理方式:遍历 / 判断是否有结果(登录)。
String sql = "select * from emp";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(
rs.getInt("empno")+","+rs.getString("ename") );
}
查询的结果存放在ResultSet对象的一系列行中,指针的最初位置在行首,使用next()方法用来在行间移动,getXXX()方法用来取得字段的内容。
连接代码如下:
JDBC定义了一套标准接口,即访问数据库的通用API,不同的数据库厂商根据各自数据库的特点去实现这些接口。
JDBC中定义了一些接口:
1、驱动管理:DriverManager
2、连接接口:Connection、DatabasemetaData
3、语句对象接口:Statement、PreparedStatement、CallableStatement
4、结果集接口:ResultSet、ResultSetMetaData
其中,我们常用的接口仅有:
DriverManager、Connection、Statement(少用)、PreparedStatement(常用)、ResultSet、
JDBC访问数据库的工作过程:
1、加载驱动
2、建立连接
3、获取SQL连接对象
4、执行SQL语句
5、处理结果集
6、关闭连接
一、加载驱动
Driver接口及驱动类加载:以oracle为例
要使用JDBC接口,需要先将对应数据库的实现部分
(驱动)加载进来。
驱动类加载方式(Oracle):
Class.forName("oracle.jdbc.driver.OracleDriver");
二、建立连接
Connection接口
Connection接口负责应用程序对数据库的连接,在加载驱动之后,使用url、username、password三个参数,创建到具体数据库的连接。
Connection conn = DriverManager.getConnection(url,username,password);
其中url为固定写法字符串:
jdbc:oracle:thin:@ip:1521:sid
三、获取SQL连接对象
Statement接口
Statement接口用来处理发送到数据库的SQL语句对象,通过Connection对象创建:Statement stmt=conn.createStatement();
主要有三个常用方法:
1、boolean execute(sql)
如果执行的sql是查询语句且有结果集则返回true,如果是非查询语句或者没有结果集,返回false
2、ResultSet executeQuery(sql)
执行查询语句,返回结果集
3、boolean executeUpdate(sql)
执行DML语句,返回影响的记录数
PreparedStatement
Statement主要用于执行静态SQL语句,即内容固定不变的SQL语句。Statement每执行一次都要对传入的SQL语句编译一次,效率较差。
某些情况下,SQL语句只是其中的参数有所不同,其余子句完全相同,适用于PreparedStatement。
PreparedStatement的另外一个好处就是预防sql注入攻击
PreparedStatement是接口,继承自Statement接口。
使用PreparedStatement时,SQL语句已提前编译,三种常用方法 execute、 executeQuery 和 executeUpdate 已被更改,以使之不再需要参数。
PreparedStatement 实例包含已事先编译的 SQL 语句,SQL 语句可有一个或多个 IN 参数,IN参数的值在 SQL 语句创建时未被指定。该语句为每个 IN 参数保留一个问号(“?”)作为占位符。
预编译的SQL语句写法如下:
select * from t where username = ? and password = ?;
通过PreparedStatement pstmt = conn.prepareStatement(sql)
对占位符进行初始化
pstmt.setString(1, "system");
pstmt.setInt(1, 123456);
ps:PreparedStatement比Statement接口更常用,PreparedStatement能有效防止SQL Injection(SQL注入)。
四、执行sql语句,接收结果集
ResultSet接口
执行查询SQL语句后返回的结果集,由ResultSet接口接收。
常用处理方式:遍历 / 判断是否有结果(登录)。
String sql = "select * from emp";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.println(
rs.getInt("empno")+","+rs.getString("ename") );
}
查询的结果存放在ResultSet对象的一系列行中,指针的最初位置在行首,使用next()方法用来在行间移动,getXXX()方法用来取得字段的内容。
连接代码如下:
public class Demo { public static void main(String[] args) { String driverStr = "oracle.jdbc.driver.OracleDriver"; String url = "jdbc:oracle:thin:@127.0.0.1:1521:xe"; String username = "test"; String pwd = "123456"; String sql = "select empno,ename,sal from emp"; Connection conn = null; Statement stat = null; ResultSet rs = null; try { //1.加载驱动 Class.forName(driverStr); //2.获取连接 conn = DriverManager.getConnection(url,username,pwd); //3.获取sql连接对象 stat =conn.createStatement(); //4.执行sql; rs = stat.executeQuery(sql); //5.循环遍历结果集 while(rs.next()){ //System.out.println(rs.getString("empno")+"--"+rs.getString("ename")+"-- "+rs.getString("sal")); System.out.println(rs.getString(1)+"--"+rs.getString(2)+"--"+rs.getString(3)); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally{//关闭连接 if(null != rs){ try { rs.close(); rs=null; } catch (SQLException e) { e.printStackTrace(); } } if(null != stat){ try { stat.close(); stat=null; } catch (SQLException e) { e.printStackTrace(); } } if(null != conn){ try { conn.close(); conn=null; } catch (SQLException e) { e.printStackTrace(); } } } } }
相关文章推荐
- Java中的&和&&的区别
- VTK从CSV文件中读取数据
- 浮点型数据转二进制
- Java 环境搭建
- android自定义布局
- Android Fragment 你应该知道的一切
- [c++]关于时间函数的总结
- 在Eclipse中配置Tomcat服务器
- Learning Python(13)--文件读写
- stm32的fsmc
- Mac 下配置 Python 开发环境
- 斐波那契数列
- HDU 杭电1002 A + B Problem II
- 秒杀系统
- java程序设计基础_陈国君版第五版_第六章例题
- html中a标签中的onclick和href的使用
- 第2周-项目3-小试循环
- EL表达式和OGNL表达式 区别小结
- 【面试经典题之字符串】用C或C++写一个函数,实现反转一个null结尾的字符串
- 机器学习——K近邻算法(KNN)