JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。

执行流程:

•连接数据源,如:数据库。

•为数据库传递查询和更新指令。

•处理数据库响应并返回的结果。

JDBC 架构分为双层架构和三层架构。

双层

作用:此架构中,Java Applet 或应用直接访问数据源。

条件:要求 Driver 能与访问的数据库交互。

机制:用户命令传给数据库或其他数据源,随之结果被返回。

部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。

三层

侧架构特殊之处在于,引入中间层服务。

流程:命令和结构都会经过该层。

吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。

历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,JDBC随之被重视。

JDBC 编程步骤

加载驱动程序:

Class.forName(driverClass)

//加载MySql驱动

Class.forName("com.mysql.jdbc.Driver")

//加载Oracle驱动

Class.forName("oracle.jdbc.driver.OracleDriver")

获得数据库连接:

DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");

创建Statement\PreparedStatement对象:

conn.createStatement();

conn.prepareStatement(sql);

完整实例

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

public class DbUtil {

public static final String URL = "jdbc:mysql://localhost:3306/imooc";

public static final String USER = "liulx";

public static final String PASSWORD = "123456";

public static void main(String[] args) throws Exception {

//1.加载驱动程序

Class.forName("com.mysql.jdbc.Driver");

//2. 获得数据库连接

Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);

//3.操作数据库,实现增删改查

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");

//如果有数据,rs.next()返回true

while(rs.next()){

System.out.println(rs.getString("user_name")+" 年龄:"+rs.getInt("age"));

}

}

}

增删改查

public class DbUtil {

public static final String URL = "jdbc:mysql://localhost:3306/imooc";

public static final String USER = "liulx";

public static final String PASSWORD = "123456";

private static Connection conn = null;

static{

try {

//1.加载驱动程序

Class.forName("com.mysql.jdbc.Driver");

//2. 获得数据库连接

conn = DriverManager.getConnection(URL, USER, PASSWORD);

} catch (ClassNotFoundException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

}

public static Connection getConnection(){

return conn;

}

}

//模型

package liulx.model;

import java.util.Date;

public class Goddess {

private Integer id;

private String user_name;

private Integer sex;

private Integer age;

private Date birthday; //注意用的是java.util.Date

private String email;

private String mobile;

private String create_user;

private String update_user;

private Date create_date;

private Date update_date;

private Integer isDel;

//getter setter方法。。。

}

//---------dao层--------------

package liulx.dao;

import liulx.db.DbUtil;

import liulx.model.Goddess;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.ArrayList;

import java.util.List;

public class GoddessDao {

//增加

public void addGoddess(Goddess g) throws SQLException {

//获取连接

Connection conn = DbUtil.getConnection();

//sql

String sql = "INSERT INTO imooc_goddess(user_name, sex, age, birthday, email, mobile,"+

"create_user, create_date, update_user, update_date, isdel)"

+"values("+"?,?,?,?,?,?,?,CURRENT_DATE(),?,CURRENT_DATE(),?)";

//预编译

PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行

//传参

ptmt.setString(1, g.getUser_name());

ptmt.setInt(2, g.getSex());

ptmt.setInt(3, g.getAge());

ptmt.setDate(4, new Date(g.getBirthday().getTime()));

ptmt.setString(5, g.getEmail());

ptmt.setString(6, g.getMobile());

ptmt.setString(7, g.getCreate_user());

ptmt.setString(8, g.getUpdate_user());

ptmt.setInt(9, g.getIsDel());

//执行

ptmt.execute();

}

public void updateGoddess(){

//获取连接

Connection conn = DbUtil.getConnection();

//sql, 每行加空格

String sql = "UPDATE imooc_goddess" +

" set user_name=?, sex=?, age=?, birthday=?, email=?, mobile=?,"+

" update_user=?, update_date=CURRENT_DATE(), isdel=? "+

" where id=?";

//预编译

PreparedStatement ptmt = conn.prepareStatement(sql); //预编译SQL,减少sql执行

//传参

ptmt.setString(1, g.getUser_name());

ptmt.setInt(2, g.getSex());

ptmt.setInt(3, g.getAge());

ptmt.setDate(4, new Date(g.getBirthday().getTime()));

ptmt.setString(5, g.getEmail());

ptmt.setString(6, g.getMobile());

ptmt.setString(7, g.getUpdate_user());

ptmt.setInt(8, g.getIsDel());

ptmt.setInt(9, g.getId());

//执行

ptmt.execute();

}

public void delGoddess(){

//获取连接

Connection conn = DbUtil.getConnection();

//sql, 每行加空格

String sql = "delete from imooc_goddess where id=?";

//预编译SQL,减少sql执行

PreparedStatement ptmt = conn.prepareStatement(sql);

//传参

ptmt.setInt(1, id);

//执行

ptmt.execute();

}

public List query() throws SQLException {

Connection conn = DbUtil.getConnection();

Statement stmt = conn.createStatement();

ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");

List gs = new ArrayList();

Goddess g = null;

while(rs.next()){

g = new Goddess();

g.setUser_name(rs.getString("user_name"));

g.setAge(rs.getInt("age"));

gs.add(g);

}

return gs;

}

public Goddess get(){

Goddess g = null;

//获取连接

Connection conn = DbUtil.getConnection();

//sql, 每行加空格

String sql = "select * from imooc_goddess where id=?";

//预编译SQL,减少sql执行

PreparedStatement ptmt = conn.prepareStatement(sql);

//传参

ptmt.setInt(1, id);

//执行

ResultSet rs = ptmt.executeQuery();

while(rs.next()){

g = new Goddess();

g.setId(rs.getInt("id"));

g.setUser_name(rs.getString("user_name"));

g.setAge(rs.getInt("age"));

g.setSex(rs.getInt("sex"));

g.setBirthday(rs.getDate("birthday"));

g.setEmail(rs.getString("email"));

g.setMobile(rs.getString("mobile"));

g.setCreate_date(rs.getDate("create_date"));

g.setCreate_user(rs.getString("create_user"));

g.setUpdate_date(rs.getDate("update_date"));

g.setUpdate_user(rs.getString("update_user"));

g.setIsDel(rs.getInt("isdel"));

}

return g;

}

}

java架构说明书_JDBC 使用说明(流程、架构、编程)相关推荐

