MySQL

目录

一.MySQL

1.1 MySQL 概述

1.1.1 数据库的相关概念

1.1.2 关系型数据库

1.1.3 关键字说明

1.2 MySQL数据库基本操作

1.2.1 库操作

1.2.2 表操作(字段操作)

1.2.3 数据操作

1.2.4 校对集

1.2.5 乱码问题

1.3 数据类型(列类型)

1.3.1 整数型

1.3.2 小数型

1.3.3 时间日期类型

1.3.4 定长 / 变长字符串

1.3.5 文本字符串

1.3.6 枚举字符串

1.3.7 集合字符串

1.3.8 MySQL 记录长度

1.4 列属性

1.4.1 空属性

1.4.2 列描述

1.4.3 默认值

1.4.4 主键

1.4.5 自动增长

1.4.6 唯一键

1.5 索引的概念

1.6 关系

1.7 范式

1.8 数据高级操作

1.9  连接查询

1.10  外键

1.11  联合查询

1.12 子查询  

1.13 视图

1.14  数据备份与还原

1.15 事务

1.16 变量

1.17 触发器

1.18 代码执行结构

1.19 函数

1.20 存储过程

二. JDBC

2.1 JDBC概述

2.2 JDBC对数据库进行CRUD操作

2.2.1 statement对象介绍  

2.2.2 使用jdbc对数据库增删改查

2.2.3 PreparedStatement对象介绍


一.MySQL

1.1 MySQL 概述

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

MySQL数据库是一种c/s结构的软件:客户端/服务端。若想访问服务器必须通过客户端(服务器一直运行,而客户端只是在需要使用的时候运行)。

MySQL的交互方式:

1)客户端连接认证:先连接服务器,再认证身份:mysql.exe-hPup

                 

2)客户端发送SQL指令
3)服务器接收SQL指令,处理SQL指令,返回操作结果

4)客户端接收结果,显示结果

                

5)断开连接(释放资源,避免服务器并发限制)exit或quit或 \q

1.1.1 数据库的相关概念

1) 什么是数据库?
数据库:database,存储数据的仓库。数据库是为了高效地存储和处理数据的介质(介质主要有两种:磁盘、内存)。
2)数据库的分类
数据库基于存储介质的不同,进行了分类。分为两类:关系型数据库(SQL)和非关系型数据库(NoSQL:Not Only SQL,不是关系型的数据库、或除了关系型数据库之外的数据库都叫做非关系型数据库)。
其中,关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
3)不同的数据库阵营中的产品有哪些?
关系型数据库
大型:Oracle、DB2 等
中型:SQL-SERVER、Mysql 等
小型:access 等
非关系型数据库:memcached、mongodb、redis(可以同步到磁盘)
4)两种数据库阵营的区别?
关系型数据库【磁盘】:安全(保存磁盘基本不可能丢失),容易理解,比较浪费空间(二维表)

非关系型数据库【内存】:效率高,不安全(断电丢失)

1.1.2 关系型数据库

关系型数据库:是一种建立在关系模型(数学模型)上的数据库。关系模型,是一种建立在关系上的模型,关系模型包含三个方面
1)数据结构:数据存储的问题,二维表,有行有列
2)操作指令集合:所有的SQL语句
3)完整性约束:表内数据的约束(字段与字段),表与表之间的约束(外键)
关系型数据库的设计

关系型数据库,从需要存储的数据需求中分析,如果是一类数据(实体),应该设计成一张二维表。表是由表头(字段名:用来规定数据的名称)和数据部分组成(实际存储的数据单位)

 

1.1.3 关键字说明

