java架构说明书_JDBC 使用说明(流程、架构、编程)

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

执行流程:

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

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

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

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

双层

86bca4898595c599a2fbbb256d9ca0ec.gif

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

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

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

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

三层

77848ec64047154e298de708eaffac19.gif

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

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

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

历史趋势: 以往,因性能问题,中间层都用 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;

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值