JavaWeb学习总结-09 JDBC 学习和使用

时间:2023-01-12 08:59:02

一 JDBC相关概念介绍

1.1 数据库驱动

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

JavaWeb学习总结-09 JDBC 学习和使用

1.2  JDBC介绍

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

JavaWeb学习总结-09 JDBC 学习和使用

JDBC全称为:JavaDataBaseConnectivity(java数据库连接),它主要由接口组成。
  组成JDBC的2个包:

  • java.sql
  • javax.sql

  开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

二 编写JDBC程序

2.1 搭建实验环境

JavaWeb学习总结-09 JDBC 学习和使用

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

  启动MySQL服务,如果是在Windows平台,按住 Win + R ,在 运行框输入: services.msc

JavaWeb学习总结-09 JDBC 学习和使用

  确保mysql 服务在运行状态。

JavaWeb学习总结-09 JDBC 学习和使用

1) 在mysql中创建一个库,并创建users表和插入表的数据。SQL脚本如下。

create database jdbcStudy character set utf8 ;

use jdbcStudy;

create table users(    id int primary key AUTO_INCREMENT,    name varchar(40),    password varchar(40),    email varchar(60),    birthday date)ENGINE=InnoDB  DEFAULT CHARSET=utf8;
insert into users(id,name,password,email,birthday) values(,','zs@163.com','2016-09-01');
insert into users(id,name,password,email,birthday) values(,','lisi@163.com','2016-09-02');
insert into users(id,name,password,email,birthday) values(,','wangwu@163.com','2016-09-03');

  建表中使用的数据库引擎为 InnoDB,InnoDB的好处 可以参考Mysql 存储引擎中InnoDB与Myisam的主要区别。默认字符集为utf-8,避免中文乱码。主键递增,从1开始计数。

实验:

  a.插入多条记录后,使用delete命令删除记录,在插入记录,id的初始值是多少?

  a.插入多条记录后,使用truncate命令删除记录,在插入记录,id的初始值是多少?

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

JavaWeb学习总结-09 JDBC 学习和使用

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

package com.mobile.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.log4j.Logger;

public class TestJdbc1 {

    public Logger logger = Logger.getLogger(TestJdbc1.class);

    public static void main(String[] args) throws Exception {
        // 要连接的数据库URL
        String url = "jdbc:mysql://localhost:3306/jdbcStudy?useUnicode=true&characterEncoding=utf8";
        // 连接的数据库时使用的用户名
        String username = "root";
        // 连接的数据库时使用的密码
        String password = ";

        // 1.加载驱动
        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("------ user ------------");
            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"));
            System.out.println();
        }

        // 6.关闭链接,释放资源
        rs.close();
        st.close();
        conn.close();

    }

}

2.2 DriverManager类

  Jdbc程序中的Class.forName()设置数据库驱动,DriverManager 用于加载驱动,并 创建与数据库的链接,这个API的常用方法:

Class.forName("数据库驱动名称");
DriverManager.getConnection(url, user, password),

2.3 数据库URL

 JavaWeb学习总结-09 JDBC 学习和使用 

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

  常用数据库URL地址的写法:

  • Oracle写法:jdbc:oracle:thin:@localhost:1521:sid
  • SqlServer写法:jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid
  • MySql写法:jdbc:mysql://localhost:3306/sid

  也可以参考常用数据库 JDBC URL 格式

2.4、Connection类

  Jdbc程序中的Connection,它用于代表数据库的链接,Collection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:

  • createStatement():创建向数据库发送sql的statement对象。
  • prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
  • prepareCall(sql):创建执行存储过程的callableStatement对象。
  • setAutoCommit(boolean autoCommit):设置事务是否自动提交。
  • commit() :在链接上提交事务。
  • rollback() :在此链接上回滚事务。

2.5 Statement类

  Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:

  • executeQuery(String sql) :用于向数据发送查询语句。
  • executeUpdate(String sql):用于向数据库发送insert、update或delete语句
  • execute(String sql):用于向数据库发送任意sql语句
  • addBatch(String sql) :把多条sql语句放到一个批处理中。
  • executeBatch():向数据库发送一批sql语句执行。

2.6、ResultSet类

  Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
  ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:

  获取任意类型的数据

  • getObject(int index)
  • getObject(string columnName)

  获取指定类型的数据,例如:

  • getString(int index)
  • getString(String columnName)

2.7、释放资源

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

rs.close();
st.close();
conn.close();

2.8 获得MySQL 数据库自动生成的主键

1 测试脚本

//建立数据库 jdbcstudycreate database jdbcstudy;//使用建立的数据库 jdbcstudyuse jdbcstudy;

DROP TABLE IF EXISTS `person`;
CREATE TABLE `person` (
  `id` ) NOT NULL AUTO_INCREMENT,
  `name` varchar() NOT NULL,
  `password` varchar() NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2 测试代码

1) 获得一个链接句柄 connection

// 取得一个Connction
private Connection getConnection() {
    String driver = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://127.0.0.1:3306/jdbcstudy";
    Connection conn = null;
    try {
        Class.forName(driver);
        conn = DriverManager.getConnection(url, ");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return conn;
}

2) 测试插入一条记录 record,使用表的自增主键

public void runInsertData1() {
    Connection conn = null;
    PreparedStatement pst = null;
    ResultSet rs = null;

    conn = getConnection();
    String sql = "insert into person( name, password) values(  ?,?)";
    try {
        pst = conn.prepareStatement(sql);
        pst.setString(, "wangwu");
        pst.setString(, ");
        pst.executeUpdate();
        // 获取数据库自动生成的主键
        rs = pst.getGeneratedKeys();
        String key = null;

        if (rs.next()) {
            key = rs.getString();
        }
        System.out.println("key=" + key);

    } catch (SQLException e) {
        e.printStackTrace();
    }
}

3)测试插入一条记录 record,确定记录的id.

public void runInsertData2() {
    Connection conn = null;
    PreparedStatement pst = null;
    ResultSet rs = null;

    conn = getConnection();
    String sql = "insert into person( id, name, password) values( ?,?,?)";
    try {
        pst = conn.prepareStatement(sql);
        Random random = new Random();
        String id = random.nextInt()+"";

        pst.setString(, id);
        pst.setString(, "wangwu");
        pst.setString(, ");
        pst.executeUpdate();
        // 获取数据库自动生成的主键
        rs = pst.getGeneratedKeys();
        String key = null;

        if (rs.next()) {
            key = rs.getString();
        }
        System.out.println("key=" + key);

    } catch (SQLException e) {
        e.printStackTrace();
    }
}

参考资料:

常用数据库 JDBC URL 格式

默认字符集为utf-8,避免中文乱码。

JavaWeb学习总结-09 JDBC 学习和使用的更多相关文章

  1. Javaweb学习笔记7—JDBC技术

      今天来讲javaweb的第7阶段学习. JDBC技术,关于JDBC本篇博客只介绍了它的一部分,后面博客会更加深入探讨. 老规矩,首先先用一张思维导图来展现今天的博客内容.   ps:我的思维是用的 ...

  2. 2045331 《Java程序设计》第09周学习总结

    2045331 <Java程序设计>第09周学习总结 教材学习内容总结 第十六章 整合数据库 16.1.1JDBC简介 1.JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接 ...

  3. 20145219 《Java程序设计》第09周学习总结

    20145219 <Java程序设计>第09周学习总结 教材学习内容总结 JDBC入门 JDBC简介 1.JDBC是java联机数据库的标准规范,它定义了一组标准类与接口,应用程序需要联机 ...

  4. JavaWeb学习总结-04 Servlet 学习和使用

    一 Servlet 1 Servlet概念 Servlet时运行在服务器端的Java程序. Servlet的框架核心是 javax.servlet.Servlet 接口. 所有自定义的Servlet都 ...

  5. JDBC学习笔记&lpar;2&rpar;——Statement和ResultSet

    Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...

  6. JDBC学习笔记&lpar;1&rpar;——JDBC概述

    JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...

  7. 【转】JDBC学习笔记&lpar;2&rpar;——Statement和ResultSet

    转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数 ...

  8. 【转】JDBC学习笔记&lpar;1&rpar;——JDBC概述

    转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...

  9. jdbc学习总结

    jdbc学习总结:   一.简介: jdbc,直译为java连接数据库.实际为java为很好的操作数据库而提供的一套接口,接口的实现(即驱动)由各个数据库厂商提供.   二.知识要点: 连接5要素,3 ...

随机推荐

  1. SQL 大数据查询如何进行优化?

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而 ...

  2. 使用sql创建表并添加注释

    Create table T_ErrorLogTable_tb ( ELTID int identity(1,1) primary key,--编号 ELTTime date,--错误发生日期 ELT ...

  3. freeCMS学习网站

    https://code.google.com/p/freecms/downloads/list

  4. 序列化json对象,通过ajax传入asp&period;net mvc后台

    序列化json对象,通过ajax传入asp.net mvc后台 序列化json对象,通过ajax传入asp.net mvc后台   今天遇到一个问题,准备把组织好的json对象通过jquery.aja ...

  5. 0&period;Java并发包系列开篇

    在我们想要谈论Java并发包(java.util.concurrent)的时候,这是一个头疼的问题,却又是每个Java工程师不得不掌握的一项技能.一直以来都想写一个Java并发包系列,无奈迟迟没有动手 ...

  6. 教大家怎样给UITextView加入placeholder扩展

    怎样扩展UITextView以追加placeholder功能呢? 我们的需求是:追加placeholder功能 方案讨论: 通过继承UITextView的方式 通过扩展UITextView的方式 分析 ...

  7. vpshere6 ESXI 禁止登陆 &quot&semi;执行此操作的权限被拒绝&quot&semi;

    vCenter在添加ESXI主机时,锁定模式选择“正常”,导致无法直接登陆ESXI宿主机,现象如下: 解决方法:

  8. Docker 推送镜像到hub&period;docker

    1.Docker镜像文件:lails.server.demo:1.0, 2.登录Docker:docker login[根据提示输入用户名/密码] 3.执行:docker push lails.ser ...

  9. Lepus监控之Oracle配置

    1.安装cx_Oracle a.官网下载客户端组件包 oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpmoracle-instantclien ...

  10. 20145104张家明 《Java程序设计》第9周学习总结

    20145104张家明 <Java程序设计>第9周学习总结 教材学习内容总结 第16章 -撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找. -JDBC目的:让Java ...