数据库:database
数据库系统:DBS(Database System),是一种虚拟系统,将多种内容关联起来的称呼
DBS=DBMS+DB
DBMS:Database Management System,数据库管理系统,专门管理数据库
DBA:Database Administrator,数据库管理员
行/记录:row/record,本质是一个东西,都是指表中的一行(即一条记录)。行是从结构角度出发,记录是从数据角度出发。
列/字段:column/field,本质是一个东西,都是指表中
SQL:Structured Query Language,结构化查询语言(数据以查询为主,当然也可以增删改,即CRUD操作)
SQL 分为三个部分:
1)DDL:Data Definition Language,数据定义语言,用来维护存储数据的机构(数据库、表)。代表指令:create、drop、alter等
2)DML:Data Manipulation Language,数据操作语言,用来对数据进行操作(数据表中的内容),代表指令:insert、delete、update等。其中,DML内部又单独进行了一个分类:DQL(Data Query Language:数据查询语言,如select)
3)DCL:Data Control Language,数据控制语言,主要是负责权限管理(如用户),代表指令:grant 分配权限、revoke回收权限等

SQL是关系型数据库的操作指令,SQL是一种约束,但不强制(类似W3C),不同的数据库产品(如oracle、mysql)内部会有一些细微的区别。

1.2 MySQL数据库基本操作

SQL基本操作:CRUD增删改查。将SQL的基本操作根据操作对象进行分类,分为三类:库操作、表操作(字段操作)、数据操作。

1.2.1 库操作

库操作:对数据库的增删改查
新增数据库,基本语法
    Create database 数据库名字 [库选项]
其中,库选项是用来约束数据库的,分为两个选项。
字符集设定:charset/character set 具体子符集(数据存储的编码格式),常用的字符集有GBK和UTF8(与UTF-8不同)。

校对集设定:collate 具体校对集(数据比较的规则)

1.2.2 表操作(字段操作)

表与字段是密不可分的。

1.2.3 数据操作

 

1.2.4 校对集

1.2.5 乱码问题

1.3 数据类型(列类型)

所谓的数据类型,就是对数据进行统一的分类。从系统的角度出发,是为了能够使用统一的方式进行管理,更好地利用有限的空间。

SQL中将数据类型分成了三大类:数值类型、字符串类型、时间日期类型。

 

其中,数值类型数据,都是数值。系统将数值型分为整数型和小数型。

1.3.1 整数型

1.3.2 小数型

包括浮点型、定点型

1.3.3 时间日期类型

1.3.4 定长 / 变长字符串

1.3.5 文本字符串

1.3.6 枚举字符串

1.3.7 集合字符串

1.3.8 MySQL 记录长度

1.4 列属性

类属性:真正约束字段的是数据类型,但是数据类型的约束是单一的,需要有一些额外的约束,来更加保证数据的合法性。
列属性有很多:NULL/NOT NULL,default,Primary key,unique key,auto_increment,comment

1.4.1 空属性

1.4.2 列描述

1.4.3 默认值

1.4.4 主键

1.4.5 自动增长

   

1.4.6 唯一键

 

1.5 索引的概念

1.6 关系

1.7 范式

  

1.8 数据高级操作

1.9  连接查询

1.10  外键

1.11  联合查询

1.12 子查询  

1.13 视图

1.14  数据备份与还原

1.15 事务

1.16 变量

1.17 触发器

1.18 代码执行结构

1.19 函数

1.20 存储过程

二. JDBC

(参考http://www.cnblogs.com/xdp-gacl/p/3973886.html 链接,以此为模板 自己做了整理、修改)

2.1 JDBC概述

1)数据库驱动

  这里的驱动的概念和平时听到的那种驱动的概念是一样的,比如平时购买的声卡,网卡直接插到计算机上面是不能用的,必须要安装相应的驱动程序之后才能够使用声卡和网卡,同样道理,我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道,如下所示:

2)JDBC介绍
  SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范(接口),称之为JDBC。这套接口由数据库厂商去实现,这样,开发人员只需要学习jdbc接口,并通过jdbc加载具体的驱动,就可以操作数据库。
如下图所示:

JDBC全称为:Java Data Base Connectivity(Java数据库连接),它主要由接口组成。
组成JDBC的2个包:
   java.sql
   javax.sql
