Java_JDBC使用Statement和PreparedStatement

Posted 小企鹅推雪球!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java_JDBC使用Statement和PreparedStatement相关的知识,希望对你有一定的参考价值。

Statement接口完整的代码样例

package com.company;
import com.microsoft.sqlserver.jdbc.SQLServerDriver;

import java.sql.*;

public class JDBC_04 {
    public static void main(String[] args) throws Exception {
        final String JDBC_SqlDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // java连接 sql server的驱动
        final String DatabasesUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=stu"; // Java连接指定数据库地址的语句
        String USER = "SA"; // 登录到数据库的用户名
        String PASS = "123456"; // 登录密码

//        第二步 注册驱动程序,注册驱动程序有两种方式:
//              第一种使用 Class.forName() 注册驱动
//              第二种使用 registerDriver() 注册驱动

//        第一种注册方法:
//        Class.forName 注册驱动程序的方式是将驱动程序的类文件加载到内存中的过程,可以将其用作JDBC接口的实现,只需要在程序中注册一次即可
//        Class.forName(JDBC_SqlDriver);
//        第二种注册方法:
//       DriverManager.registerDriver()

        Driver myDriver = new SQLServerDriver();
        DriverManager.registerDriver(myDriver);

//        第三部:打开连接 :
        System.out.println("正在连接数据库。。。");
        Connection conn = null; // 创建连接对象
        conn = DriverManager.getConnection(DatabasesUrl,USER,PASS);

//        第四步:执行sql语句
        System.out.println("连接成功,准备执行sql语句");
//        创建 Statement 对象,用于执行sql语句
        Statement st;
        st = conn.createStatement(); // 创建执行对象Statement执行SQL语句,由Connection对象产生
//        定义执行的sql 语句
        String sql = "SELECT TOP(10) name, sex, nation From stuInfo"; // 查询10条数据
//       executeQuery() 方法用于在数据库中执行 sql 语句,同时将数据库响应的 sql 语句结果存放在 ResultSet 类对象中供我们使用
        ResultSet rs = st.executeQuery(sql);
//        int Sta = st.executeUpdate(sql); // 返回受 sql 语句执行影响的行数,使用 exceuteUpdate 执行预期会影响多行的 SQL 语句,例如 insert,update,delete
//        Boolean STA = st.execute(sql); // 如果可以检索到 ResultSet对象,则返回一个布尔值,true ,否则返回 dalse
//        System.out.println("受影响行数:"+Sta);
//        System.out.println(STA);



//        第五步:从结果集种提取数据,可以使用 getXXX()方法来检索数据
        while (rs.next()){
            String name  = rs.getString("name");
            String sex  = rs.getString("sex");
            String nation  = rs.getString("nation");
            System.out.println("name: " + name +"|" + "sex: " +"|"  + sex+ "nation:"  +"|" + nation);
        }

//        第六步:清理资源
        rs.close();//清理 返回结果集所占用的资源
        st.close();// 清理 Statement 对象所占用的资源
        conn.close(); // 清理连接数据库所占用的资源

        System.out.println("访问数据库完毕");
    }
}

Java_Statement接口

  1. Statement接口用于对数据库进行通用访问,可以运行静态SQL语句但是使用Statement接口不能接收参数
  2. ,需要使用Connection对象的CreateStatement()方法创建Statement对象
//        第三部:打开连接 :
        System.out.println("正在连接数据库。。。");
        Connection conn = null; // 创建连接对象
        conn = DriverManager.getConnection(DatabasesUrl,USER,PASS);

//        第四步:执行sql语句
        System.out.println("连接成功,准备执行sql语句");
//        创建 Statement 对象,用于执行sql语句
        Statement st;
        st = conn.createStatement(); // 创建执行对象Statement执行SQL语句,由Connection对象产生
//        定义执行的sql 语句
        String sql = "SELECT TOP(10) name, sex, nation From stuInfo"; // 查询10条数据
//       executeQuery() 方法用于在数据库中执行 sql 语句,同时将数据库响应的 sql 语句结果存放在 ResultSet 类对象中供我们使用
        ResultSet rs = st.executeQuery(sql);

Java_Statement对象的三种方法

  1. Statement对象,在使用Statement对象执行SQL语句之前,需要使用Connection对象的createStatement()方法创建一个Statement对象
  2. Statement stmt = conn.createStatement(); 创建执行对象Statement执行SQL语句,由Connection对象产生
  3. 在创建 Statement 对象后,可以用来执行 SQL 语句

Statement 对象可以使用三个方法

  1. boolean execute(String SQL ):
    如果可以检索到 ResultSet对象,则返回一个布尔值,true ,否则返回 false
  2. int executeUpdate(String SQL ):
    返回受sql语句执行影响的行数,使用exceuteUpdate执行预期会影响多行的 SQL 语句,例如 insert,update,delete
  3. ResultSet executeQuery( String SQL ):
    返回一个 ResultSet对象,获得执行 SQL 的结果集,和 select 语句类似

Java_JDBC关闭Statement对象

  1. 关闭Statement对象用户来节省资源,关闭时应该注意,先关闭Statement对象,然后再关闭Connection对象,原因是如果先关闭Connection对象,也会同时关闭Statement对象,但是应该始终显式的关闭Statement对象
//        第六步:清理资源
        rs.close();//清理 返回结果集所占用的资源
        st.close();// 清理 Statement 对象所占用的资源
        conn.close(); // 清理连接数据库所占用的资源

