欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-06 13:28:43
jdbc api 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。 执行流程: •连接数据源,如:数据库。 •为数据库传递查询...

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

执行流程:

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

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

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

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

双层

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

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

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

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

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

三层

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

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

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

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

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