开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。
 3)编写JDBC程序
搭建实验环境    
  1、在mysql中创建一个库,并创建user表和插入表的数据。

  SQL脚本如下:

 create database jdbcStudy character set utf8 collate utf8_general_ci;
 
 use jdbcStudy;
 
 create table users(
     id int primary key,
     name varchar(40),
     password varchar(40),
     email varchar(60),
     birthday date
 );
 
 insert into users(id,name,password,email,birthday) values(1,'zhansan','123456','zs@sina.com','1980-12-04');
 insert into users(id,name,password,email,birthday) values(2,'lisi','123456','lisi@sina.com','1981-12-04');
 insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','wangwu@sina.com','1979-12-04');

  2、新建一个Java工程,并导入数据驱动。

  3、编写程序从user表中读取数据,并打印在命令行窗口中。

  具体代码如下:

 package me.gacl.demo;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.Statement;
 
 public class JdbcFirstDemo {
 
     public static void main(String[] args) throws Exception {
         //要连接的数据库URL
         String url = "jdbc:mysql://localhost:3306/jdbcStudy";
         //连接的数据库时使用的用户名
         String username = "root";
         //连接的数据库时使用的密码
         String password = "XDP";
         
         //1.加载驱动
         //DriverManager.registerDriver(new com.mysql.jdbc.Driver());不推荐使用这种方式来加载驱动
         Class.forName("com.mysql.jdbc.Driver");//推荐使用这种方式来加载驱动
         //2.获取与数据库的链接
         Connection conn = DriverManager.getConnection(url, username, password);
         
         //3.获取用于向数据库发送sql语句的statement
         Statement st = conn.createStatement();
         
         String sql = "select id,name,password,email,birthday from users";
         //4.向数据库发sql,并获取代表结果集的resultset
         ResultSet rs = st.executeQuery(sql);
         
         //5.取出结果集的数据
         while(rs.next()){
             System.out.println("id=" + rs.getObject("id"));
             System.out.println("name=" + rs.getObject("name"));
             System.out.println("password=" + rs.getObject("password"));
             System.out.println("email=" + rs.getObject("email"));
             System.out.println("birthday=" + rs.getObject("birthday"));
         }
         
         //6.关闭链接,释放资源
         rs.close();
         st.close();
         conn.close();
     }
 }

运行结果如下:

DriverManager类讲解

JDBC 程序中的DriverManager用于加载驱动,并创建与数据库的链接,这个API的常用方法:
DriverManager.registerDriver(new Driver())  //不推荐使用
DriverManager.getConnection(url, user, password),
注意:在实际开发中并不推荐采用registerDriver方法注册驱动。原因有二:
1、查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。
2、程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
推荐方式:Class.forName("com.mysql.jdbc.Driver");

采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。

数据库URL讲解

URL用于标识数据库的位置,通过URL地址告诉JDBC程序连接哪个数据库,URL的写法为:

常用数据库URL地址的写法:
    MySql写法:jdbc:mysql://localhost:3306/sid
    Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
    SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid

如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,那么的url地址可以简写为: jdbc:mysql:///数据库

Connection类讲解

Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:
createStatement():创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。

rollback() :在此链接上回滚事务。

Statement类讲解

Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:
executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句。
execute(String sql):用于向数据库发送任意sql语句。
addBatch(String sql) :把多条sql语句放到一个批处理中。

executeBatch():向数据库发送一批sql语句执行。

ResultSet类讲解

Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
  ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
  获取任意类型的数据
    getObject(int index)
    getObject(string columnName)
  获取指定类型的数据,例如:
    getString(int index)
    getString(String columnName)
ResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。

afterLast() :移动到resultSet的最后面。

释放资源

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

  为确保资源释放代码能运行,资源释放代码也一定要放在finally语句中。

2.2 JDBC对数据库进行CRUD操作

