JDBC编程

JDBC: Java Database Connectivity

一、数据库基础知识

1、关系数据模型:

术语

  • 关系:一张二维表
  • 元祖:表中的一行
  • 属性:表中的一列
  • 属性域:属性的取值范围
  • 主键:唯一的表示表中的元祖
  • 外键:一个关系中包含另一个关系的主键

范式:

范式:数据库设计需要满足的规范.

  • 1NF:对属性的原子性约束,不可再分解。不能有嵌套表。
  • 2NF: 对记录的唯一性约束,要求记录有唯一标示,实体必须是唯一的。所有的主键字段都要依赖与非主键字段。
  • 3NF:对字段冗余性的约束,要求任何字段都不能派生于其他字段。也就是说非主键字段直接不能相互依赖。

二、MySQL入门

1、MySQL数据类型简介

整数

  • TINYINT:1个字节,8位
  • SMAILLINT:2个字节,16位
  • MEDIUMINT:3个字节,24位
  • INT:4个字节,32位
  • BIGINT:8个字节,64位

实数(带有小数部分的数字)

  • FLOAT:4个字节,32位
  • DOUBLE:8个字节,64位
  • DECIMAL:存储精确的小数,指定小数点前后的位数。eg.DECIMAL(20,2),表示小数点后存储两个数字,小数点前存储18个数字。

字符串

  • VARCHAR:用于保存可变长度的字符串。
  • CHAR:固定长度的字符串。0~255任意值。
  • TEXT、BLOB:存储较长的字符串。

日期

  • DATETIME:保存大范围的值,从1001~9999年,精度为秒。8个字节。
  • TIMESTAMP:时间戳类型,1970.1.1~2038年,即格林威治时间到现在所经历的秒数。4个字节。

数据类型选择准则

  • 最小原则
  • 简单原则
  • 避免索引列上的NULL

三、JDBC编程

1、JDBC简介

JDBC概述

  • ODBC(Open Database Connectivity)
  • JDBC(Java Database Connectivity)

JDBC的组成

  • JDBC API:面向开发人员
  • JDBC Driver API:面向底层驱动开发商

JDBC Driver API

主要编程接口:

  • DriverManager:装载驱动程序,并为创建数据库连接提供支持
  • Connection:连接某一指定的数据库
  • Statement:执行SQL语句,获取查询结果的方法。

JDBC驱动程序主要有四种类型:

  • JDBC-ODBC bridge
  • 部分Java技术的本地API驱动程序
  • 全部基于Java技术的本地API驱动程序
  • 全部基于Java技术的本地协议驱动程序

2、JDBC编程之数据准备

建两张表:

creat table tbl_user(
id int(11) unsigned not null auto_increment,
name varchar(50) not null default '',
email varchar(50) nit null default '',
primary key(id))
engine = InnoDB
default charset = utf8;


creat table tbl_address(
id int(11) unsigned not null auto_increment,
city varchar(20) default null,
country varchar(20) default null,
primary key (id))
engine = InnoDB
default charset = utf8;

注:

id:没有业务含义的逻辑主键
auto_increment:自增长
default '' :默认值为空字符串
engine = InnoDB:设置MySQL的存储引擎,InnoDB是存储引擎的一种,支持事物。

插入数据:

insert into tbl_user(id, name, password, email)
values
(1, 'xiaosa', '123456', 'xiaosa.nicolo@qq.com'),
(2, 'nicolo', '123456', '1241251168@qq.com');

insert into tbl_address(city, country, user_id)
values('xian', 'china', 1);

insert into tbl_address(city, country, user_id)
values('beijing', 'china', 2);

3、JDBC编程之数据查询

安装驱动,下载mysql-connector-java。 将mysql-connector-java-5.1.42-bin.jar包拷到WEB-INF目录下。

JDBC编程流程

  1. 加载驱动
  2. 打开连接
  3. 执行查询
  4. 处理结果
  5. 清理环境
实现程序:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class JDBCTest{
    pubilc static void main(String[] args){
    String sql = "SELECT * FROM tbl_user";
    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;

    try{
        //注册MySQL的JDBC驱动程序,class类是继承Object类
        //forName方法用来初始化参数指定的类并创立一个对应的实例对象
        Class.forName("com.mysql,jdbc.Driver");

        //获取MySQL的数据库连接
        //getConnection方法需要传入三个参数:MySQL数据库的URL、MySQL数据库的用户名、密码
        ////locahost:主机,3306:MySQL的端口,jsp_db:将要使用的数据库
        conn = DriverManager.getConnection("jdbc:mysql://locahost:3306/jsp_db","root","");

        //创建st对象
        st = conn.createStatement();

        //使用executeQuery方法发生sql语句返回rs结果集
        rs = st.executeQuery(sql);

        while(rs.next()){
            System.out.print(rs.getInt("id") * " ");
            System.out.print(rs.getString("name") * " ");
            System.out.print(rs.getString("password") * " ");
            System.out.print(rs.getString("email") * " ");
            System.out.println();
        }catch (Exception e){
            e.printStackTrace();
        }finally{
            try{
                //关闭rs结果集
                rs.closee();
                }catch(Exception e2){

                }

            try{
                //关闭st对象
                st close();
                }catch(Exception e3){

                }

            try{
                //关闭数据库连接
                conn close();
                }catch(Exception e4){

                }
        }
    }
}
}