  1. Netty框架架构解析+API+运行流程+网络编程文章集锦

    新手入门:目前为止最透彻的的Netty高性能原理和框架架构解析 <!-- 作者区域 --><div class="author"><a class=& ...

  2. Java生鲜电商平台-电商支付流程架构实战

    Java生鲜电商平台-电商支付流程架构实战 说明:我一直秉承的就是接地气的业务架构实战.我的文章都有一个这样的核心. 1. 业务场景 2. 解决问题. 3.代码实现. 4.代码重构. 5.总结与复盘. ...

  3. Java架构技术文档:并发编程+设计模式+常用框架+JVM+精选视频

    本篇文章是我们整理的一份架构师的成长路线,包括了并发编程.设计模式.常用框架.中间件.微服务与分布式.常用工具.JVM.MySQL.数据结构与算法,还有架构师精选视频.架构师成长路线高清大图. 又是新 ...

  4. 从普通JAVA程序员到阿里P8架构师,他用了六年

    工作年限:8 年服务公司:4 家(含四大门户中的两家)最近职业:Java 架构师职场关键词:社交平台.高并发系统架构设计.技术团队管理.多款从零到一的产品城市! 六年间,这位职人呆过四大门户中的两家, ...

  5. Spark SQL架构工作原理及流程解析

    Spark SQL架构工作原理及流程解析,spark sql从shark发展而来,Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析.逻辑执行计划翻译.执行计划优化等逻辑. Sp ...

  6. Java如何从入门进阶到架构师

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希 ...

  7. Java架构师,大数据架构师,高并发设计模式,机器学习知识点分享

    第一章:java精品课程目录大全 1.亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 1课程介绍以及高并发高可用复杂系统中的缓存架构有哪些东西?32分钟 2基于大型电商网站中的商品详情页系统贯 ...

  8. 游戏公司组成架构和游戏开发流程简述

    游戏公司组成架构和游戏开发流程简述 [基本概念] 游戏公司一般是指游戏开发公司或游戏发行.代理公司. 那游戏公司开发游戏需要哪些技术人员?简单的说:需要游戏造型.游戏动画.3D美工.纹理师.原画设计师 ...

  9. 我的WCF之旅(7):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的继承...

    当今的IT领域,SOA已经成为了一个非常时髦的词,对SOA风靡的程度已经让很多人对SOA,对面向服务产生误解.其中很大一部分人甚至认为面向服务将是面向对象的终结,现在的面向对象将会被面向服务完全代替. ...

最新文章

  1. linux命令积累!
  2. TensorFlow中的random_normal()函数
  3. ElasticSearch小操之Marvel,Sense
  4. 计算机科学与技术单片机55,关于计算机技术与科学专业的考研信息
  5. OpenResty-Nginx安装目录介绍
  6. 检测对抗样本_避免使用对抗性T恤进行检测
  7. 从C#到TypeScript - Generator
  8. java命令运行jar包出现返回值的乱码问题,设置启动编码方式
  9. 目标检测————主干网络是否应该选用DenseNet(提问)
  10. java 中 class 对象_java中Class对象详解
  11. java1.6升级1.7_jdk从1.6升级到1.7可能会遇到的Version问题
  12. php 函数频率,这是一些使用频率比较高的php函数……
  13. .net网页的生命周期列表
  14. 怎么提高企业微信加人的通过率,让企业微信加更多客户?快速加人,引流拓客有什么技巧(企微运营干货)
  15. 作业帮一面+二面+hr面
  16. 服务器基础知识全解(汇总版)
  17. php代码出现notice,PHP提示Notice: Undefined variable的解决办法
  18. golang数据结构_Go数据结构的完整指南
  19. 有道笔记在Ubuntu上的安装
  20. 一些标签属性--aria-label--rel属性

热门文章

  1. 讲解开源项目:用 Python 生成有“灵魂”的二维码
  2. ModelState对象
  3. 在弹窗中新建一个遮罩层
  4. Zabbix---4 监控mysql服务并配置动作
  5. 网络设备常用排障命令——Juniper vyatta 大河SDN
  6. 华为交换机 consolep密码和vty密码配置telnet,ssh
  7. linux 病毒 sfewfesfs
  8. linux服务器中用U盘或者移动硬盘拷贝数据
  9. zabbix agent报错 :cannot connect to [[127.0.0.1]:10051]: [111] Connection refused
  10. 在Shell中,“$“和““的作用