2.2.1 statement对象介绍  

Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。
Statement对象的executeUpdate()方法,用于向数据库发送增、删、改的sql语句,executeUpdate()执行完后,将会返回一个整数(即增删改语句导致了数据库几行数据发生了变化)。

Statement.executeQuery()方法用于向数据库发送查询语句,executeQuery()方法返回代表查询结果的ResultSet对象。

1) CRUD操作-create

使用executeUpdate(String sql)方法完成数据添加操作,示例操作:

 Statement st = conn.createStatement();
 String sql = "insert into user(….) values(…..) "; 
 int num = st.executeUpdate(sql);
 if(num>0){
     System.out.println("插入成功!!!");
 }

2) CRUD操作-update

使用executeUpdate(String sql)方法完成数据修改操作,示例操作:

 Statement st = conn.createStatement();
 String sql = “update user set name=‘’ where name=‘’"; 
 int num = st.executeUpdate(sql);
 if(num>0){
     System.out.println(“修改成功!!!");
 }

3) CRUD操作-delete

使用executeUpdate(String sql)方法完成数据删除操作,示例操作:

 Statement st = conn.createStatement();
 String sql = “delete from user where id=1; 
 int num = st.executeUpdate(sql);
 if(num>0){
     System.out.println(“删除成功!!!");
 }

4) CRUD操作-read

使用executeQuery(String sql)方法完成数据查询操作,示例操作:

 Statement st = conn.createStatement();
 String sql = “select * from user where id=1; 
 ResultSet rs = st.executeUpdate(sql);
 while(rs.next()){
     //根据获取列的数据类型,分别调用rs的相应方法映射到java对象中
}

2.2.2 使用jdbc对数据库增删改查

1) 搭建实验环境    
1、在mysql中创建一个库,并创建user表和插入表的数据。

  SQL脚本如下:

  create database jdbcStudy; //创建数据库,数据库名为 jdbcStudy
  use jdbcStudy; //使用此数据库
 
  create table users( //在所使用的这个数据库中,创建表
      id int primary key,
      name varchar(40),
      password varchar(40),
      email varchar(60),
      birthday date
 );

2、新建一个JavaWeb工程,并导入MySQL数据库驱动。

3、在src目录下创建一个db.properties文件,如下图所示:

在db.properties中编写MySQL数据库的连接信息,代码如下所示:

 driver=com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/jdbcStudy
 username=root
 password=XDP

4、编写一个JdbcUtils工具类,用于连接数据库,获取数据库连接和释放数据库连接,代码如下:

 package me.gacl.utils;
 
 import java.io.InputStream;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Properties;
 
 public class JdbcUtils {
 
     private static String driver = null;
     private static String url = null;
     private static String username = null;
     private static String password = null;
     
     static{
         try{
             //读取db.properties文件中的数据库连接信息
             InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
             Properties prop = new Properties();
             prop.load(in);
             
             //获取数据库连接驱动
             driver = prop.getProperty("driver");
             //获取数据库连接URL地址
             url = prop.getProperty("url");
             //获取数据库连接用户名
             username = prop.getProperty("username");
             //获取数据库连接密码
             password = prop.getProperty("password");
             
             //加载数据库驱动
             Class.forName(driver);
             
         }catch (Exception e) {
             throw new ExceptionInInitializerError(e);
         }
     }
     
     /**
     * @Method: getConnection
     * @Description: 获取数据库连接对象
     * @Anthor:孤傲苍狼
     *
     * @return Connection数据库连接对象
     * @throws SQLException
     */ 
     public static Connection getConnection() throws SQLException{
         return DriverManager.getConnection(url, username,password);
     }
     
     /**
     * @Method: release
     * @Description: 释放资源,
     *     要释放的资源包括Connection数据库连接对象,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象
     * @Anthor:孤傲苍狼
     *
     * @param conn
     * @param st
     * @param rs
     */ 
     public static void release(Connection conn,Statement st,ResultSet rs){
         if(rs!=null){
             try{
                 //关闭存储查询结果的ResultSet对象
                 rs.close();
             }catch (Exception e) {
                 e.printStackTrace();
             }
             rs = null;
         }
         if(st!=null){
             try{
                 //关闭负责执行SQL命令的Statement对象
                 st.close();
             }catch (Exception e) {
                 e.printStackTrace();
             }
         }
         
         if(conn!=null){
             try{
                 //关闭Connection数据库连接对象
                 conn.close();
             }catch (Exception e) {
                 e.printStackTrace();
             }
         }
     }
 }

