在java中,数据库存取技术可分为如下几类:

  1. JDBC直接访问数据库
  2. JDO技术(Java Data Object)
  3. 第三方O/R工具,如Hibernate、Mybatis等

JDBC是JAVA访问数据库的基石,JDO、Hibernate等知识更好的封装了JDBC

JDBC(Java Database Connectivity) Java和数据库的连接技术

JDBC是一个独立于特定数据库管理系统(DBMS)、通用的SQL数据库存取和操作的公共接口(一组API)
作用:

  1. 定义了用来访问数据库的标准Java类库,使用这个类库可以以一种标准的方法、方便的访问数据库资源
  2. JDBC为访问不同的数据库提供了一种统一的标准,为开发者屏蔽了一些细节问题
  3. JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定是数据库系统的特点过多的了解,从而大大简化和加快了开发过程
通过案例演示JDBC的使用

JDBC的简单使用步骤

前提:准备mysql的驱动包,加载到项目中
在项目中建立libs文件夹,将mysql-connector-java-5.1.37-bin.jar文件复制到libs目录下,右击build path — add to build path

  1. 加载驱动
  2. 获取连接
  3. 执行增删改查操作
  4. 关闭连接
public class TestConnection {
	public static void main(String[] args) throws SQLException{
		//1. 加载驱动
		DriverManager.registerDriver(new Driver());
		//2. 获取连接
		Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/girls","root","2401");
		System.out.println("连接成功");
		//3. 执行增删改查
		//3.1 编写SQL语句
		String sql = "delete from beauty where id = 9";
		//3.2 获取执行sql语句的命令对象
		Statement statement = connection.createStatement();
		//3.3 使用命令对象指向SQL语句
		int update = statement.executeUpdate(sql);
		//3.4 处理执行结果
		System.out.println(update>0?"success":"failure");
		//4. 关闭连接
		statement.close();
		connection.close();
	}
}
1. 注册驱动

类的加载时机

  1. new 对象
  2. 加载子类
  3. 调用类中的静态成员
  4. 通过反射

使用 new 对象 的方式加载类的不足:

  1. 属于编译期加载,如果编译期间该类不存在,则直接报编译错误,也就是依赖性太强
  2. 导致Driver对象创建了两遍,效率较低

采用反射的方式加载类

  1. 属于运行期间加载,大大降低了类的依赖性
  2. Driver对象仅仅创建了一遍,效率较高
//1. 加载驱动
			
//使用 new 对象 的方式加载类,属于老方法,不推荐使用
DriverManager.registerDriver(new Driver());
			
//采用反射的方式加载类
Class.forName("com.mysql.jdbc.Driver");
2. 获取连接

将信息放在properties配置文件中

name=root
password=2401
url=jdbc:mysql://localhost:3306/girls
driver=com.mysql.jdbc.Driver
//2. 获取连接
			
//方式一:
DriverManager.getConnection("jdbc:mysql://localhost:3306/girls","root","2401");


//方式二:
DriverManager.getConnection("jdbc:mysql://localhost:3306/girls?user=root&password=2401");


//方式三:
//在src下新建一个properties配置文件,将一些信息放在其中
//通过properties对象保存配置文件中的信息
Properties info = new Properties();
info.load(new FileInputStream("src\\jdbc.properties"));
String user = info.getProperty("name");
String password = info.getProperty("password");
String driver = info.getProperty("driver");
String url = info.getProperty("url");

Connection connection = DriverManager.getConnection(url,user,password);
System.out.println("连接成功");
3. 执行增删改查
//查
String sql = "select id,name,sex from beauty";
//增
String sql = "insert into beauty values(null,'小龙女','女','2000-1-1','110',null,3)";
//删
String sql = "delete from beauty where id=13";
//改
String sql = "update beauty set name='迪丽热巴'  where id=4";
//获取执行sql的命令对象
Statement statement = connection.createStatement();

//执行sql语句
			
//方式一:执行任何sql语句,增删改返回false,查如果查询到结果集,返回true,否则,返回false,因为结果非常不具体,所以不常用
boolean execute = statement.execute(sql);

//方式二:执行增删改查语句,返回受影响的行数
//增删改
int update = statement.executeUpdate(sql);
//查
//执行查询语句,返回一个结果
ResultSet set = statement.executeQuery(sql);
while(set.next()) {
	int id = set.getInt(1);
	String name = set.getString(2);
	String sex = set.getString(3);
				
	System.out.println(id+"\t"+name+"\t"+sex+"\t");
}
set.getxx获取有两种方法:

方式一:

getxx(列的索引)

例如:

int id = set.getInt(1);
String name = set.getString(2);
String sex = set.getString(3);

注意:这里的列的索引是sql语句查询出的表的列索引,不是原表列的索引。
例如String sql = "select name,id,sex from beauty";,这里name列的索引值为1,id列的索引值为2

方式二:

getxx(别名)

例如:

int id = set.getInt("id");
String name = set.getString("name");
String sex = set.getString("sex");

如果我们并不知道数据类型,可以使用:

getObject(列的索引 | 别名)
4. 关闭连接
//关闭连接,释放资源,避免连接处过多,导致数据库崩溃
statement.close();
connection.close();
set.close();