一、数据库基础
1.什么是数据库
数据库是一种储存结构,它允许使用各种格式输入、处理和检索数据,不必在每次需要数据时重新输入。例如,当需要某人的电话号码时,需要查看电话簿,按照姓名来查询,这个电话簿就是一个数据库。
数据库的特点:实现数据共享,减少数据的冗余度,数据库的独立性,数据库实现集中控制,数据库的一致性和可维护性。
2.数据库的种类
层次性数据库一般基于某种数据模型,可分为层次型、网状型、关系型及面向对象型。
3.SQL语言
sql被广泛地应用于大多数据库库中,使用sql语言可以方便地查询、操作、定义和控制数据库中地数据。sql语言主要由以下几部分组成:数据定义语言、数据操纵语言、数据控制语言、事物控制语言。
1.select语句
select语句用于从数据表中检索。语法如下:
SELECT 所选字段列表 FROM 数据表名
WHERE 条件表达式 GROUP BY 字段名 HAVING 条件表达式(指定分组的条件)
ORDER BY 字段名[ASC|DESC]
2.insert语句
insert语句用于向表中插入新数据。语法如下:
insert into 表名[(字段名 1,字段名 2...)]
values(属性值 1,属性值 2...)
3.update语句
update语句用于更新数据表中的某些记录。语法如下:
UPDATE 数据表名 SET 字段名 = 新的字段值 WHERE 条件表达式
4.delete语句
delete语句用于删除。语法如下:
delete from 数据表明 where 条件表达式
二、jdbc概述
1.jdbc技术
jdbc的全程是 Java DataBase Connectivity,是一套面向对象的应用程序接口,指定了统一地访问各种关系型数据库地标准接口。jdbc是一种底层的apl,因此访问数据库时需要在业务逻辑层中嵌入SQL语句。SQL语句是面向关系的,依赖于关系模型,所以通过jdbc技术访问数据库也是面向关系的,jdbc技术主要完成以下几个任物:
1.与数据库建立一个连接
2.向数据库发送SQL语句
3.处理从数据库返回的结果
2.jdbc驱动程序的类型
- 第一类:JDBC-ODBC桥。
- 第二类:部分本地API部分Java的驱动程序。
- 第三类:JDBC网络纯Java驱动程序。
- 第四类:本地协议的纯 Java 驱动程序。
- 第三、四两类都是纯Java的驱动程序,因此,对于Java开发者来说,它们在性能、可移植性、功能等方面都有优势。
三、jdbc中常用的类和接口
1.DriverManager类
功能:就是类中的方法:registerDriver和getConnection
1.registerDriver注册驱动:告诉程序该使用哪一个数据库驱动jar
static void registerDriver(Driver driver)//注册与给定的驱动程序DriverManager
写的代码使用:
Class.forName("com.mysql.jdbc.Driver");
通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
Static {
try{
java.sql.DriverManager.registerDriver(new Driver);
}catch (SQLException E){
throw new RuntimeException("Can't register driver!");
}
}
注意的是:在mysql5之后的驱动jar包可以省略注册驱动的步骤
2.getConnection获取数据库连接
方法:static Connection getConnection(String url,String username,String password)
参数:
url:指定连接的路径
语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
例子:jdbc:mysql://localhost:3306/employee
细节:如果连接是本机Mysql服务器,并且默认的端口是3306,则url可以 简写为:jdbc:mysql:///数据库名
2.Connection接口
1.Connection 接口代表与特定的数据库的连接,在连接上下文中执行SQL语句并返回结果。
2.java.sql.Connection接口的实现对象代表与数据库的连接,也就是在Java程序和数据库之间建立连接。Connection接口中常用的方法:
Statement createStatement():创建一个语句对象,语句对象用来将SQL语句发送到数据 库。
PreparedStatement prepareStatement(String sql):创建一个预编译的语句对象,用来将参数 化的SQL语句发送到数据库,参数包含一个或者多个问号“?”占位符。
CallableStatement prepareCall(String sql):创建一个调用存储过程的语句对象,参数是调用 的存储过程,参数包含一个或者多个问号“?”为占位符。
close():关闭到数据库的连接,在使用完连接后必须关闭,否则连接会保持一段比较长的 时间,直到超时。
isClosed():判断连接是否已经关闭。
3.Statement接口
1.Statement接口用于在已建立连接的基础上向数据库发送SQL语句
2.java.sql.Statement称为语句对象,它提供用于向数据库发出SQL语句,并且访问结果。
有三种Statement接口::java.sql.Statement、java.sql.PreparedStatement和 java.sql.CallableStatement
PreparedStatement继承Statement接口,CallableStatement继承 PreparedStatement接口。
Statement实现对象用于执行基本的SQL语句,PreparedStatement实现对 象用于执行预编译的SQL语句,CallableStatement实现对象用于用来调用数据库中的存储过程。
Statement提供了许多方法,最常用的方法如下:
executeQuery():运行查询语句,返回ResultSet对象。
executeUpdate():运行更新操作,返回更新的行数。
close():关闭语句对象。
isClosed():判断语句对象是否已经关闭。
4.PreparedStatement接口
1.PreparedStatement接口用来动态地执行SQL语句。
5.ResultSet
1.ResultSet接口相当于一个临时表,用来暂时存放数据库查询操作所获得的结果集。ResultSet实例具有指向当前数据行的指针,指针开始的位置在第一条记录的前面,通过next()方法可以将指针向下移。
2.在Statement执行SQL语句时,如果是SELET语句会返回结果集,结果集通过接口 java.sql.ResultSet描述的,它提供了逐行访问结果集的方法,通过该方法能够访问结果集中不同 字段的内容。
ResultSet最常用的方法介绍如下:
close():关闭结果集对象。
isClosed():判断结果集对象是否已经关闭。
next():将结果集的光标从当前位置向后移一行。
getString():获得在数据库里是CHAR 或 VARCHAR等字符串类型的数据,返回值类型是 String。
getFloat():获得在数据库里是浮点类型的数据,返回值类型是float。
getDouble():获得在数据库里是浮点类型的数据,返回值类型是double。
getDate():获得在数据库里是日期类型的数据,返回值类型是java.sql.Date
getBoolean():获得在数据库里是布尔数据的类型,返回值类型是boolean。
getBlob():获得在数据库里是Blob(二进制大型对象)类型的数据,返回值类型是Blob类 型。
getClob():获得在数据库里是Clob(字符串大型对象)类型的数据,返回值类型是Clob。
四、数据库操作
1.连接数据库
以下是Java连接MySQL数据库的步骤:
- 下载并导入MySQL的JDBC驱动程序,可以从MySQL官网下载或者使用Maven等构建工具导入。
- 在Java代码中加载JDBC驱动程序,例如:
Class.forName("com.mysql.jdbc.Driver");
- 创建数据库连接,需要指定数据库的URL、用户名和密码,例如:
String url = "jdbc:mysql://localhost:3306/mydatabase"; String user = "root"; String password = "mypassword"; Connection conn = DriverManager.getConnection(url, user, password);
- 创建Statement对象,用于执行SQL语句,例如:
Statement stmt = conn.createStatement();
- 执行SQL语句,例如查询数据:
ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("id: " + id + ", name: " + name + ", age: " + age); }
- 关闭数据库连接和Statement对象,例如:
rs.close(); stmt.close(); conn.close();
2.向数据库发送SQL语句
Java中向数据库发送SQL语句可以通过JDBC实现。JDBC是Java Database Connectivity的缩写,是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了一套用于执行SQL语句的方法和处理返回结果的方式。
以下是一个简单的Java程序,演示如何向数据库发送SQL语句:
import java.sql.*;
public class JdbcDemo {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 获取数据库连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "password");
// 创建Statement对象
stmt = conn.createStatement();
// 执行SQL语句
String sql = "SELECT * FROM user";
rs = stmt.executeQuery(sql);
// 处理结果集
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println("id: " + id + ", name: " + name + ", age: " + age);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (rs != null) {
rs.close();
}
if (stmt != null) {
stmt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
该程序连接到本地的MySQL数据库,执行了一个查询语句,并将结果集输出到控制台。