4、JDBC编程之数据更新

数据库连接方法

public static Connection getConnection(){
    Connection conn = null;
    try{
        Class.forName("con.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://locahost:3306/jsp_db","root"," ");
    }catch(Exception e){
        e.printStackTrace();
    }
    return conn;
    }

插入数据方法

public static void insert(){
    //获取数据库连接
    Connection conn = getConnection();

    try{
        String sql = "INSERT INTO tbl_user(name, password, email)" + "VALUES('Tom', '123456', 'tom@qq.com')";
        Statement st = conn.createStatement();
        int count = St.executeUpdate(sql);
        System.out.println("向用户表中插入了" + count + " 条记录");
        conn.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

更新方法

public static void update(){
//获取数据库连接
    Connection conn = getConnection();

    try{
        String sql = "UPDATE tbl_user SET email = 'tom@126.com' WHERE name = 'Tom'";
        Statement st = conn.createStatement();
        int count = St.executeUpdate(sql);
        System.out.println("向用户表中更新了" + count + " 条记录");
        conn.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

删除记录的方法

public static void dele(){
//获取数据库连接
    Connection conn = getConnection();

    try{
        String sql = "DELETE FROM tbl_user WHERE name = 'Tom'";
        Statement st = conn.createStatement();
        int count = St.executeUpdate(sql);
        System.out.println("从用户表中删除了" + count + " 条记录");
        conn.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

5、JDBC编程之事务处理

事务概述

  • 事务:数据库维护数据一致性的单位,在每个事务结束时都能保持事务的一致性。

事务的四个基本特征

  • 原子性:事务中的操作都被视为一个逻辑单元。 这个事务中的逻辑单元要么全部成功,要么全部失败。事务中的元素是一个整体,是不可分割的。
  • 一致性:事务开始之前和事务结束以后,数据库都处于一致性状态。数据库的完整性约束没有被破坏。
  • 隔离性:对数据库的修改的多个事务是互相隔离的。说明事务必须是独立的。
  • 持久性:事务完成之后,它对数据的影响是永久的,

事物的语句

  • 开始事物:BEGIN TRANSACTION
  • 提交事物:COMMIT TRANSACTION
  • 回滚事物: ROLLBACK TRANSACTION

编程实现

public class TransactionTest{

public static Connection getConnection(){
    //数据库连接
    Connection conn = null;

    try{
        Class.forName("com.mysql.jdbc.Driver");
        conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_db, root, " ");
    }catch(Exception e){
        e.printStackTrace();
    }
    return conn;
}

public static void insertUserData(){
    //插入用户数据

    Connection conn = getConnection;

    try{
        String sql = "INSERT INTO tbl_user(id, name, password, email)" + "VALUES(10, 'Tom', '123456', 'tom@gmail.com')";
        Statement st = conn.createStatement();
        int count = st.executeUpdate(sql);
        System.out.println("向用户表插入了 " + count + " 条记录");
        conn.close();
    }catch(Exception e){
        e.printStackTrace();
    }
}

public static void insertAddressData(){

 Connection conn = getConnection();
 try{
 Sting sql = "INSERT INTO tbl_address(id, city, country, user_id)" + "VALUES(1, 'xian','Chian', '10')";
 Statement st = conn.createStatement();
 int count = st.executeUpdate(sql);
 System.out.println("向地址表中插入了 " + count +" 条记录");
}catch(Exception e){
        e.printStackTrace();
    }
public static void main(String[] agrs){
    insertUserData();
    insertAddressData();
}

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nodejs后端

nodejs 封装mysql

以上是在线运行项目,特意分享,网上大多都是2015年的文章,且没有新的方法,可以查看官方文档 mysql - npm

3777
来自专栏java一日一条

JDBC为什么要使用PreparedStatement而不是Statement

PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(...

842
来自专栏最高权限比特流

JDBC为什么要使用PreparedStatement而不是Statement

1492
来自专栏java系列博客

oracle 中start with ... connect by prior 子句的用法

1782
来自专栏Java帮帮-微信公众号-技术文章全总结

JDBC基础入门(2)

其他关于C3P0的详细内容, 可参考C3P0主页. HikariCP HikariCP是另一款高性能/”零开销”/高品质的数据库连接池,据测试,其性能优于C3P...

2767
来自专栏java达人

JDBC为什么要使用PreparedStatement而不是Statement

PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 Callab...

29110
来自专栏程序员的SOD蜜

PDF.NET数据开发框架 之SQL-MAP使用存储过程

有关SQL-MAP的规范性介绍,请看下面的文章: PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范 在SQL-MAP中使用存储过程 1...

26310
来自专栏Python

Django---ORM操作大全

前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:...

96110
来自专栏Android点滴积累

Java操作Sqlite数据库-jdbc连接

Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.ba...

2697
来自专栏Java架构师历程

jdbc简单增删改查代码

Class.forName(“com.mysql.jdbc.Driver”).newInstance(); 我们链接的是MYSQL数据库,所以需要一个MYSQL...

3211

扫码关注云+社区

领取腾讯云代金券