2.2、使用statement对象完成对数据库的CRUD操作

测试代码如下:

 package me.gacl.demo;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.Statement;
 import me.gacl.utils.JdbcUtils;
 
 import org.junit.Test;
 
 /**
 * @ClassName: JdbcCRUDByStatement
 * @Description: 通过Statement对象完成对数据库的CRUD操作
 * @author: 孤傲苍狼
 * @date: 2014-9-15 下午11:22:12
 *
 */ 
 public class JdbcCRUDByStatement {
 
     @Test
     public void insert(){
         Connection conn = null;
         Statement st = null;
         ResultSet rs = null;
         try{
             //获取一个数据库连接
             conn = JdbcUtils.getConnection();
             //通过conn对象获取负责执行SQL命令的Statement对象
             st = conn.createStatement();
             //要执行的SQL命令
             String sql = "insert into users(id,name,password,email,birthday) values(3,'白虎神皇','123','bhsh@sina.com','1980-09-09')";
             //执行插入操作,executeUpdate方法返回成功的条数
             int num = st.executeUpdate(sql);
             if(num>0){
                 System.out.println("插入成功!!");
             }
             
         }catch (Exception e) {
             e.printStackTrace();
         }finally{
             //SQL执行完成之后释放相关资源
             JdbcUtils.release(conn, st, rs);
         }
     }
     
     @Test
     public void delete(){
         Connection conn = null;
         Statement st = null;
         ResultSet rs = null;
         try{
             conn = JdbcUtils.getConnection();
             String sql = "delete from users where id=3";
             st = conn.createStatement();
             int num = st.executeUpdate(sql);
             if(num>0){
                 System.out.println("删除成功!!");
             }
         }catch (Exception e) {
             e.printStackTrace();
             
         }finally{
             JdbcUtils.release(conn, st, rs);
         }
     }
     
     @Test
     public void update(){
         Connection conn = null;
         Statement st = null;
         ResultSet rs = null;
         try{
             conn = JdbcUtils.getConnection();
             String sql = "update users set name='孤傲苍狼',email='gacl@sina.com' where id=3";
             st = conn.createStatement();
             int num = st.executeUpdate(sql);
             if(num>0){
                 System.out.println("更新成功!!");
             }
         }catch (Exception e) {
             e.printStackTrace();
             
         }finally{
             JdbcUtils.release(conn, st, rs);
         }
     }
     
     @Test
     public void find(){
         Connection conn = null;
         Statement st = null;
         ResultSet rs = null;
         try{
             conn = JdbcUtils.getConnection();
             String sql = "select * from users where id=3";
             st = conn.createStatement();
             rs = st.executeQuery(sql);
             if(rs.next()){
                 System.out.println(rs.getString("name"));
             }
         }catch (Exception e) {
             e.printStackTrace();
         }finally{
             JdbcUtils.release(conn, st, rs);
         }
     }
 }

2.2.3 PreparedStatement对象介绍

PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言:PreperedStatement可以避免SQL注入的问题。

Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,从而提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

建议大家在今后的开发中,无论什么情况,都使用PreparedStatement,而不是使用Statement!!!

使用PreparedStatement对象完成对数据库的CRUD操作

