主要内容
MySQL 的基本操作和基本 SQL 语法
使用 JDBC 进行 MySQL 数据库的开发
使用 DriverManager,Connection,PreparedStatement,ResultSet 对数据库进行增删改查操作
JDBC 简介
JDBC(Java Database Connectivity) 提供了一种与平台无关的用于执行 SQL 语句的标准 Java API, 可以方便地实现多种关系型数据库的统一操作, 它由一组用 Java 语言编写的接口和类组成.
JDBC 本身提供的是一套数据库操作标准, 而这些标准又需要数据库厂商实现, 所以针对每一个数据库厂商都会提供一个 JDBC 驱动程序, 目前比较常见的 JDBC 驱动程序可分为以下 4 类:
JDBC-ODBC 桥驱动. 直接利用微软的 ODBC(Open Database Connectivity) 进行数据库的连接操作, 但是这种操作性能较低.
JDBC 本地驱动. 直接使用各个数据库生产商提供的 JDBC 驱动程序, 但是因为其只能应用在特定的数据库上, 会丧失程序的可移植性, 不过这样操作的性能较高.
JDBC 网络驱动. 将 JDBC 转换为与 DBMS 无关的网络协议, 之后又被某个服务器转换为一种 DBMS 协议. 这种网络服务器中间件能够将它的纯 Java 客户机连接到多种不同的数据库上, 所用的具体协议取决于提供者. 通常, 这是最灵活的 JDBC 驱动程序.
本地协议纯 JDBC 驱动. 将 JDBC 调用直接转换为 DBMS 所使用的网络协议. 这将允许从客户机器上直接调用 DBMS 服务器.
MySQL 数据库
MySQL 是一个小型关系型数据库管理系统. 在 MySQL 官网下载安装包, 安装好之后配置好环境变量就可以使用了.
连接 MySQL 数据库 | mysql -u 用户名 -p; 然后输入密码 |
创建数据库 | create database 数据库名称; |
删除数据库 | drop database 数据库名称; |
使用数据库 | use 数据库名称; |
创建数据库表 | create table 表名称 (字段名称 字段类型 默认值 约束…………); |
删除数据库表 | drop table 表名称; |
查看表结构 | desc 表名称; |
查看全部数据库 | show databases; |
查看一个数据库的全部表 | show tables; |
SQL 语法基础
SQL(Structured Query Language, 结构查询语言) 是一个功能强大的数据库语言. SQL 通常用于与数据库的通信. SQL 功能强大, 概括起来可以分成以下几组: DML(Data Manipulation Language, 数据操作语言), 用于检索或者修改数据; DDL(Data Definition Language, 数据定义语言), 用于定义数据的结构, 如创建, 修改或者删除数据库对象; DCL(Data Control Language, 数据控制语言), 用于定义数据库用户的权限.
增加数据 | insert into 表名称 [(字段 1, 字段 2,……, 字段 n)] values(值 1, 值 2,……, 值 n);([] 表示可选项) |
删除数据 | delete from 表名称 [删除条件]; |
更新数据 | update 表名称 set 字段 1 = 值 1,……, 字段 n = 值 n [where 更新条件]; |
查询数据 | select {*|column alias} from 表名称 别名 [where 条件] [limit 开始行, 取出的数据个数]; |
需要注意的是, 在增加数据时, 如果是字符串, 则一定要用 "'" 括起来; 如果是日期, 则按照标准的日期格式进行插入 (MySQL 中的日期使用 yyyy-mm-dd 的格式保存, 所以在插入数据时, 必须按照此种格式插入).
在删除数据时, 最好指定删除的条件, 如果没有指定, 则表示删除一张表中的全部数据.
与删除语句一样, 修改时也需要指定修改条件, 否则数据表的全部记录都将被修改.
连接数据库
要使用 MySQL 数据库进行开发, 首先去官网下载驱动, 然后将 MySQL 数据库的驱动程序配置到 classpath 中.
加载数据库驱动程序是 JDBC 操作的第一步, 由于已经将数据库的驱动程序直接配置到了 classpath 中, 所以, 此时可以直接进行加载. MySQL 中的数据库驱动路径是 com.mysql.jdbc.Driver. 得到驱动程序路径之后, 即可利用 Class 类进行驱动程序的加载.
连接及关闭数据库. 如果数据库驱动程序可以正常加载, 就可以利用 DriverManager 类连接数据库. 在 DriverManager 中, 提供的主要操作就是得到一个数据库的连接, getConnection() 方法就是取得连接对象, 此方法返回的是 Connection 对象, 不管使用哪种方式连接, 都必须提供一个数据库的连接地址.
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- public class ExampleDatabase {
- // 定义 MySQL 的数据库驱动程序
- public static final String DBDRIVER = "com.mysql.jdbc.Driver";
- // 定义 MySQL 数据库的连接地址
- public static final String DBURL = "jdbc:mysql://localhost:3306/test";
- //MySQL 数据库的连接用户名
- public static final String DBUSER = "root";
- //MySQL 数据库的连接密码
- public static final String DBPASS = "root";
- public static void main(String[] args) {
- Connection con = null;
- try {
- // 加载驱动程序
- Class.forName(DBDRIVER);
- }
- catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- try {
- // 连接 MySQL 数据库时, 要写上连接的用户名和密码
- con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- System.out.println(con);
- try {
- // 关闭数据库
- con.close();
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
执行数据库的更新操作
数据库连接后, 就可以进行数据库的具体操作, 要使用 Statement 接口完成, 此接口可以使用 Connection 接口中提供的 createStatement() 方法实例化.
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.sql.Statement;
- public class ExampleDatabase {
- // 定义 MySQL 的数据库驱动程序
- public static final String DBDRIVER = "com.mysql.jdbc.Driver";
- // 定义 MySQL 数据库的连接地址
- public static final String DBURL = "jdbc:mysql://localhost:3306/test";
- //MySQL 数据库的连接用户名
- public static final String DBUSER = "root";
- //MySQL 数据库的连接密码
- public static final String DBPASS = "root";
- public static void main(String[] args) {
- Connection con = null;
- Statement stmt = null;
- // 数据库插入语句
- String insertSQL = "insert into user (id, name, age) values (3,'key', 23)";
- // 数据库修改语句
- String alterSQL = "update user SET name='jon'where id=8";
- // 数据库删除语句
- String deleteSQL = "delete from user where id=5";
- try {
- // 加载驱动程序
- Class.forName(DBDRIVER);
- }
- catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- try {
- // 连接 MySQL 数据库时, 要写上连接的用户名和密码
- con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
- // 实例化 Statement 对象
- stmt = con.createStatement();
- // 执行数据库更新操作
- stmt.executeUpdate(insertSQL);
- stmt.executeUpdate(alterSQL);
- stmt.executeUpdate(deleteSQL);
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- System.out.println(con);
- try {
- // 关闭操作
- stmt.close();
- // 关闭数据库
- con.close();
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
数据库查询操作
使用 SQL 的 select 语句可以查询出数据库的全部结果, 在 JDBC 的操作中数据库的所有查询记录将使用 ResultSet 进行接收, 并使用 ResultSet 显示内容. 要进行数据库查询操作, 需要使用 Statement 接口定义的 executeQuery() 方法, 此方法返回值类型就是一个 ResultSet 的对象, 此对象中存放了所有的查询结果.
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.SQLException;
- import java.sql.Statement;
- import java.sql.ResultSet;
- public class ExampleDatabase {
- // 定义 MySQL 的数据库驱动程序
- public static final String DBDRIVER = "com.mysql.jdbc.Driver";
- // 定义 MySQL 数据库的连接地址
- public static final String DBURL = "jdbc:mysql://localhost:3306/test";
- //MySQL 数据库的连接用户名
- public static final String DBUSER = "root";
- //MySQL 数据库的连接密码
- public static final String DBPASS = "root";
- public static void main(String[] args) {
- Connection con = null;
- Statement stmt = null;
- ResultSet rs = null;
- // 数据库查询语句
- String sql = "select id , name, age from user";
- try {
- // 加载驱动程序
- Class.forName(DBDRIVER);
- }
- catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- try {
- // 连接 MySQL 数据库时, 要写上连接的用户名和密码
- con = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
- // 实例化 Statement 对象
- stmt = con.createStatement();
- // 执行数据库查询操作
- rs = stmt.executeQuery(sql);
- while (rs.next()) {
- int id = rs.getInt("id");
- String name = rs.getString(2);
- int age = rs.getInt("age");
- System.out.print("id:" + id + " ");
- System.out.print("name:" + name + " ");
- System.out.println("age:" + age);
- }
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- System.out.println(con);
- try {
- // 关闭结果集
- rs.close();
- // 关闭操作
- stmt.close();
- // 关闭数据库
- con.close();
- }
- catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
ResultSet 中的所有数据都可以通过 getString() 方法获得.
PreparedStatement
PreparedStatement 是 Statement 的子接口, 属于预处理操作. 与直接使用 Statement 不同的是, PreparedStatement 在操作时, 是先在数据表中准备好了一条 SQL 语句, 但是此 SQL 语句的具体内容暂时不设置, 而是之后再进行设置. 由于 PreparedStatement 对象已预编译过, 所以其执行速度要高于 Statement 对象. 在开发中不建议使用 Statement, 而是使用 PreparedStatement.
来源: http://www.bubuko.com/infodetail-2773114.html