会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132358个问题
大数据全系列/第一阶段:Linux 操作系统/Linux操作系统概述与安装 38551楼
大数据全系列/第一阶段:Linux 操作系统/Linux操作系统概述与安装 38552楼
JAVA 全系列/预科阶段:职业规划/学习方法/就业和找工作需要注意事项 38553楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 38554楼
Python 全系列/第一阶段:Python入门/编程基本概念 38557楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 38558楼

create table numbers
(
	id int auto_increment primary key,
	num int not null,
	type varchar(2)
);

我使用的是mySql,已经把id设置为自动增长

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.Statement;

/**
 *使用PreparedStatement批处理数据
 *将2~1000之间的数字插入数据库,并记录数字的类型(质数还是合数)
 *
 */
public class TestNum {
	
	public static void main(String[] args) throws Exception {
		int num=1000;
		long startTime=System.currentTimeMillis();
//		insertNum1(num);//	使用Statement插入数字
//		System.out.println("使用statement耗时:"+(endTime-startTime));
		
		insertNum2(num);//	使用PreparedStatement插入数字
		long endTime=System.currentTimeMillis();
		System.out.println("使用PreparedStatement耗时:"+(endTime-startTime));
	}
	/**
	 * 使用PreparedStatement插入数字,批处理
	 * @throws Exception 
	 */
	private static void insertNum2(int num) throws Exception {		
		Connection conn = JDBCUtils.getConnection();
		String sql="insert into numbers  values(null,?,?)";
		PreparedStatement state=conn.prepareStatement(sql);
		conn.setAutoCommit(false);//关闭自动提交
		for(int i=2;i<=num;i++) {
			//绑定参数
			JDBCUtils.bind(state,i,getType(i));
			//加入批处理
			state.addBatch();		
		}		
		//统一执行批处理
		state.executeBatch();
		conn.commit();
		JDBCUtils.relese(state, conn);
		
	}
	/**
	 * 使用Statement插入数字,并且只开关一次连接
	 * @throws Exception 
	 * 
	 */
	private static void insertNum1(int num) throws Exception {
		Connection conn=JDBCUtils.getConnection();
		Statement state=conn.createStatement();
		for(int i=2;i<=num;i++) {
			String sql="insert into numbers values(null,"+i+",'"+getType(i)+"')";
			state.executeUpdate(sql);
		}		
		JDBCUtils.relese(state, conn);
	}
	/**
	 * 判断数字类型
	 * @return
	 */
	private static String getType(int num) {
		if(num<4) {
			return "ZS";
		}
		for(int i=2;i<Math.sqrt(num);i++) {
			if(num % i==0) {
				return "HS";
			}
		}
		return "ZS";
	}
}

在测试PreparedStatement时,就只是需要绑定两个参数了,将id那个设置为null,运行时出现异常,这是为什么呢?

image.png

JAVA 全系列/第三阶段:数据库编程/JDBC技术(旧) 38559楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637