当前位置: 首页 > news >正文

JDBC的Statement对象的使用

声明此篇文章部分图片引用了百战尚学堂的

首先先给大家看一下JDBC的编写步骤,便于后边的讲解

 

如何获取Connection对象?

通过反射机制Class.forName(数据库驱动名称)加载数据库驱动器,有人会问为什么那么我们来看mysql的驱动器源码:

mysql实现了java所提供的jdbc标准,而jdbc包下有一个Driver类,该类的代码中有一段静态代码块,静态代码块在类加载时加载,只会加载一次,所以当我们通过反射机制加载数据库驱动器时,相当于调用了该类的静态代码块

静态代码块中加载并注册了驱动器

通过反射机制加载了mysql的驱动器之后,可以使用DriverManager的静态方法getConnection(url,username,password)传递参数,该方法返回一个Connection对象,而这个方法会获取到我们传递的数据库url对应的数据库连接对象

mysql数据库的url:jdbc:mysql://localhost:数据库端口号/数据库名?useSSL=false

代码示例:

注意:在获取数据库连接对象之前,需要先加载数据库驱动器

通过这种方式获取Connection对象有什么问题?

通过这种方式获取Connection对象会有硬编译的问题,硬编码是指将可变变量用一个固定值来代替的方法。用这种方法编译后,如果以后需要更改此变量就非常困难了。

如何解决这种问题?

通过properties属性文件可以解决这种问题,这种文件以key=value格式存储内容。Java中可以使用Properties工具类来读取这个文件。项目中会将一些配置信息放到properties文件中,所以properties文件经常作为配置文件来使用。

Properties工具类中常用方法

load(InputStream is)        通过给定的输入流对象读取properties文件并解析

getProperty(String key)        根据key获取对应的value

代码示例:

而以后如果我们需要改数据就只需要在properties文件中更改就行了,不需要动源代码

 而此时如果想要创建多个mysql是不是就得写多次这样的代码,那不就造成了数据冗余吗?所以我们可以操作properties文件的代码抽离出来写一个JdbcUtils工具类。

将部分代码抽离写出JdbcUtils工具类

此时我们可以看到我将这段代码放到了静态代码块中,为什么呢,我们可以参考一下mysql的jdbc包中的Driver类,它通过了静态代码块进行数据库驱动器的加载,而静态代码块在类加载时执行一次,之后就会再执行了

而我们操作properties文件是需要用到IO流得,大家都知道IO流是比较耗时间的,而且操作properties文件只需要执行一次就好了,所以我们直接将操作properties文件的代码放到静态代码块中

然后定义了getConnection方法,该方法的返回值是Connection对象,通过该方法我们可以获取到mysql的连接器

