PreparedStatement实现对数据库表的操作

注:下面的连接均是以mysql为例,@Test是Junit4的注解用于测试,用到的工具类在前一个有讲过

  1.  首先贴出建表语句方便后续操作
CREATE TABLE `fruit` (
  `fruitName` varchar(10) COLLATE utf8_bin DEFAULT NULL COMMENT '水果名称',
  `id` int(11) NOT NULL COMMENT 'id',
  `price` double DEFAULT NULL COMMENT '水果价格',
  `info` varchar(20) COLLATE utf8_bin DEFAULT NULL COMMENT '介绍',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

      2,插入几条数据便于后边用

insert  into `fruit`(`fruitName`,`id`,`price`,`info`) values 
('梨',2,14,'梨好吃'),
('香蕉',3,11,'香蕉也很好吃'),
('菠萝',4,13,'菠萝特别好吃!');

 首先是获取连接调用前面讲到的工具类JdbcUtils中的方法getConncetion方法获取连接conn,编写sql语句,之后调用conn的prepareStatement进行预编译sql语句。代码如下所示

        //获取数据库链接
        Connection  connection = JdbcUtils.getConnection();
        //定义要执行的sql语句
        String sql="update fruit set fruitName=? where id=?";
        //预编译sql语句
        PreparedStatement ps = connection.prepareStatement(sql);
  1.  可能会发现sql语句会有不同,平时我们写的sql语句应该是update fruit set fruitName="苹果" where id=2,这里的?被称为占位符,通俗点说就是这个地方我不确定填什么你先给我空出来,我以后想用的时候再往里加入我想要的数据,那么我们应该怎么加呢?
  2. PreparedStatement中有设置内容的方法,可以调用ps.setXxx(intparameterIndex,Object x),第一个参数intparameterIndex就是指定是第几个占位符,注意这里不是从0开始,而是从1开始,第二个参数就要看你想添加的类型了。举个例子我们想设置fruitName为苹果,我们就可以调用ps.setString(1,"苹果")设置,1代表他是第一个占位符,"苹果"就是你要加的数据,若输入的是int类型,可以调用ps.setInt()方法,以此类推,可以根据数据的类型调用不同的方法,用的时候在集成开发环境idea或者eclipse中可以 . 出来。

 接下来就是执行sql了,调用PreparedStatement中的execute方法执行

//执行sql语句
ps.execute();

 对于连接我们用完应该关闭,PreparedStatement同样需要关闭,关闭时会抛出异常,try-catch包裹一下就行

       try {
            if (connection!=null)
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
       try {
             if (ps!=null)
             ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }

当然如果我们直接判断connection和ps是否为null,会报错,这是因为作用域问题,我们要提升作用域把Connection和PreparedStatement声明到上面值为null,并且把获取连接,预编译sql语句和执行sql语句用try-catch-finally包起来,把关闭连接放到finally里

/**
     * 修改一条信息
     * @throws Exception
     */
    @Test
    public void test2() throws Exception {
        Connection connection=null;
        java.sql.PreparedStatement ps=null;
        try {
            //获取数据库链接
            connection = JdbcUtils.getConnection();
            //预编译sql语句
            String sql="update fruit set fruitName=? where id=?";
            ps = connection.prepareStatement(sql);
            //填充占位符
            ps.setString(1,"栗子");
            ps.setInt(2,1);
            //执行
            ps.execute();
            System.out.println("一条数据修改成功!");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
             //关闭连接
            try {
                if (connection!=null)
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
            try {
                if (ps!=null)
                ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }

考虑到每次都要关闭连接,可以把关闭连接封装成一个方法,需要时调用就可以

    /**
     *  关闭资源
     * @param con
     * @param ps
     */
    public static void colseResource(Connection con, PreparedStatement ps)  {
        if (con!=null) {
            try {
                con.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (ps!=null) {
            try {
                ps.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }

    }

用的时候直接JdbcUtils.closeRecsource()传入连接和PreparedStatement即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值