首页 > 编程 > Java > 正文

JDBC 使用说明(流程、架构、编程)

2019-11-26 15:00:52
字体:
来源:转载
供稿:网友

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<Goddess> query() throws SQLException {  Connection conn = DbUtil.getConnection();  Statement stmt = conn.createStatement();  ResultSet rs = stmt.executeQuery("SELECT user_name, age FROM imooc_goddess");  List<Goddess> gs = new ArrayList<Goddess>();  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; }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表