你是不是也在为jdbc增删改查一直报错而烦恼

前两天在学习jdbc部分,发现在数据库插入一行数据时,运行的时候一直报错,原来是这些问题。,看看你的错误是不是和我一样吧。

首先是查看数据库表中id是否是递增序列

其次在连接池配置文件中在url后是不是添加了这样一行字&useServerPrepStmts=true&characterEncoding=utf8

把这两个问题注意到应该就不会在报错了

但是我现在还有一个未解决的问题就是,如果新增的数据是日期类型的如何通过jdbc导入到数据库中,不会定义日期类型的变量

package com.itcast.example;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.itcast.pojo.Goods;
import org.junit.Test;

import javax.sql.DataSource;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.Properties;
//产品数据的增删改查
public class goodsTest {
//    1查询所有 2.不需要参数 3.结果封装成为arrayList
    @Test
    public  void  testSelectAll() throws Exception {
//        1.todo 获取Connection
//         加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));
//        获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//        获取数据库连接池链接
        Connection connection = dataSource.getConnection();
//        2.todo 定义sql语句
        String sql="select *from milk_tea";
//        3.todo 获取pstmt对象
        PreparedStatement pstmt = connection.prepareStatement(sql);
//        4.todo 设置参数(此处无参数)
//        5.todo 执行sql并将查询结果用resultSet返回
        ResultSet resultSet = pstmt.executeQuery();
        ArrayList<Goods> list = new ArrayList<>();
//        6.todo 处理结果  将处理结果list<Goods>封装为 Goods对象装载到list集合
        while (resultSet.next()){
//            获取对应的数据
            String id = resultSet.getString(1);
            String name = resultSet.getString(2);
            String w = resultSet.getString(3);
            Date date = resultSet.getDate(4);
            int month = resultSet.getInt(5);
            BigDecimal price = resultSet.getBigDecimal(6);
            BigDecimal sale = resultSet.getBigDecimal(7);
//            封装对象
            Goods goods = new Goods();
//            对象赋值
            goods.setId(id);
            goods.setName(name);
            goods.setW(w);
            goods.setDate((java.sql.Date) date);
            goods.setMonth(month);
            goods.setPrice(price);
            goods.setSale(sale);
//            装载集合
            list.add(goods);
        }
        System.out.println(list);
//        7.todo 释放资源
        connection.close();
        pstmt.close();
        resultSet.close();
    }


//    添加数据
// SQL:   insert into supplier_info(supplier_name,city,addr,tel)values(?,?.?,?);
//参数: 除了id之外的所有参数
//结构:boolean

    @Test
    public  void  testAdd() throws Exception {
//        接收页面提交的参数
        String supplierName="北京第一大供应商";
        String city="北京";
        String addr="北京大道";
        String tel="1234567890";
//        1.todo 获取Connection
//         加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));
//        获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//        获取数据库连接池链接
        Connection connection = dataSource.getConnection();
//        2.todo 定义sql语句
        String sql="insert into supplier_info(supplier_name,city,addr,tel)values(?,?,?,?);";
//        3.todo 获取pstmt对象
        PreparedStatement pstmt = connection.prepareStatement(sql);
//        4.todo 设置参数(此处无参数)
        pstmt.setString(1,supplierName);
        pstmt.setString(2,city);
        pstmt.setString(3,addr);
        pstmt.setString(4,tel);
//执行sql
        int count = pstmt.executeUpdate();
//        返回影响行数
        System.out.println(count>0);

//        7.todo 释放资源
        connection.close();
        pstmt.close();

    }
//       * 测试日期
//     * 作用1.从数据库日期转换为date对象,并将date对象按照格式输出
//     * 作用2.将用户输入的日期(Date对象)转为String类型,然后调用sql语句插入数据库
//     * 作用3.同时还可以判断用户输入的日期格式对不对
    @Test
    public  void  testAdd2() throws Exception {
//        接收页面提交的参数
        String prod_name="小馒头";
        String net_w="150g";
        int month =3;
        BigDecimal in_price= BigDecimal.valueOf(0.5);
        BigDecimal sale_price= BigDecimal.valueOf(1);
//        1.todo 获取Connection
//         加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("src/druid.properties"));
//        获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
//        获取数据库连接池链接
        Connection connection = dataSource.getConnection();
//        2.todo 定义sql语句
        String sql="insert into milk_tea(prod_name,net_w,valid_month,in_price,sale_price)values(?,?,?,?,?)";
//        3.todo 获取pstmt对象
        PreparedStatement pstmt = connection.prepareStatement(sql);
//        4.todo 设置参数(此处无参数)
        pstmt.setString(1,prod_name);
        pstmt.setString(2,net_w);
//        pstmt.setDate(3, (java.sql.Date) date);
        pstmt.setInt(3,month);
        pstmt.setBigDecimal(4,in_price);
        pstmt.setBigDecimal(5,sale_price);
//执行sql
        int count = pstmt.executeUpdate();
//        返回影响行数
        System.out.println(count>0);

//        7.todo 释放资源
        connection.close();
        pstmt.close();

    }


}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值