JDBC入门

72 阅读3分钟

JDBC的概述

  • JDBC全程为: java DataBase Connectivity(java数据库连接)

JDBC使用步骤

  • 搭建开发环境
  • 编写程序,在程序中加载数据库驱动
  • 建立连接
  • 创建用于向数据库发送SQL的Statement对象
  • 从代表结果集的ResultSet中取出数据
  • 断开与数据库的连接,并释放相关资源
public void demo2(){
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	try {
		// 1.加载驱动
//			DriverManager.registerDriver(new Driver());// 会导致驱动注册两次。
		Class.forName("com.mysql.jdbc.Driver"); 
		// 2.获得连接
		conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbctest", "root", "abc");
		// 3.创建执行SQL语句的对象,并且执行SQL
		// 3.1创建执行sql的对象
		String sql = "select * from user";
		stmt = conn.createStatement();
		// 3.2执行sql
		rs = stmt.executeQuery(sql);
		while(rs.next()){
			int uid = rs.getInt("uid");
			String username = rs.getString("username");
			String password = rs.getString("password");
			String name = rs.getString("name");
			
			System.out.println(uid+"   "+username+"   "+password+"   "+name);
		}
		
	} catch (Exception e) {
		e.printStackTrace();
	}finally{
		// 4.释放资源
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException sqlEx) { // ignore 
				
			}

			rs = null;
		}
		
		if(stmt != null){
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn != null){
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
			conn = null;// 垃圾回收机制更早回收对象。
		}
	}
}

DriverManager :驱动管理类

主要作用: 一、注册驱动 实际开发中注册驱动会使用如下的方式: Class.forName("com.mysq.jdbc.Driver"); 因为之前的方式会导致驱动注册两次。 二、获得连接 Connection getConnection(String url,String username,String password); url写法: jdbc:mysq://localhost:3306/databasename jdbc :协议 mysql :子协议 localhost:主机名 3306 :端口号 url简写: jdbc:mys:/://jdbc

Connection :连接对象 主要作用: 一、创建执行SQL语句的对象 Statement createStatement() : 执行SQL语句,有SQL注入的漏洞存在。 PreparedStatement prepareStatement(String sq) : 预编译SQL语询,解决SQL注入的漏洞。 CallableStatement prepareCall(String sql) : 执行SQL中存储过程 二、进行事务的管理 setAutoCommit(boolean autoCommit) :设置事务是否自动提交。 commit() :事务提交 rollback() :事务回滚

===========================

Statement : 执行SQL 主要作用: 一、执行SQL语询 boolean execute(String sql) :执行SQL,执行select语句返回true,否则返回false ResultSet executeQuery(String sql) :执行SQL中的select语句 int executeUpdate(String sql) :执行SQL中的insert/update/delete语句 二、执行批处理操作 addBatch(String sql) :添加到批处理 executeBatch) :执行批处理 clearBatch) :清空批处理 ResultSet :结果集 结果集:其实就是查询语句( select )语句查询的结果的封装。 主要作用: 结果集获取查询到的结果的。 next() :针对不同的类型的数据可以使用getXXX()获取数据,通用的获取数据的方法:getObject();

JDBC的资源释放

  • Jdbc程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常是ResultSet, Statement和Connection对象。
  • 特别是Connection对象,它是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

JDBC的CRUD操作

  • 向数据库中保存记录
  • 修改数据库中的记录
  • 删除数据库中的记录
  • 查询数据库中的记录

JDBC的SQL注入漏洞的解决

PreparedStatement是Statement的子接口,它的实例对象可以通过调用Connection.preparedStatement(sq)方法获得,相对于Statement对象而言: -- PreperedStatement可以避免SQL注 入的问题。 -- Statement会使数据库频繁编译SQL ,可能造成数据库缓冲区溢出。 PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。 -- 并且PreperedStatement对于sq|中的参数,允许使用占位符的形式进行替换,简化sq|语句的编写

PreparedStatement的使用

  • 保存数据
  • 修改数据
  • 删除数据
  • 查询数据

数据库连接池