JDBC学习笔记

java开发常用数据库:mysql、oracle;安卓开发常用:sqlite。JDBC大部分时候会屏蔽数据库差异。

Mysql特点:

1、开放源码          2、高效(阿里、京东等很多大公司用)          3、适用于所有平台           

4、支持多线程,充分利用CPU资源,性能出色          5、价格便宜          6、大数据处理,可处理5千万条数据

如果不用MySQL,可以在下图所示的地方停止MySQL服务

 

一、JDBC是一套面向对象的应用程序接口(API),制定了访问各种关系数据库的统一接口。

二、JDBC不能直接访问数据库,必须依赖数据库厂商提供的JDBC驱动程序完成以下三步工作 a 同数据库建立连接 b 向数据库发送SQL语句 c 处理从数据库返回的结果 

三、JDBC的四种驱动类型器:JDBC-ODBC桥连、JDBC-Native桥连、JDBC网络驱动、本地协议驱动(最常用)。

四、JDBC中常用的接口和类:

1、Drive接口,每种数据库的驱动程序都应该提供一个实现java.sql.Driver接口的额类。

2、DriverManager类,java.sql.DriverManager类是JDBC的管理层,作用于用户和驱动程序之间,负责跟踪可用的驱动程序,并在数据库和驱动程序之间建立连接。

3、Connection接口,java.sql.Connection接口代表与特定数据库的链接,在链接中可执行SQL语句并返回结果,还可以通过GetMetaData()方法获得由数据库提供的相关信息,如数据表、存储过程、链接功能等相关信息。

4、Statement接口,java.sql.Statement接口用来执行静态的SQL语句,并返回执行结果。

5、PreparedStatement接口,继承并扩展了Statement接口,用来执行动态的SQL语句。通过PreparedStatement实例执行的动态SQL语句将被预编译保存到PreparedStatement实例中,从而可以反复并高效的执行该SQL语句。

6、CallableStatement接口,java.sql.CallableStatement继承并扩展了PreparedStatement接口,用来执行SQL的存储过程。

7、ResultSet接口,java.sql.ResultSet接口类似于一个数据表,通过该接口实例可获得检索结果集。

package com.testjdbc;

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

import javax.naming.spi.DirStateFactory.Result;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

/**
 * 测试PreparedStatment的基本用法
 * 
 * @author Administrator
 *
 */
public class demo3 {
	public static void main(String[] args) {
		Connection conn = null;
		Statement stmt = null;
		PreparedStatement ps = null;
		try {
			//加载驱动类
			Class.forName("com.mysql.jdbc.Driver");
			//建立连接(建立连接其实包含了Socket对象,是一个远程连接,比较耗时!这是connection对象管理的一个要点。)
			//开发中,为了调高效率,都会使用连接池来管理连接对象
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc", "root", "123456");
			
			//Statement实际工作中使用较少,传参麻烦,容易sql注入
			stmt = conn.createStatement();
			//sql操作语句可以从Navicat的“查询”中粘贴复制
			String sql = "INSERT INTO t_user (username,pwd,regtime) VALUES ('王五',555,NOW());"
			stmt.execute(sql);
			
			//测试sql注入
			String id = "5 or 1=1"; //这种恶意写法会让语句永远为真,从而删除整个数据库。
			String sql = "delete from u_user where id" + id;
			stmt.execute(sql);
			
			//通过传参数时候的预处理,可以有效的防止sql注入 
			String sql = "INSERT INTO t_user (username,pwd,regtime) VALUES (?, ?);" //?是占位符
			ps = conn.prepareStatement(sql);
			//传参,直接使用Object可以不用判断参数类型,直接使用。
			ps.setObject(1, "张琪");                 //这里的索引从0开始计算,而不是1
			ps.setObject(1, "haj");
			ps.setObject(3, new java.sql.Data(System.currentTimeMillis()));
			//stmt.execute(sql);
			
			//stmt.execute(sql)用的比较少,应为不返回参数;stmt.executeQuery(sql)用来查询;stmt.executeUpdate(sql)用来增删改
			//ResultSet的用法
			ResultSet rs = st.executeQuery();
			while (rs.next()) {
				System.out.println(rs.getInt(1)+"----"+rs.getString(2)+"----"+rs.getString(3));
			}
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {                          //后开的先关
			//正确的关闭顺序ResultSet ----> Statement ----> Connection,要将try-catch块分开写。
			try {
				if(rs != null) {
					rs.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(stmt != null) {
					stmt.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
			try {
				if(conn != null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

 

五、事务:

1、概念:一组要么同时执行成功、要么执行失败的SQL语句。是数据库操作的一个执行单元。

2、事务开始于DML语句(INSERT/UPDATE/DELETE);结束于COMMIT(执行成功提交表格)、ROLLBACK(执行失败回滚到初始状态)、CREAT TABLE(创建新表格)、DCL语句(如GRANT,修改权限)、断开和数据库的链接。

3、事务的四大特点:

原子性:要么同时成功,要么同时失败。

一致性:一旦执行过程中有一条语句执行失败,数据要回滚到所有数据执行之前的状态。

隔离性:A事务在操作数据库的时候可以对其他事务设置相应的隔离级别(读取未提交、读取已提交(常用默认)、可重复读、序列化(效率最低,锁表禁止访问))

持久性:一旦事务完成,硬盘上的数据状态会被持久的改变。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值