JDBC——Statement执行SQL语句的对象

Posted 风萧萧路漫漫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC——Statement执行SQL语句的对象相关的知识,希望对你有一定的参考价值。

Statement该对象用于执行静态SQL语句并返回它产生的结果。
表示所有的参数在生成SQL的时候都是拼接好的,容易产生SQL注入的问题

PreparedStatement对象是一个预编译的SQL语句。动态SQL

功能
1.执行SQL

3个方法

①方法:execute() 可以执行任意的SQL,用的不多了解
修饰/返回值类型:boolean

 

2.executeUpdate() 执行DML语句

方法:executeUpdate() 执行DML语句(insert、delete、update)增删改数据。不常使用:DDL语句(create、drop、alter)增删改表和库
修饰/返回值类型:int


返回值:执行DML语句受影响的行数。可以通过这个值来判断SQL语句是否执行成功>0执行成功,反之失败。
    执行DDL语句没有返回结果

插入一条数据

package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * insert插入
 * */
//        第一步不是导入驱动架包了,因为已经导入过了
public class JdbcDemo2 {
    public static void main(String[] args) {
        Statement stmt = null;
        Connection conn = null;
        try {
//        1.注册驱动,会抛出ClassNotFoundException异常(mysql5.0后可省略)
            Class.forName("com.mysql.jdbc.Driver");
//        2.获取Connection对象,会抛出SQLException异常(因为连接的是本机的数据库所以ip地址和端口号可以省略不写)
            conn= DriverManager.getConnection("jdbc:mysql:///myemployees","root","ROOT");
//        3.定义SQL
            String sql="insert into job_grades values(\'ma\',\'16789\',\'16789\');";
//        4.获取执行SQL的对象Staement
            stmt = conn.createStatement();
//        5.执行SQL(返回一个结果)
            int count = stmt.executeUpdate(sql);//影响的行数
//        6.处理结果
            System.out.println(count);
            if (count>0){
                System.out.println("添加成功");
            }else {
                System.out.println("添加失败");
            }
//        7.释放资源(如果第5步执行报错就不会执行下面的语句,下面的代码就不会正常执行)
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
//        8.所以应该在finally里释放资源
//            stmt.close();因为stmt不是全局变量,所以出了try的作用域就找不到了
//            先复制Statement stmt =,在等号后赋值为null
//            删除这句话中的“Statement” stmt = conn.createStatement();
//          stmt.close();
//            如果只这样写程序在执行第3步的时候报错,例如密码写错了之类的就会报空指针异常
//          所以先要判断
//            释放执行SQL的对象
            if (stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
//            还要释放数据库连接对象,再次执行上面的操作
            if (conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

 

 

修改插入的数据

package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * update修改
 * */
public class JdbcDemo3 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取数据库连接对象
            conn = DriverManager.getConnection("jdbc:mysql:///myemployees", "root", "ROOT");
            //3.定义SQL
            String sql ="update job_grades set highest_sal = \'999999\' where grade_level = \'ma\';";
            //4.获取执行SQL的对象
            stmt = conn.createStatement();
            //5.执行SQL
            int count = stmt.executeUpdate(sql);
            //6.处理返回结果
            System.out.println(count);
            if (count>0){
                System.out.println("修改成功");
            }else{
                System.out.println("修改失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7.释放资源
            if (stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

 

删除插入的数据

package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
* delete删除
* */
public class JdbcDemo4 {
    public static void main(String[] args) {
        //声明数据库连接对象
        Connection conn = null;
        //声明数据库执行对象
        Statement stmt = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取数据库连接对象
            conn = DriverManager.getConnection("jdbc:mysql:///myemployees", "root", "ROOT");
            //3.定义SQL
            String sql ="delete from job_grades where grade_level = \'ma\';";
            //4.获取执行SQL的对象
            stmt = conn.createStatement();
            //5.执行SQL
            int count = stmt.executeUpdate(sql);
            //6.处理返回结果
            System.out.println(count);
            if (count>0){
                System.out.println("删除成功");
            }else{
                System.out.println("删除失败");
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7.释放资源
            if (stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 1.executeUpdate() 执行DDL语句

package cn.itcast.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/*
* DDL语句
* */
public class JdbcDemo5 {
    public static void main(String[] args) {
        //声明数据库连接对象
        Connection conn = null;
        //声明数据库执行对象
        Statement stmt = null;
        try {
            //1.注册驱动
            Class.forName("com.mysql.jdbc.Driver");
            //2.获取数据库连接对象
            conn = DriverManager.getConnection("jdbc:mysql:///myemployees", "root", "ROOT");
            //3.定义SQL
            String sql ="create table stu (id int,name varchar(20));";
            //4.获取执行SQL的对象
            stmt = conn.createStatement();
            //5.执行SQL
            int count = stmt.executeUpdate(sql);
            //6.处理返回结果
            System.out.println(count);

        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //7.释放资源
            if (stmt != null){
                try {
                    stmt.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

 

 

 3.executeQuery()执行DDL语句

方法:executeQuery(String sql) 执行DQL语句(select)查询语句
修饰/返回值类型:ResultSet (结果集)

 

以上是关于JDBC——Statement执行SQL语句的对象的主要内容,如果未能解决你的问题,请参考以下文章

JDBC

简述JDBC中三种Statement对象的作用

JDBC statement的常用方法

JDBC 预编译语句对象

MYSQL 之 JDBC: 增删改查通过Statement执行更新操作

十八:使用JDBC进行批处理