Java + JDBC CRUD操作示例

JDBC:java database connection ,java数据库连接 JDBC 是java应用程序和数据库之间的桥梁。

JDBC API 是一个Java 的API 它可以

  • 连接到数据库
  • 创建SQL或MySQL语句
  • 在数据库中执行SQL或MySQL查询
  • 查看和修改数据库中的数据记录

JDBC特点

在开发应用的持久层时,可选的持久化技术有多种,包括:JDBC,JPA,Hibernate等。JDBC的特点:

  1. 使用SQL作为数据库查询语言,不要再掌握其他框架的查询语言。
  2. JDBC允许使用数据库的所有特性,其他框架不行。
  3. 相对于持久层框架,JDBC能够让我们在更低的层次上处理数据,我们可以完全控制应用程序如何读取和管理数据,包括访问和管理数据库中单独的列。这种细粒度的数据访问方式在很多应用程序中是很方便的

使用JDBC所提供的直接操作数据库的API 进行增删改查

这儿增删改查 用的是PreparedStatement,在sql中它使用?占位符 代替参数值。而不是:studentName这种。

参考 PreparedStatement预编译无法用?占位符替换表名和字段名

需要负责处理和数据访问相关的所有事情,包括 管理数据库资源和处理异常,其实开发时最好只关注于业务代码。假设应用中已经有实体类Spitter,类中有属性id,Username和Password。数据库中有表s_pitter,表中有列id,username和password。

实体类和数据库表之间的映射

     如果使用JDBC的话,那实体类和数据表之间的映射就需要我们自己实现了。

     自定义一个实体类,然后自定义一个建表的脚本

1.使用JDBC操作数据库实现insert

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;

public class JdbcTest {
    public void create(Spitter entity) {

        Connection conn = null;
        PreparedStatement ps = null;

        // 1.准备inser sql语句
        StringBuffer buf = new StringBuffer();
        buf.append("insert into s_pitter      ");
        buf.append("  (username,              ");
        buf.append("   password,              ");
        buf.append("   )values(               ");
        for (int i = 0; i < 2; i++) {
            buf.append(i == 0 ? "?" : ",?");
        }
        buf.append(")");

        int pos = 1;
        try {
            // 2.获取连接,获取连接 这一步在不同应用中不一样的。
            conn = Connector.getOracleConnection();
            // 3.创建sql语句
            ps = conn.prepareStatement(buf.toString());
            // 4.绑定参数到sql
            if (entity.getUsername() != null) {
                ps.setString(pos++, entity.getUsername());
            } else {
                ps.setNull(pos++, Types.NUMERIC);
            }
            if (entity.getPassword() != null) {
                ps.setString(pos++, entity.getPassword());
            } else {
                ps.setNull(pos++, Types.NUMERIC);
            }
            // 5.执行sql
            ps.executeUpdate();

        } catch (SQLException e) {  //6.处理异常
            // do something
        } finally {
            // 7.关闭数据库连接,释放资源
            try {
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) { //6.处理异常
                // do something
            }
        }

    }

}

 

2.使用JDBC操作数据库实现update

issert和update方法 只是1准备sql和3绑定参数的操作不一样,这也是我们需要关注的。但是在JDBC里要完成insert和update,其它操作(管理数据库资源和处理异常)也是必须的。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;

public class JdbcTest {
    public void update(Spitter entity) {

        Connection conn = null;
        PreparedStatement ps = null;

        // 1.准备update sql语句
        StringBuffer buf = new StringBuffer();
        buf.append("update t_pitter set      ");
        buf.append("    username      = ?,    ");
        buf.append("    password     = ?,    ");
        buf.append("    where     id      = ?    ");

        int pos = 1;
        try {
            // 2.获取连接,获取连接 这一步在不同应用中不一样的。
            conn = Connector.getOracleConnection();
            // 3.创建sql语句
            ps = conn.prepareStatement(buf.toString());
            // 4.绑定参数到sql
            if (entity.getUsername() != null) {
                ps.setString(pos++, entity.getUsername());
            } else {
                ps.setNull(pos++, Types.NUMERIC);
            }
            if (entity.getPassword() != null) {
                ps.setString(pos++, entity.getPassword());
            } else {
                ps.setNull(pos++, Types.NUMERIC);
            }
            if (entity.getId() != null) {
                ps.setLong(pos++, entity.getId());
            } else {
                ps.setNull(pos++, Types.NUMERIC);
            }
            // 5.执行sql
            ps.executeUpdate();

        } catch (SQLException e) {  //6.处理异常
            // do something
        } finally {
            // 7.关闭数据库连接,释放资源
            try {
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) { //6.处理异常
                // do something
            }
        }

    }

}

3.使用JDBC操作数据库实现delete

也是只有准备delete sql语句和绑定参数不一样

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;

public class JdbcTest {
    public void delete(Long id) {

        Connection conn = null;
        PreparedStatement ps = null;

        // 1.准备delete sql语句
        String sql = "DELETE FROM t_spitter T WHERE T.id= ?"

        int pos = 1;
        try {
            // 2.获取连接,获取连接 这一步在不同应用中不一样的。
            conn = Connector.getOracleConnection();
            // 3.创建sql语句
            ps = conn.prepareStatement(sql);
            // 4.绑定参数到sql            
            ps.setLong(1, id);
            // 5.执行sql
            ps.executeUpdate();

        } catch (SQLException e) {  //6.处理异常
            // do something
        } finally {
            // 7.关闭数据库连接,释放资源
            try {
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) { //6.处理异常
                // do something
            }
        }

    }

}

 4.使用JDBC操作数据库实现select

这里有两点注意:1.把sql查询结果转成实体类。2.如果查询结果是list在处理查询结果是用while而不是if

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import javax.sql.DataSource;
import java.sql.ResultSet;
public class JdbcTest {
    public void findById(Long id) {

        Connection conn = null;
        PreparedStatement ps = null;
        Spitter spitter = null;
        ResultSet rs = null;
        // 1.准备select sql语句
        String sql = "select *  FROM t_spitter T WHERE T.id= ?";

        int pos = 1;
        try {
            // 2.获取连接,获取连接 这一步在不同应用中不一样的。
            conn = Connector.getOracleConnection();
            // 3.创建sql语句
            ps = conn.prepareStatement(sql);
            // 4.绑定参数到sql
            ps.setLong(1, id);
            // 5.执行sql 处理查询结果 转成实体类
            rs = ps.executeQuery();
            if (rs.next()) {
                spitter = this.fillEntity(rs);
            }
        } catch (SQLException e) { // 6.处理异常
            // do something
        } finally {
            // 7.关闭数据库连接,释放资源
            try {
                if (ps != null) {
                    ps.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) { // 6.处理异常
                // do something
            }
        }

    }

}
import java.sql.ResultSet;
//把查询结果ResultSet类型转为实体类
public Spitter fillEntity(ResultSet rs) throws SQLException  {
    Spitter spitter = new Spitter();
    spitter.setId(rs.getLong("id"));
    spitter.setUsername(rs.getString("username"));
    spitter.setPassword(rs.getString("password"));
    return spitter;
}
2.如果查询结果是list在处理查询结果是用while而不是if
List<Spitter> spitterList = new ArrayList();
while (rs.next()) {
    spitterList.add(this.fillEntity(rs))
}

 

posted on 2022-04-08 18:04  dreamstar  阅读(134)  评论(0编辑  收藏  举报