• jdbc概念
  • java database connect
  • java访问数据库平台的统一接口,但是jdbc有缺陷,就是不同数据库的sql语句并没有统一
  • jdbc需要在程序中写不同的sql语句,hibernate就完全屏蔽了这种区别
  • 在开发端,有统一的JDBC接口,在数据库端,不同的数据库有不同的JDBC接口(类库)
  • 核心类介绍
  • JDBC中的核心类
  • DriverManager
  • DriverManger(驱动管理器)的作用有两个:
  • 注册驱动:这可以让JDBC知道要使用的是哪个驱动;
  • 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。
  • Connection
  • Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:
  • Connection最为重要的一个方法就是用来获取Statement对象;
  • Statement
  • Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句
  • int executeUpdate(String sql):执行更新操作,即执行insert、update、delete语句,其实这个方法也可以执行create table、alter table,以及drop table等语句,但我们很少会使用JDBC来执行这些语句;
  • ResultSet executeQuery(String sql):执行查询操作,执行查询操作会返回ResultSet,即结果集。
  • boolean execute():Statement还有一个boolean execute()方法,这个方法可以用来执行增、删、改、查所有SQL语句。该方法返回的是boolean类型,表示SQL语句是否执行成功。
  • 如果使用execute()方法执行的是更新语句,那么还要调用int getUpdateCount()来获取insert、update、delete语句所影响的行数。
  • 如果使用execute()方法执行的是查询语句,那么还要调用ResultSet getResultSet()来获取select语句的查询结果。
  • ResultSet
  • ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;
  • ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。
  • 结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:
  • boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;
  • XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。
  • 第一个程序
  • 导入mysql的驱动jar包mysql-connector-java-5.1.39-bin.jar;
  • 写第一个测试程序,连接mysql并查询
package com.qiaolei;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.Test;

public class ConDb {
	@Test
	public void test() throws ClassNotFoundException, SQLException {
		// 注册驱动,只用加载这个类,在static代码块中会自动注册驱动
		// 出现异常ClassNotFoundException只有两个原因:
		// 1.你没有给出mysql的jar包;
		// 2.你把类名称打错了,查看类名是不是com.mysql.jdbc.Driver
		Class.forName("com.mysql.jdbc.Driver");
		// 获得连接
		// 参数格式第一部分是jdbc,这是固定的;
		// 第二部分是数据库名称,那么连接mysql数据库,第二部分当然是mysql了;
		// 第三部分是由数据库厂商规定的,我们需要了解每个数据库厂商的要求,
		// mysql的第三部分分别由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb1)组成。
		// ?后面跟连接参数
		// 出现SQLException有可能是连接的三个参数写错了
		Connection con = DriverManager.getConnection(
				"jdbc:mysql://localhost:3306/ecshop?useUnicode=true&characterEncoding=UTF8", "root", "123456");
		// Statement是用来向数据库发送要执行的SQL语句的!
		Statement stmt = con.createStatement();
		// 发送sql查询语句
		String sql = "select * from ecs_article";
		ResultSet rs = stmt.executeQuery(sql);
		// ResultSet对象是一个二维数组,next()方法用于将光标移到下一行,并返回是否有下一行
		// getXX(列数或列名)返回当前行某列的值
		while (rs.next()) {
			int id = rs.getInt(1);
			String title = rs.getString(3);
			System.out.println(id + ", " + title);
		}
		// 释放资源,顺序和创建的顺序相反
		rs.close();
		stmt.close();
		con.close();
	}
}