测试代码如下:

 package me.gacl.demo;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
 import java.util.Date;
 import me.gacl.utils.JdbcUtils;
 import org.junit.Test;
 
 /**
 * @ClassName: JdbcCRUDByPreparedStatement
 * @Description: 通过PreparedStatement对象完成对数据库的CRUD操作
 * @author: 孤傲苍狼
 * @date: 2014-9-15 下午11:21:42
 *
 */ 
 public class JdbcCRUDByPreparedStatement {
 
     @Test
     public void insert(){
         Connection conn = null;
         PreparedStatement st = null;
         ResultSet rs = null;
         try{
             //获取一个数据库连接
             conn = JdbcUtils.getConnection();
             //要执行的SQL命令,SQL中的参数使用?作为占位符
             String sql = "insert into users(id,name,password,email,birthday) values(?,?,?,?,?)";
             //通过conn对象获取负责执行SQL命令的prepareStatement对象
             st = conn.prepareStatement(sql);
             //为SQL语句中的参数赋值,注意,索引是从1开始的
             /**
              * SQL语句中各个字段的类型如下:
              *  +----------+-------------+
                 | Field    | Type        |
                 +----------+-------------+
                 | id       | int(11)     |
                 | name     | varchar(40) |
                 | password | varchar(40) |
                 | email    | varchar(60) |
                 | birthday | date        |
                 +----------+-------------+
              */
             st.setInt(1, 1);//id是int类型的
             st.setString(2, "白虎神皇");//name是varchar(字符串类型)
             st.setString(3, "123");//password是varchar(字符串类型)
             st.setString(4, "bhsh@sina.com");//email是varchar(字符串类型)
             st.setDate(5, new java.sql.Date(new Date().getTime()));//birthday是date类型
             //执行插入操作,executeUpdate方法返回成功的条数
             int num = st.executeUpdate();
             if(num>0){
                 System.out.println("插入成功!!");
             }
             
         }catch (Exception e) {
             e.printStackTrace();
         }finally{
             //SQL执行完成之后释放相关资源
             JdbcUtils.release(conn, st, rs);
         }
     }
     
     @Test
     public void delete(){
         Connection conn = null;
         PreparedStatement st = null;
         ResultSet rs = null;
         try{
             conn = JdbcUtils.getConnection();
             String sql = "delete from users where id=?";
             st = conn.prepareStatement(sql);
             st.setInt(1, 1);
             int num = st.executeUpdate();
             if(num>0){
                 System.out.println("删除成功!!");
             }
         }catch (Exception e) {
             e.printStackTrace();
         }finally{
             JdbcUtils.release(conn, st, rs);
         }
     }
     
     @Test
     public void update(){
         Connection conn = null;
         PreparedStatement st = null;
         ResultSet rs = null;
         try{
             conn = JdbcUtils.getConnection();
             String sql = "update users set name=?,email=? where id=?";
             st = conn.prepareStatement(sql);
             st.setString(1, "gacl");
             st.setString(2, "gacl@sina.com");
             st.setInt(3, 2);
             int num = st.executeUpdate();
             if(num>0){
                 System.out.println("更新成功!!");
             }
         }catch (Exception e) {
             e.printStackTrace();
             
         }finally{
             JdbcUtils.release(conn, st, rs);
         }
     }
     
     @Test
     public void find(){
         Connection conn = null;
         PreparedStatement st = null;
         ResultSet rs = null;
         try{
             conn = JdbcUtils.getConnection();
             String sql = "select * from users where id=?";
             st = conn.prepareStatement(sql);
             st.setInt(1, 1);
             rs = st.executeQuery();
             if(rs.next()){
                 System.out.println(rs.getString("name"));
             }
         }catch (Exception e) {
             
         }finally{
             JdbcUtils.release(conn, st, rs);
         }
     }
 }

以上就是使用JDBC对数据库进行CRUD的简单总结。

------------------------------------------------------------------ 我是低调的分隔线  ----------------------------------------------------------------------      

 

                                                                                          

                                                                                                                                     吾欲之南海,一瓶一钵足矣...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值