PreparedStatement对象实例

package com.company;

import com.microsoft.sqlserver.jdbc.SQLServerDriver;
// PreparedStatement对象样例代码
import java.sql.*;

public class JDBC_05 {
    public static void main(String[] args) throws Exception {
        final String JDBC_SqlDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; // java连接 sql server的驱动
        final String DatabasesUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=stu"; // Java连接指定数据库地址的语句
        String USER = "SA"; // 登录到数据库的用户名
        String PASS = "123456"; // 登录密码

//        第二步 注册驱动程序,注册驱动程序有两种方式:
//              第一种使用 Class.forName() 注册驱动
//              第二种使用 registerDriver() 注册驱动

//        第一种注册方法:
//        Class.forName 注册驱动程序的方式是将驱动程序的类文件加载到内存中的过程,可以将其用作JDBC接口的实现,只需要在程序中注册一次即可
//        Class.forName(JDBC_SqlDriver);
//        第二种注册方法:
//       DriverManager.registerDriver()

        Driver myDriver = new SQLServerDriver();
        DriverManager.registerDriver(myDriver);

//        第三部:打开连接 :
        System.out.println("正在连接数据库。。。");
        Connection conn = null; // 创建连接对象
        conn = DriverManager.getConnection(DatabasesUrl,USER,PASS);

//        第四步:执行sql语句
        System.out.println("连接成功,准备执行sql语句");
//        创建 Statement 对象,用于执行sql语句
        PreparedStatement st;
//        定义执行的sql 语句
        String sql = "UPDATE stuInfo set sex =? WHERE name=?"; // 定义可接收参数的SQL语句
        st = conn.prepareStatement(sql); // 此时的sql 执行的是 UPDATE stuInfo set sex =? WHERE name=?
        st.setString(1,"男");
        st.setString(2,"罗晨曦");

        int rows = st.executeUpdate(); // 查看 UPDATE 语句所影响的行数
        System.out.println(rows);
//       executeQuery() 方法用于在数据库中执行 sql 语句,同时将数据库响应的 sql 语句结果存放在 ResultSet 类对象中供我们使用

        sql= "SELECT TOP(10) * FROM stuInfo";
        st = conn.prepareStatement(sql); // 此时的sql 执行的是 SELECT TOP(10) * FROM stuInfo
        ResultSet rs = st.executeQuery();

//        第五步:从结果集种提取数据,可以使用 getXXX()方法来检索数据
        while (rs.next()){
            String name  = rs.getString("name");
            String sex  = rs.getString("sex");
            String nation  = rs.getString("nation");
            System.out.println("name: " + name +"|" + "sex: " + sex+"|" + "nation:"  +"|" + nation);
        }

//        第六步:清理资源
        rs.close();//清理 返回结果集所占用的资源
        st.close();// 清理 Statement 对象所占用的资源
        conn.close(); // 清理连接数据库所占用的资源

        System.out.println("访问数据库完毕");
    }
}

Java_JDBC的PreparedStatement对象

  1. PreparedStatement接口扩展可Statement接口,PreparedStatement对象可以动态的提供/接受参数

创建PreparedStatement对象

//        创建 Statement 对象,用于执行sql语句
        PreparedStatement st;
//        定义执行的sql 语句
        String sql = "UPDATE stuInfo set sex =? WHERE name=?"; // 定义可接收参数的SQL语句
        st = conn.prepareStatement(sql); // 此时的sql 执行的是 UPDATE stuInfo set sex =? WHERE name=?
        st.setString(1,"男");
        st.setString(2,"罗一");

        int rows = st.executeUpdate(); // 查看 UPDATE 语句所影响的行数
        System.out.println(rows);
//       executeQuery() 方法用于在数据库中执行 sql 语句,同时将数据库响应的 sql 语句结果存放在 ResultSet 类对象中供我们使用

        sql= "SELECT TOP(10) * FROM stuInfo";
        st = conn.prepareStatement(sql); // 此时的sql 执行的是 SELECT TOP(10) * FROM stuInfo
        ResultSet rs = st.executeQuery();
  1. JDBC中的所有参数都是?符号作为占位符,被称为参数标记
  2. 在执行SQL语句之前,必须为每个参数(占位符)提供值。
		String sql = "UPDATE stuInfo set sex =? WHERE name=?"; // 定义可接收参数的SQL语句
        st = conn.prepareStatement(sql); // 此时的sql 执行的是 UPDATE stuInfo set sex =? WHERE name=?
        st.setString(1,"男");
        st.setString(2,"罗一");
  1. setXXX()方法将值绑定到参数,其中XXX表示要绑定到输入参数的值的Java数据类型,如果没有提供绑定值,会抛出SQLException的异常
  2. 每个参数标记是顺序位置的引用,第一个标记表示位置1,第二个标记为位置2,以此类推,与数组的索引类似(数组的索引以0开始)
  3. PreparedStatement对象同样可以使用excute(),executeQuery()executeUpdate()方法

关闭PreparedStatement对象

  1. 同样也是需要显式的关闭PreparedStatement对象,确保以争取顺序清理资源

以上是关于Java_JDBC使用Statement和PreparedStatement的主要内容,如果未能解决你的问题,请参考以下文章

Java连载131-Connection接口和Statement接口

JDBC预编译语言

Laravel:一般错误:1615 Prepared statement需要重新准备

JAVA_JDBC1

JAVA_JDBC连接数据库

Java_JDBC连接数据库