PreparedStatement实现数据更新

PreparedStatement实现数据更新

在之前分析Statement接口的时候所采用的就是一种数据增加的更新处理才发现的问题,同样现在将通过PreparedStatement接口来解决之前所遇到的问题

在使用PreparedStatement接口的时候由于需要准确的设置数据的操作类型,所以在进行日期设置的时候就需要有一个非常重要的说明: PreparedStatement 支持的是java.sql.Date,而不支持java.util.Date对象实例。

 

在PreparedStatement类中设置日期的方法使用的是java.sql.Date,而不支持java.util.Date对象实例,观察具体的方法定义。

NO.方法类型描述
01public void setDate​(int parameterIndex, Date x) throws SQLException普通设置指定占位符的日期数据内容
02public void setTime​(int parameterIndex, Time x) throws SQLException普通设置指定占位符的时间数据内容
03public void setTimestamp​(int parameterIndex, Timestamp x) throws SQLException普通设置指定占位符的日期时间数据内容(时间戳)

在程序开发中所能够使用到描述日期时间的数据类型都属于“java.util.Date”类对象实例,而数据库里面才会使用到java.sql包中对应的日期时间实例,此时就需要考虑将java.util.Date类的对象转为各自的java.sql包中的日期时间对象,依靠各自类的构造方法就可实现:

java.sql.Date类构造public Date​(long date)
java.sql.TIme类构造public Time​(long time)
java.sql.Timestamp类构造public Timestamp​(long time)

千万不要忘记了java.util.Date 类中提供有一个public long getTime()方法,这个方法可以直接将当前java.util.Date类中的对象实例转为long数据类型,而这个转换后的结果就可以实现各自java.sql包中的日期时间类的对象实例化了。

范例:实现数据的增加

import java.util.Date;
import java.sql.*;

public class PreparedStatmentDemo {

    public static final String DRIVER = "com.mysql.cj.jdbc.Driver";    //数据库的驱动程序
    public static final String URL="jdbc:mysql://localhost:3306/yootk"; //连接地址
    public static final String USER = "root";   //用户名
    public static final String PASSWORD = "mysqladmin"; //密码

    public static void main(String[] args) throws Exception{

        String name = "张三";
        int age = 16;   //年龄
        Date birthday =new Date();     //日期就使用java.util.data描述
        double salary = 6900;   //工资
        String  note = "张三是一个很自律的人";  //说明

        Class.forName(DRIVER);  //将数据的驱动程序加载到容器内部
        Connection connection = DriverManager.getConnection(URL,USER,PASSWORD); //获取数据库的连接
        String sql ="INSERT INTO user (name,age,birthday,salary,note) VALUE (?,?,?,?,?)";   //用占位符代替要插入的内容
        PreparedStatement preparedStatement =  connection.prepareStatement(sql);  //创建一个PreparedStatement接口实例对象
        preparedStatement.setString(1,name);
        preparedStatement.setInt(2,age);
        //将程序中使用的java.util.Date转换为sql中用的java.sql.Date
        preparedStatement.setDate(3,new java.sql.Date(birthday.getTime()));
        preparedStatement.setDouble(4,salary);
        preparedStatement.setString(5,note);
        int count = preparedStatement.executeUpdate();   //执行sql操作,返回受影响的行数
        System.out.println("【受影响的行数为】"+count);
        connection.close(); //关闭连接

    }

}

【受影响的行数为】1

现在观察一下数据库中user表的数据:

可以发现此时表中的数据已经成功受影响。

以上的程序实际上代表的是整个PreparedStaterment 执行数据更新处理操作的方式,只要在PreparedStatement接口里面设置有相应的SQL占位符,那么就必须在执行更新或查询前明确的进行内容的设置。此操作是针对于不同的数据类型使用了不同的setXxx(方法,而在PreparedStatement接口中为了简化这一繁 琐的数据类型的区分问题,所以可以通过setObject()(方法实现占位符数据的配置。

范例:使用setObject()方法实现该功能

import java.util.Date;
import java.sql.*;

public class PreparedStatmentDemo {

    public static final String DRIVER = "com.mysql.cj.jdbc.Driver";    //数据库的驱动程序
    public static final String URL="jdbc:mysql://localhost:3306/yootk"; //连接地址
    public static final String USER = "root";   //用户名
    public static final String PASSWORD = "mysqladmin"; //密码

    public static void main(String[] args) throws Exception{

        String name = "张三";
        int age = 16;   //年龄
        Date birthday =new Date();     //日期就使用java.util.data描述
        double salary = 6900;   //工资
        String  note = "张三是一个很自律的人";  //说明

        Class.forName(DRIVER);  //将数据的驱动程序加载到容器内部
        Connection connection = DriverManager.getConnection(URL,USER,PASSWORD); //获取数据库的连接
        String sql ="INSERT INTO user (name,age,birthday,salary,note) VALUE (?,?,?,?,?)";   //用占位符代替要插入的内容
        PreparedStatement preparedStatement =  connection.prepareStatement(sql);  //创建一个PreparedStatement接口实例对象
        preparedStatement.setObject(1,name);
        preparedStatement.setObject(2,age);
        //将程序中使用的java.util.Date转换为sql中用的java.sql.Date
        preparedStatement.setObject(3,new java.sql.Date(birthday.getTime()));
        preparedStatement.setObject(4,salary);
        preparedStatement.setObject(5,note);
        int count = preparedStatement.executeUpdate();   //执行sql操作,返回受影响的行数
        System.out.println("【受影响的行数为】"+count);
        connection.close(); //关闭连接

    }

}

【受影响的行数为】1

这个时候就可以更加简化的实现占位符参数的数据配置处理操作了,而这样的处理机制在日后进行--些框架结构设计上可以简化许多的判断逻辑。

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值