/*** Jdbc工具类*/
public class JdbcUtils {private static String url;private static String name;private static String pwd;static{try(//通过字节输入流读取properties文件FileInputStream fis = new FileInputStream("src/jdbc.properties")){//实例化Properties对象Properties prop = new Properties();//解析读取到的properties文件prop.load(fis);//读取连接数据库的urlurl = prop.getProperty("url");//获取用户名name = prop.getProperty("username");//获取密码pwd = prop.getProperty("pwd");//获取数据库驱动全名String driver = prop.getProperty("driver");//通过反射机制加载数据库驱动Class.forName(driver);}catch (Exception e){e.printStackTrace();}}//获取数据库连接对象public static Connection getConnection(){Connection connection = null;try {connection = DriverManager.getConnection(url,name,pwd);} catch (SQLException e) {e.printStackTrace();}return connection;}
}

但是Connection对象是需要关闭的,所以我们再写一个关闭Connection对象的方法,便于我们使用完之后关闭

为了方便后期的讲解,我们再加一个closeResource方法,关闭Statement对象和Connection对象

 

通过Connection对象获取Statement对象

Connection类中有一个静态方法叫createStatement(),通过该方法可以获取到Statement对象,而Statement对象就是用来执行sql语句的

Statement接口特点

用于执行静态 SQL 语句并返回它所生成结果的对象。 由 createStatement 创建,用于发送简单的 SQL 语句(不支持动态绑定)。

那执行sql语句首先我们得要有表把,所以我们这里创建一个表叫users,userid为主键列

 

通过Statement对象执行sql语句

想要通过Statement对象执行sql语句,首先需要知道我们编写代码的顺序

1、首先先搭建好try…catch…finally框架,并且在try语句外声明Connection和Statement对象

2、然后获取Connection对象

3、通过Connection对象调用createStatement方法,获取Statement对象

4、编写String类型的sql语句

5、通过Statement对象的execute(sql)方法执行sql语句

6、最后关闭Statement对象和Connection对象

然后我们来看代码:

这段代码虽然看起来多,但其实有三个方法,而这三个方法都是遵循上面的顺序进行编写的,主要的是这个sql语句的编写,我们这个类实现的是对users表的DML操作(插入、更新、删除)

执行sql语句调用statement下的execute(sql)方法,传递sql语句,该方法返回的是布尔值,如果我们sql语句执行后有记录就返回true否则返回false

/*** Statement对象的使用*/
public class TestStatement {/*** 添加用户*/public void insertUser(String username,int userage){Connection connection = null;Statement statement = null;try{//获取mysql数据库连接对象connection = JdbcUtils.getConnection();//获取Statement对象statement = connection.createStatement();//定义需要执行sql语句String sql = "insert into users values(default,'"+username+"',"+userage+")";//执行sql,返回boolean值,如果sql有结果集返回true,如果没有结果集返回falseboolean execute = statement.execute(sql);System.out.println(execute);}catch (Exception e){e.printStackTrace();}finally{JdbcUtils.closeResource(statement,connection);}}/*** 修改用户信息*/public void updateUser(int userid,String username,int userage){Connection connection = null;Statement statement = null;try{//获取连接对象connection = JdbcUtils.getConnection();//获取Statement对象statement = connection.createStatement();//定义sql语句String sql = "update users set username = '"+ username +"',userage = "+ userage+ " where userid = "+ userid;//执行sql语句int ret = statement.executeUpdate(sql);System.out.println(ret);}catch (Exception e){e.printStackTrace();}finally{JdbcUtils.closeResource(statement,connection);}}/*** 删除用户信息*/public void deleteUser(int userid){Connection connection = null;Statement statement = null;try{//获取数据库连接对象connection = JdbcUtils.getConnection();//获取Statement对象statement = connection.createStatement();//编写sql语句String sql = "delete from users where userid = "+userid;//执行sql语句//statement.execute(sql);int ret = statement.executeUpdate(sql);System.out.println(ret);}catch (Exception e){e.printStackTrace();}finally{JdbcUtils.closeResource(statement,connection);}}
}

然后我们就来测试一下这个类的添加用户、修改用户、删除用户的方法

添加用户:

 

 修改用户:

  

删除用户:

 

要点:关闭Connection对象和Statement对象时,一定要先关闭Statement对象后关闭Connection对象 

记住Statement对象执行sql语句的代码编写顺序:

1、首先先搭建好try…catch…finally框架,并且在try语句外声明Connection和Statement对象

2、然后获取Connection对象

3、通过Connection对象调用createStatement方法,获取Statement对象

4、编写String类型的sql语句

5、通过Statement对象的execute(sql)方法执行sql语句

6、最后关闭Statement对象和Connection对象


http://www.taodudu.cc/news/show-7665413.html

相关文章:

  • java statement 参数_JDBC中Statement和Preparement的使用讲解
  • Unreachable statement
  • BUUCTF,Crypto:Cipher
  • python-RSA加密与java-Cipher加密适配
  • OpenSSL/GMSSL EVP接口说明——1.3 CIPHER_CTX操作
  • Cipher加密
  • Java Cipher 加密
  • xml文件collection应用
  • java集合之——Collection接口
  • Java--Collection和Map集合
  • Collection和Map
  • Collection用法
  • mybatis collection
  • Java集合Collection、List、Set区别与详解
  • Java集合-Collection集合体系概述
  • Collection集合类
  • 集合:Collection详解.
  • Windows安装完ADFS后卸载ADFS清除ADFS数据库
  • ADFS服务无法启动的原因排查
  • 更新adfs的证书_Office 365实战系列之三(安装配置ADFS)
  • 更新adfs的证书_Office 365 ADFS Token Signing 证书过期警告问题
  • ADFS 6.3 证书更新
  • ADFS修改默认访问端口
  • adfs sso java_实战:ADFS3.0单点登录系列-总览
  • java adfs sso_Spring SAML ADFS:java.security.InvalidKeyException
  • adfs sp java_SAML 2.0声称不通过ADFS
  • java adfs sso_实战:ADFS3.0单点登录系列-ADFS3.0安装配置
  • Dynamics 365配置ADFS
  • 基于SAML的ADFS认证集成方案
  • adfs 登录逻辑