简单操作步骤

  • 想要用Java语言来实现对数据库中数据的处理要实现以下3个步骤:
    1 连接数据库
    2 将SQL语句发送到数据库
    3 执行SQL语句

  • 举例说明
    当前数据库中有表students,表中有6列分别是:
    1 学号(Id)
    2 姓名(Name)
    3 性别(Sex)
    4 地址(Address)
    5 电话(Phone)
    6 专业(Dept)
    在Java中,我们把学生信息封装成Info_Student类

涉及的封装类

  • Connection 该类对象与特定的数据库连接(会话)。能提供表述所连接的数据库其中的表、所支持的SQL语法、存储过程、此连接功能等信息。
  • 构造方法
    通过JDBCDriverManagergetConnection()函数获得
    Connection对象
Connection connect = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/students?useUnicode=true&characterEncoding=utf-8", "root", "");
  • getConnection()方法
    试图建立到给定数据库 URL 的连接。DriverManager 试图从已注册的 JDBC 驱动程序集中选择一个适当的驱动程序。
  • public static Connection getConnection
    (String url,
    String user,
    String password)
    throws SQLException
    /**    参数:
    *      url - jdbc:subprotocol:subname 形式的数据库 url
    *      user - 数据库用户,连接是为该用户建立的
    *      password - 用户的密码 
    *  返回:
    *      到 URL 的连接 
    *  抛出: 
    *      SQLException - 如果发生数据库访问错误
    */
  • prepareStatement()方法
    创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
  • PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);

  • PreparedStatement 该类对象表示编译的SQL语句的对象,SQL语句被编译并存储在PreparedStatement对象中,然后可以使用此对象多次高效地执行该语句。
  • 构造方法
    使用prepareStatement()方法实例化

  • 设置 IN 参数值的设置方法(setString(),setInt()…)
    用于设置 IN 参数值的设置方法(setShort、setString 等等)必须指定与输入参数的已定义 SQL 类型兼容的类型。例如,如果 IN 参数具有 SQL 类型 INTEGER,那么应该使用 setInt 方法。 如果需要任意参数类型转换,使用 setObject 方法时应该将目标 SQL 类型作为其参数。 在以下设置参数的示例中,con 表示一个活动连接:
PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES
    SET SALARY = ? WHERE ID = ?");
pstmt.setBigDecimal(1, 153833.00)
pstmt.setInt(2, 110592)
  • execute()方法
    在此 PreparedStatement 对象中执行 SQL 语句,该语句可以是任何种类的 SQL 语句。一些预处理过的语句返回多个结果,execute 方法处理这些复杂的语句,executeQuery 和 executeUpdate 处理形式更简单的语句。
  • ptmt.execute();

具体代码实现

  • 增加
public void add(Info_student student) throws SQLException{
        // 与特定数据库的连接(会话)。
        Connection conn =  (Connection) DB_Helper.getConnection();

        String sql = "insert into student(Sno,Sname,Ssex,Saddress,Sphone,Sdept) values(?,?,?,?,?,?)";

        // 创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库。
        PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);
        /* 
         * void setBigDecimal(int parameterIndex,BigDecimal x)throws SQLException
         * 将指定参数设置为给定 Java String 值。在将此值发送给数据库时,驱动程序将它转换成一个 SQL VARCHAR 
         * 或 LONGVARCHAR 值(取决于该参数相对于驱动程序在 VARCHAR 值上的限制的大小)。 
         */
        ptmt.setString(1, student.getId());
        ptmt.setString(2, student.getName());
        ptmt.setString(3, student.getSex());
        ptmt.setString(4, student.getAddress());
        ptmt.setString(5, student.getPhone());
        ptmt.setString(6, student.getDept());

        // 在此 PreparedStatement 对象中执行 SQL 语句
        ptmt.execute();
    }

  • 删除
public void delete(String id) throws SQLException{
        Connection conn  = (Connection) DB_Helper.getConnection();
        String sql = "delete from student where Sno=?";
        PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);

        ptmt.setString(1, id);

        ptmt.execute();
    }

  • 更新
public void update(Info_student student) throws SQLException{
        Connection conn  = (Connection) DB_Helper.getConnection();
        String sql = "update student set Sname=?,Ssex=?,Saddress=?,Sphone=?,Sdept=? where Sno=?";

        PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);
        ptmt.setString(1, student.getName());
        ptmt.setString(2, student.getSex());
        ptmt.setString(3, student.getAddress());
        ptmt.setString(4, student.getPhone());
        ptmt.setString(5, student.getDept());
        ptmt.setString(6, student.getId());

        ptmt.execute();
    }

  • 查询
public Info_student search(String id) throws SQLException{
        Info_student student = null;

        Connection conn  = (Connection) DB_Helper.getConnection();
        String sql = "select * from student where Sno=?";
        PreparedStatement ptmt = (PreparedStatement) conn.prepareStatement(sql);

        ptmt.setString(1, id);

        /*
         * ResultSet executeQuery()throws SQLException
         * 在此 PreparedStatement 对象中执行 SQL 查询,并返回该查询生成的 ResultSet 对象。
         */

        /*
         * public interface ResultSet extends Wrapper
         * 表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。 ResultSet 对象具有指向其当前数据行的光标。
         * 最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时
         * 返回 false,所以可以在 while 循环中使用它来迭代结果集。 
         * 
         */
        ResultSet rs = ptmt.executeQuery();

        /*
         * boolean next()throws SQLException
         * 将光标从当前位置向前移一行。
         * ResultSet 光标最初位于第一行之前;
         * 第一次调用 next 方法使第一行成为当前行;
         * 第二次调用使第二行成为当前行,依此类推。 
         */

        while(rs.next()){
            student = new Info_student();
            student.setId(rs.getString("Sno"));
            student.setName(rs.getString("Sname"));
            student.setSex(rs.getString("Ssex"));
            student.setAddress(rs.getString("Saddress"));

            student.setPhone(rs.getString("Sphone"));
            student.setDept(rs.getString("Sdept"));
        }
        return student;

    }