java.sql.SQLException: No value specified for parameter 1

源代码

public class PrepareStatementDemo2 {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost:3306/usermanager?useSSL=false&characterEncoding=utf-8&timeZone=CST";
            String username = "root";
            String password = "root";
            connection = DriverManager.getConnection(url, username, password);
            System.out.println("连接数据库成功");

            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入用户名");
            String name = scanner.nextLine();
            System.out.println("请选择部门 1.开发一部  2.开发二部");
            int depId = scanner.nextInt();

            //通过数据对象实例化命令对象
            //不能用拼接方式
            //String sql = "insert into manager values(NULL,'"+name+"',2)";

            //正确方式:使用?占位符
            //不需要判断数据的类型,不能添加"
            String sql = "insert into manager values(NULL,?,?)";
            //带着参数执行预编译
            preparedStatement = connection.prepareStatement(sql);

            //执行SQL操作, 返回影响的行数
            int i = preparedStatement.executeUpdate();
            System.out.println("i"+i);

        } catch (ClassNotFoundException e) {
            System.out.println("驱动程序不存在");
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

报错

java.sql.SQLException: No value specified for parameter 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
	at com.mysql.jdbc.PreparedStatement.checkAllParametersSet(PreparedStatement.java:2211)
	at com.mysql.jdbc.PreparedStatement.fillSendPacket(PreparedStatement.java:2191)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2058)
	at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
	at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
	at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
	at com.gxa.day27.PrepareStatementDemo.main(PrepareStatementDemo.java:45)

Process finished with exit code 0

分析解决

  1. 错误原因:没有为参数1指定值,预编译时preparedStatement = connection.prepareStatement(sql);,如果没有传参,则会抛出异常
  2. 在该行后面传参:
//传参
//根据参数类型的不同,选择不同的setXXX方法
//参数的位置:从1开始
preparedStatement.setString(1,name);
preparedStatement.setInt(2,depId);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值