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

JDBC(使用JDBC对数据库进行增删改查)

程序员文章站 2022-05-06 21:37:59
...

JDBC(使用JDBC对数据库进行增删改查)

statement对象

在java中要完成对数据的增加、删除、改动和查看,就需要通过statement对象向数据库发送增删改差语句。statement对象在JDBC三种就是用于向数据库发送SQL语句。

statement对象的executeUpdate方法可以向数据库发送增、删、改语句,执行之后返回数据库中发生改动行数的整数。

  1. 代码实现使用executeUpdate(String sql)方法完成数据添加操作;

    Connection conn = DriverManager.getConnection(url, user, password);
    Statement st = conn.createStatement();
    String sql = "insert into user(….) values(…..) "; 
    int num = st.executeUpdate(sql);
    if(num>0){System.out.println("插入成功!!!");}
    
  2. 代码实现使用executeUpdate(String sql)方法完成数据修改操作;

    Connection conn = DriverManager.getConnection(url, user, password);
    Statement st = conn.createStatement();
    String sql = "update user set name=‘’ where name=‘’"; 
    int num = st.executeUpdate(sql);
    if(num>0){System.out.println("修改成功!!!");}
    
  3. 代码实现使用executeUpdate(String sql)方法完成数据删除操作;

    Connection conn = DriverManager.getConnection(url, user, password);
    Statement st = conn.createStatement();
    String sql = "delete from user where id=1; 
    int num = st.executeUpdate(sql);
    if(num>0){System.out.println("删除成功!!!");}
    

statement对象的executeQuery方法可以向数据库发送查询语句,执行后返回代表查询结果的ResultSet对象。

  1. 代码实现使用executeQuery(String sql)方法完成数据查询操作;

    Connection conn = DriverManager.getConnection(url, user, password);
    Statement st = conn.createStatement();
    ResultSet res = sta.executeQuery( "select Studentno,StudentName,Sex,GradeId from student");
    while(rs.next()){//根据获取列的数据类型,分别调用rs的相应方法映射到java对象中,如:
        System.out.println(res.getObject("Studentno"));
        System.out.println(res.getObject("StudentName"));
        System.out.println(res.getObject("Sex"));
        System.out.println(res.getObject("GradeId"));
    }
    

使用java编写JdbcUtils工具类

  1. 在mysql中创建一个数据库,新建数据表

    create database `school`; 
    use `school`;
    create table `student`(
    `id` int primary key,
    `name` varchar(40),
    `password` varchar(40),
    `email` varchar(60),
    `birthday` date
    );
    
  2. 新建web项目,导入MySQL数据库驱动;

  3. 创建db.properties文件,在db.properties中编写MySQL数据库的连接信息;

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/school
    user=root
    password=123456
    
  4. 编写一个JdbcUtils工具类,用于连接数据库,获取数据库连接和释放数据库连接;

    package com.david.utils;
    
    import java.io.InputStream;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Properties;
    
    public class JdbcUtils {
        private static String driver = null;
        private static String url = null;
        private static String username = null;
        private static String password = null;
        static{
            try{
                //读取db.properties文件中的数据库连接信息
                InputStream in=JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");
                Properties prop = new Properties();
                prop.load(in);
                //获取数据库连接驱动
                driver = prop.getProperty("driver");
                //获取数据库连接URL地址
                url = prop.getProperty("url");
                //获取数据库连接用户名
                username = prop.getProperty("username");
                //获取数据库连接密码
                password = prop.getProperty("password");
                //加载数据库驱动
                Class.forName(driver);
            }catch (Exception e) {
                throw new ExceptionInInitializerError(e);
            }
        }
        public static Connection getConnection() throws SQLException{
            return DriverManager.getConnection(url, username,password);
        }
        public static void release(Connection conn,Statement st,ResultSet rs{
            if(rs!=null){
                try{
                    //关闭存储查询结果的ResultSet对象
                    rs.close();
                }catch (Exception e) {
                    e.printStackTrace();
                }
                rs = null;
            }
            if(st!=null){
                try{
                    //关闭负责执行SQL命令的Statement对象
                    st.close();
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
    
            if(conn!=null){
                try{
                    //关闭Connection数据库连接对象
                    conn.close();
                }catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
  5. 利用工具类中的方法和statement对象进行增删改查

    import org.junit.Test;
    
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    public class JdbcCRUDByStatement {
    @Test
    public void insert(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            conn = JdbcUtils.getConnection();
            st = conn.createStatement();
            String sql = "insert into student(id,name,password,email,birthday) values(4,'jack','12','[email protected]','1998-02-20')";
            int num = st.executeUpdate(sql);
            if(num>0){
                System.out.println("插入完成");
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
             JdbcUtils.release(conn, st, rs);
         }}
         @Test
         public void delete(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            conn = JdbcUtils.getConnection();
            String sql = "delete from student where id=4";
            st = conn.createStatement();
            int num = st.executeUpdate(sql);
            if(num>0){
                System.out.println("删除完成");
            }
        }catch (Exception e) {
            e.printStackTrace();
    
        }finally{
            JdbcUtils.release(conn, st, rs);
        }
        @Test
            public void update(){
            Connection conn = null;
            Statement st = null;
            ResultSet rs = null;
            try{
                conn = JdbcUtils.getConnection();
                String sql = "update student set name='David',email='[email protected]' where id=10";
                st = conn.createStatement();
                int num = st.executeUpdate(sql);
                if(num>0){
                    System.out.println("更新完成");
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            JdbcUtils.release(conn, st, rs);
        }
    }
    @Test
    public void find(){
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try{
            conn = JdbcUtils.getConnection();
            String sql = "select * from student where id=10";
            st = conn.createStatement();
            rs = st.executeQuery(sql);
            if(rs.next()){
                System.out.println(rs.getString("name"));
            }
        }catch (Exception e) {
        e.printStackTrace();
        }finally{
            JdbcUtils.release(conn, st, rs);
        }
    }
    }
    

PreparedStatement对象

PreperedStatement是Statement的子类,它的实例对象可以通过调用Connection.preparedStatement()方法获得,相对于Statement对象而言PreperedStatement类可以避免SQL注入的问题。Statement会使数据库频繁编译SQL,有些情况下会造成数据库缓冲区溢出。PreparedStatement可对SQL进行预编译,提高数据库的执行效率。并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。