JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的数据。
执行流程:
分为双层架构和三层架构。
作用:此架构中,Java Applet 或应用直接访问数据源。
条件:要求 Driver 能与访问的数据库交互。
机制:用户命令传给数据库或其他数据源,随之结果被返回。
部署:数据源可以在另一台机器上,用户通过网络连接,称为 C/S配置(可以是内联网或互联网)。
侧架构特殊之处在于,引入中间层服务。
流程:命令和结构都会经过该层。
吸引:可以增加企业数据的访问控制,以及多种类型的更新;另外,也可简化应用的部署,并在多数情况下有性能优势。
历史趋势: 以往,因性能问题,中间层都用 C 或 C++ 编写,随着优化编译器(将 Java 字节码 转为 高效的 特定机器码)和技术的发展,如EJB,Java 开始用于中间层的开发这也让 Java 的优势突显出现出来,使用 Java 作为服务器代码语言,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;
- }
- }