day10—JDBC

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()方法用来取得字段的内容。

连接代码如下:

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();
				}
			}
		}
		
		
	}

}









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值