`
hejiajunsh
  • 浏览: 409878 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

JDBC用PreparedStatement完成批量添加vs普通添加

阅读更多
public class WeatherDao {
	private static Connection conn = null;
	private static PreparedStatement pstmt = null;
	
	/**
	 * Author:Allison 
	 * Date:2013-04-02 
	 * Description:执行批量添加
	 */	
	public void addWeatherBatch(List<WeatherData> list) {
		conn = DBConn.getConnection();
		try {
			conn.setAutoCommit(false);
			String sql = "insert into weather_data(currentDate,highTemp,lowTemp,weather,windDirection,windPower,week,city)values(?,?,?,?,?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			for (WeatherData WeatherData : list) {
				pstmt.setString(1, WeatherData.getcurrentDate());
				pstmt.setDouble(2, WeatherData.getHighTemp());
				pstmt.setDouble(3, WeatherData.getLowTemp());
				pstmt.setString(4, WeatherData.getWeather());
				pstmt.setString(5, WeatherData.getWindDirection());
				pstmt.setString(6, WeatherData.getWindPower());
				pstmt.setString(7, WeatherData.getWeek());
				pstmt.setString(8, WeatherData.getCity());
				pstmt.addBatch();
			}
			pstmt.executeBatch();
			conn.commit();
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {

			try {
				DBConn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * Author:Allison datatime:2013-03-28 introduction:添加weather详细信息
	 */
	public boolean addWeather(WeatherData weather) {
		// step1 定义sql语句
		String sqlText = "insert into weather_data(currentDate,highTemp,lowTemp,weather,windDirection,windPower,week,city)values(?,?,?,?,?,?,?,?)";
		Object[] oParams = { weather.getcurrentDate(), weather.getHighTemp(),
				weather.getLowTemp(), weather.getWeather(),
				weather.getWindDirection(), weather.getWindPower(),
				weather.getWeek(), weather.getCity() };
		// step2 执行sql语句
		// 执行sql命令
		int iRs = DBConn.exePreIUD(sqlText, oParams);
		// 关闭DBConn对象
		DBConn.close();
		// step3 返回结果
		return iRs > 0 ? true : false;
	}

	/*
	 * Author:Allison datatime:2011-10-19introduct:查询日志
	 */
	public ArrayList<WeatherData> findWeatherByDateCity(String date, String city){
		
		//step1 定义sql语句
		String sqlText="select currentDate,city from weather_data where currentDate='"+ date +"' and city ='"+city+"'";
		//step2 执行sql语句
		ResultSet rs = DBConn.exeR(sqlText);
		try {
			ArrayList<WeatherData> list = new ArrayList<WeatherData>();
			while(rs.next()){
				//定义一个WeatherData对象类型
				WeatherData cobject = new WeatherData();
				cobject.setcurrentDate(rs.getString(1));
				cobject.setCity(rs.getString(2));
				list.add(cobject);
			}
			return list;
		} catch (SQLException e) {
			e.printStackTrace();
			return null;
		}finally{
			DBConn.close();
		}
	}
}

 

public class DBConn {
	// 四个核心变量、六个方法
	private static Connection conn = null;// 连接数据库
	private static Statement stmt = null;// 发送SQL命令
	private static PreparedStatement pstmt = null;// 发送带参数的sql命令
	private static ResultSet rs = null;// 获得返回的数据集

	public static Connection getConnection() {
		// step1:找驱动
		try {
			Class.forName(Config.DRIVER);
			conn = DriverManager.getConnection(Config.URL + Config.DBNAME,
					Config.DBUSERNAME, Config.DBPASS);
			// DatabaseMetaData dbmd = conn.getMetaData();
			// System.out.println("db name: " + dbmd.getDatabaseProductName());
			// System.out.println("tx: " + dbmd.supportsTransactions());
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

	/**
	 * Author:Allison 
	 * Date:2011-10-12 
	 * Description:执行RUD操作
	 */
	public static int exeIUD(String sqlText) {
		// step1:创建连接
		getConnection();
		// step2:判断连接
		if (conn != null) {
			try {
				// step3:定义statement对象
				stmt = conn.createStatement();
				// step4:执行sql命令
				int iRs = stmt.executeUpdate(sqlText);
				return iRs;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return -1;
	}

	/**
	 * Author:Allison 
	 * Date:2011-10-12 
	 * Description:执行RUD操作
	 */

	public static int exePreIUD(String sqlText, Object[] oParams) {
		// step1:创建连接
		getConnection();

		// step2:判断连接
		if (conn != null) {
			try {
				// conn.setAutoCommit(false);
				// step3:定义pstmt对象
				pstmt = conn.prepareStatement(sqlText);
				// step:传参
				for (int i = 0; i < oParams.length; i++) {
					pstmt.setObject(i + 1, oParams[i]);
				}
				// step5:执行sql命令
				int iRs = pstmt.executeUpdate();
				return iRs;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return -1;
	}

	/**
	 * Author:Allison 
	 * Date:2011-10-12 
	 * Description:执行select操作
	 */
	public static ResultSet exeR(String sqlText) {
		// step1:建立连接
		getConnection();
		// step2:判断连接
		if (conn != null) {
			try {
				// step3:建立stmt对象
				stmt = conn.createStatement();
				// step4:执行sql命令
				rs = stmt.executeQuery(sqlText);
				return rs;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * Author:Allison 
	 * Date:2011-10-12 
	 * Description:执行select操作
	 */
	public static ResultSet exePreR(String sqlText, Object[] oParams) {
		// step1:建立连接
		getConnection();
		// step2:判断连接
		if (conn != null) {
			try {
				// step3:建立stmt对象
				pstmt = conn.prepareStatement(sqlText);
				// step4:循环参数
				for (int i = 0; i < oParams.length; i++) {
					pstmt.setObject(i + 1, oParams[i]);
				}
				// step5:执行sql命令
				rs = pstmt.executeQuery();
				return rs;
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
		return null;
	}

	/**
	 * Author:Allison 
	 * Date:2011-10-12 
	 * Description:关闭四个核心变量
	 */
	public static void close() {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

 

public class WeatherData {
	private int id;
	private String currentDate;
	private double highTemp;
	private double lowTemp;
	private String weather;
	private String windDirection;
	private String windPower;
	private String week;
	private String city;

	public WeatherData() {
	}

	public WeatherData(int id, String currentDate, double highTemp,
			double lowTemp, String weather, String windDirection,
			String windPower, String week, String city) {
		super();
		this.id = id;
		this.currentDate = currentDate;
		this.highTemp = highTemp;
		this.lowTemp = lowTemp;
		this.weather = weather;
		this.windDirection = windDirection;
		this.windPower = windPower;
		this.week = week;
		this.city = city;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getcurrentDate() {
		return currentDate;
	}

	public void setcurrentDate(String currentDate) {
		this.currentDate = currentDate;
	}

	public double getHighTemp() {
		return highTemp;
	}

	public void setHighTemp(double highTemp) {
		this.highTemp = highTemp;
	}

	public double getLowTemp() {
		return lowTemp;
	}

	public void setLowTemp(double lowTemp) {
		this.lowTemp = lowTemp;
	}

	public String getWeather() {
		return weather;
	}

	public void setWeather(String weather) {
		this.weather = weather;
	}

	public String getWindDirection() {
		return windDirection;
	}

	public void setWindDirection(String windDirection) {
		this.windDirection = windDirection;
	}

	public String getWindPower() {
		return windPower;
	}

	public void setWindPower(String windPower) {
		this.windPower = windPower;
	}

	public String getWeek() {
		return week;
	}

	public void setWeek(String week) {
		this.week = week;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	@Override
	public String toString() {
		return "WeatherData [id=" + id + ", currentDate="
				+ currentDate + ", highTemp=" + highTemp + ", lowTemp="
				+ lowTemp + ", weather=" + weather + ", windDirection="
				+ windDirection + ", windPower=" + windPower + ", week=" + week
				+ ", city=" + city + "]";
	}
}

 

 

public class Config {
	//static静态成员声明Properties对象
	private static Properties prop = new Properties();
	//编写静态块加载prop里面属性文件
	static{
		try {
			prop.load(Config.class.getResourceAsStream("db.properties"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	//定义静态变量,赋值数据库连接信息
	public static final String DRIVER=prop.getProperty("DRIVER");
	public static final String URL = prop.getProperty("MYSQLURL");
	public static final String DBNAME =  prop.getProperty("DATABASENAME");
	public static final String DBUSERNAME =  prop.getProperty("DBUSERNAME");
	public static final String DBPASS =  prop.getProperty("DBPASS");
}

 

DRIVER=com.mysql.jdbc.Driver
MYSQLURL=jdbc:mysql://localhost:3306/
DATABASENAME=******
DBUSERNAME=******
DBPASS=******

 

分享到:
评论

相关推荐

    jdbc批量 (绝对经典)

    本文将深入探讨JDBC中的三种批量处理方法,包括普通插入、批处理以及存储过程的批量执行,通过具体代码示例来展示如何实现这些批量操作,以及它们对系统性能的影响。 #### 普通插入操作 在JDBC中,最基本的批量...

    JDBC.rar_java jdbc mysql

    1. **批量更新**:`Statement`对象提供了`addBatch()`方法添加SQL语句到批处理队列,然后调用`executeBatch()`一次性执行所有语句。 2. **批处理优化**:对于大量重复的操作,批处理可以显著提升性能,减少网络通信...

    Jdbc深入分析

    通过批量添加SQL语句到批处理队列中,然后一次性执行,可以显著提高插入速度。 #### 十二、JDBC其他API **12.1 可滚动结果集** 可滚动结果集允许用户前后移动游标位置,方便进行数据检索。 **12.2 分页技术** ...

    这里是我的MySql和Jdbc的学习笔记, 要重点整理, 日后作为讲课使用.zip

    在JDBC中处理大量数据时,批量更新(Batch Updates)能显著提高性能。通过调用Statement对象的addBatch()方法添加SQL语句,然后执行executeBatch()来一次性提交所有操作。 最后,确保正确关闭数据库连接,避免资源...

    04-完整JdbcUtils工具类.pdf

    这通常涉及批处理(batch processing),在JDBC中可以通过设置PreparedStatement为批模式,然后使用addBatch()方法添加SQL语句,最后执行executeBatch()批量执行。 7. 查询操作:在JdbcUtils类中,可以执行查询单条...

    mybatis的oracle的批量插入优化和mybatis的generator自动生成三层文件

    2. **批处理**:利用JDBC的批处理功能,设置PreparedStatement的addBatch()方法添加多条SQL语句,最后调用executeBatch()执行。MyBatis会自动处理这部分逻辑,只需编写普通的插入语句即可。 针对Oracle数据库,我们...

    mysql-connector-java-5.1.46-bin.jar

    在Java应用程序中使用MySQL Connector/J时,首先需要将"mysql-connector-java-5.1.46-bin.jar"添加到项目的类路径中。接着,通过Class.forName()方法加载并注册驱动,如`Class.forName("com.mysql.jdbc.Driver");` ...

    描述Connection、Statement、ResultSet接口的作用

    - **`void addBatch(String sql)`**:将SQL语句添加到批量更新队列中,用于执行批量操作,提高数据处理效率。 - **`int[] executeBatch()`**:执行之前添加到批量更新队列中的所有SQL语句,返回每个语句的影响行数...

    Javaweb学生管理系统

    系统应考虑安全问题,如防止SQL注入、XSS攻击等,并进行性能优化,如使用PreparedStatement预编译SQL,减少数据库查询次数,使用缓存技术提高响应速度。 五、部署与运行 完成开发后,系统需在Web服务器(如Tomcat...

    JAVA 学生管理系统

    为了保证数据的安全性和一致性,系统可能会采用事务处理机制,特别是在涉及到多条记录修改时,如批量添加或删除学生。此外,为了防止SQL注入攻击,应避免在SQL语句中直接拼接用户输入,而是使用参数化查询。 在用户...

    java编写的学生信息管理系统

    例如,使用PreparedStatement预编译SQL,避免SQL注入风险。 3. 查询功能:系统应提供多种查询方式,如按学号、姓名等关键字进行模糊查询,或者通过筛选条件(如性别、专业)进行精确查询。查询结果可以展示在JTable...

    jsp mysql学生管理系统(有文档)

    MySQL连接和查询可以通过JDBC的Connection、Statement或PreparedStatement对象实现。为了提高代码的可维护性和复用性,开发者可能还会使用MVC(Model-View-Controller)设计模式,将业务逻辑、视图展示和数据处理...

    mybatis jar包

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 首先,让我们深入理解MyBatis的核心概念: 1. **SQL映射文件**:...

    1000道 互联网Java架构师面试题 485页_.pdf

    MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 1. Mybatis 的优点: - 灵活性高:SQL 完全手写,可以编写...

    数据库课设java+sql server2008实现企业人事管理系统.zip

    - **安全性**:使用预编译的PreparedStatement防止SQL注入,设置合理的用户认证和授权机制。 - **性能优化**:合理设计索引以加快查询速度,避免全表扫描,考虑批量处理和缓存策略。 6. **测试与部署** - **单元...

    mybatis学习资料

    - 使用预编译语句(PreparedStatement)提高安全性。 #### 六、进阶主题 1. **批处理**: - 批量插入或更新数据,提高性能。 - 使用ExecutorType.BATCH模式进行批处理。 2. **事务管理**: - 使用SqlSession...

    八股文知识点汇总-各互联网大厂java工程师面试题.pdf

    MyBatis 是一个基于 Java 的持久层框架,它简化了对数据库的操作,通过 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 2. **MyBatis...

Global site tag (gtag.js) - Google Analytics