`
dreamoftch
  • 浏览: 495521 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

标准JDBC步骤以及jdbc batch 批处理

阅读更多

jdbc包含batch功能,使用executeBatch方法实现批量操作。

 

 

void jdbc() throws Exception{
		Connection conn = null;
		PreparedStatement statement = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");//加载数据库驱动类
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");//获取连接
			statement = conn.prepareStatement("insert into coures(id,name,age) values(?,?,?)");//创建PreparedStatement
			conn.setSavepoint();//设置保存点
			conn.setAutoCommit(false);//关闭事务自动提交
			for(int i=0;i<100;i++){
				statement.setInt(1, i);//索引从 1 开始
				statement.setString(2, "tch");
				statement.setInt(3, 23);
				statement.addBatch();//添加到批处理
			}
			statement.executeBatch();//执行批处理
			conn.commit();//没有异常,提交事务
		} catch (Exception e) {
			if(conn != null){
				conn.rollback();//出现异常时,回滚到保存点
			}
			e.printStackTrace();
		}finally{//关闭资源
			if(statement != null){
				statement.close();
			}
			if(conn != null){
				conn.close();
			}
		}
	}
 

 

 

 

代码片段:

1.使用Statement

Connection conn = ConnectDBUtil.getConnection(); //从自己写的工具类获取Connection
conn.setAutoCommit(false); //设定自动提交为false
Statement batchStat = conn.createStatement(); //创建Statement
for(int i=0 ; i<10000 ; i++){
String sql = "insert into test(id,name) values(" + i + ",'Jason')";
batchStat.addBatch(insert); //这里将sql语句加到batch里面
}
batchStat.executeBatch(); //执行batch,将batch里面的sql发到数据库
conn.commit();

 

2.使用PreparedStatement

Connection conn = ConnectDBUtil.getConnection(); //从自己写的工具类获取Connection
conn.setAutoCommit(false); //设定自动提交为false
PreparedStatement batchStat =
conn_manager.prepareStatement("insert into test(id,name) values(?,?)");
for(int i=0 ; i<10000 ; i++){
batchStat.setInt(1,i);
batchStat.setString(2,"Jason");
batchStat.addBatch();
}
batchStat.executeBatch(); //执行batch,将batch里面的sql发到数据库
conn.commit();

 

 

MySQL and Java JDBC - Tutorial

Lars Vogel

 

Version 1.2

 

19.07.2013

Revision History
Revision 0.1 25.05.2008 Lars
Vogel
created
Revision 0.2 - 1.2 14.09.2009 - 19.07.2013 Lars
Vogel
bug fixes and enhancements

MySQL and Java JDBC

This tutorial describes how to use Java JDBC to connect to MySQL and perform SQL queries, database inserts and deletes.


1. Connection to database with Java

The interface for accessing relational databases from Java is Java Database Connectivity (JDBC). Via JDBC you create a connection to the database, issue database queries and updates and receive the results.

JDBC provides an interface which allows you to perform SQL operations independently of the instance of the used database. To use JDBC you require the database specific implementation of the JDBC driver.

2. Introduction to MySQL

To learn to install and use MySQL please see MySQL - Tutorial.

The following description will assume that you have successfully installed MySQL and know how to access MySQL via the command line.

3. MySQL JDBC driver

To connect to MySQL from Java you have to use the JDBC driver from MySQL. The MySQL JDBC driver is called MySQL Connector/J. You find the latest MySQL JDBC driver under the following URL:http://dev.mysql.com/downloads/connector/j .

The download contains a JAR file which we require later.

<iframe id="aswift_1" style="left: 0px; position: absolute; top: 0px;" name="aswift_1" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="728" height="90"></iframe>

4. Exercise: create example database

In this exercise you create a new database, a new user and an example table. For this connect to the MySQL server via the mysql command line client.

Create a new database called feedback and start using it with the following command.

 

create database feedback;
use feedback; 

 

Create a user with the following command.

 

CREATE USER sqluser IDENTIFIED BY 'sqluserpw'; 

grant usage on *.* to sqluser@localhost identified by 'sqluserpw'; 
grant all privileges on feedback.* to sqluser@localhost; 

 

Now create a sample database table with example content via the following SQL statement.

 

CREATE TABLE COMMENTS (id INT NOT NULL AUTO_INCREMENT, 
    MYUSER VARCHAR(30) NOT NULL,
    EMAIL VARCHAR(30), 
    WEBPAGE VARCHAR(100) NOT NULL, 
    DATUM DATE NOT NULL, 
    SUMMARY VARCHAR(40) NOT NULL,
    COMMENTS VARCHAR(400) NOT NULL,
    PRIMARY KEY (ID));

INSERT INTO COMMENTS values (default, 'lars', 'myemail@gmail.com','http://www.vogella.com', '2009-09-14 10:33:11', 'Summary','My first comment'); 

 

 

5. Java JDBC

Create a Java project and a package called de.vogella.mysql.first.

Create a lib folder and copy the JDBC driver into this folder. Add the JDBC driver to your classpath. See Adding jars to the classpath for details.

Create the following class to connect to the MySQL database and perform queries, inserts and deletes. It also prints the metadata (table name, column names) of a query result.

 

package de.vogella.mysql.first;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;

public class MySQLAccess {
  private Connection connect = null;
  private Statement statement = null;
  private PreparedStatement preparedStatement = null;
  private ResultSet resultSet = null;

  public void readDataBase() throws Exception {
    try {
      // This will load the MySQL driver, each DB has its own driver
      Class.forName("com.mysql.jdbc.Driver");
      // Setup the connection with the DB
      connect = DriverManager
          .getConnection("jdbc:mysql://localhost/feedback?"
              + "user=sqluser&password=sqluserpw");

      // Statements allow to issue SQL queries to the database
      statement = connect.createStatement();
      // Result set get the result of the SQL query
      resultSet = statement
          .executeQuery("select * from FEEDBACK.COMMENTS");
      writeResultSet(resultSet);

      // PreparedStatements can use variables and are more efficient
      preparedStatement = connect
          .prepareStatement("insert into  FEEDBACK.COMMENTS values (default, ?, ?, ?, ? , ?, ?)");
      // "myuser, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS");
      // Parameters start with 1
      preparedStatement.setString(1, "Test");
      preparedStatement.setString(2, "TestEmail");
      preparedStatement.setString(3, "TestWebpage");
      preparedStatement.setDate(4, new java.sql.Date(2009, 12, 11));
      preparedStatement.setString(5, "TestSummary");
      preparedStatement.setString(6, "TestComment");
      preparedStatement.executeUpdate();

      preparedStatement = connect
          .prepareStatement("SELECT myuser, webpage, datum, summary, COMMENTS from FEEDBACK.COMMENTS");
      resultSet = preparedStatement.executeQuery();
      writeResultSet(resultSet);

      // Remove again the insert comment
      preparedStatement = connect
      .prepareStatement("delete from FEEDBACK.COMMENTS where myuser= ? ; ");
      preparedStatement.setString(1, "Test");
      preparedStatement.executeUpdate();
      
      resultSet = statement
      .executeQuery("select * from FEEDBACK.COMMENTS");
      writeMetaData(resultSet);
      
    } catch (Exception e) {
      throw e;
    } finally {
      close();
    }

  }

  private void writeMetaData(ResultSet resultSet) throws SQLException {
    //   Now get some metadata from the database
    // Result set get the result of the SQL query
    
    System.out.println("The columns in the table are: ");
    
    System.out.println("Table: " + resultSet.getMetaData().getTableName(1));
    for  (int i = 1; i<= resultSet.getMetaData().getColumnCount(); i++){
      System.out.println("Column " +i  + " "+ resultSet.getMetaData().getColumnName(i));
    }
  }

  private void writeResultSet(ResultSet resultSet) throws SQLException {
    // ResultSet is initially before the first data set
    while (resultSet.next()) {
      // It is possible to get the columns via name
      // also possible to get the columns via the column number
      // which starts at 1
      // e.g. resultSet.getSTring(2);
      String user = resultSet.getString("myuser");
      String website = resultSet.getString("webpage");
      String summary = resultSet.getString("summary");
      Date date = resultSet.getDate("datum");
      String comment = resultSet.getString("comments");
      System.out.println("User: " + user);
      System.out.println("Website: " + website);
      System.out.println("Summary: " + summary);
      System.out.println("Date: " + date);
      System.out.println("Comment: " + comment);
    }
  }

  // You need to close the resultSet
  private void close() {
    try {
      if (resultSet != null) {
        resultSet.close();
      }

      if (statement != null) {
        statement.close();
      }

      if (connect != null) {
        connect.close();
      }
    } catch (Exception e) {

    }
  }

} 

 

Create the following main program to test your class.

 

package de.vogella.mysql.first.test;

import de.vogella.mysql.first.MySQLAccess;

public class Main {
  public static void main(String[] args) throws Exception {
    MySQLAccess dao = new MySQLAccess();
    dao.readDataBase();
  }


} 

 

6. Thank you

 

 

jdbc 连接 mysql:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBC_Test {
	// 创建静态全局变量
	static Connection conn;

	static Statement st;

	public static void main(String[] args) {
		insert();	//插入添加记录
		update();	//更新记录数据
		delete();	//删除记录
		query();	//查询记录并显示
	}
	
	/* 插入数据记录,并输出插入的数据记录数*/
	public static void insert() {
		
		conn = getConnection();	// 首先要获取连接,即连接到数据库

		try {
			String sql = "INSERT INTO staff(name, age, sex,address, depart, worklen,wage)"
					+ " VALUES ('Tom1', 32, 'M', 'china','Personnel','3','3000')";	// 插入数据的sql语句
			
			st = (Statement) conn.createStatement();	// 创建用于执行静态sql语句的Statement对象
			
			int count = st.executeUpdate(sql);	// 执行插入操作的sql语句,并返回插入数据的个数
			
			System.out.println("向staff表中插入 " + count + " 条数据");	//输出插入操作的处理结果
			
			conn.close();	//关闭数据库连接
			
		} catch (SQLException e) {
			System.out.println("插入数据失败" + e.getMessage());
		}
	}
	
	/* 更新符合要求的记录,并返回更新的记录数目*/
	public static void update() {
		conn = getConnection();	//同样先要获取连接,即连接到数据库
		try {
			String sql = "update staff set wage='2200' where name = 'lucy'";// 更新数据的sql语句
			
			st = (Statement) conn.createStatement();	//创建用于执行静态sql语句的Statement对象,st属局部变量
			
			int count = st.executeUpdate(sql);// 执行更新操作的sql语句,返回更新数据的个数
			
			System.out.println("staff表中更新 " + count + " 条数据");		//输出更新操作的处理结果
			
			conn.close();	//关闭数据库连接
			
		} catch (SQLException e) {
			System.out.println("更新数据失败");
		}
	}

	/* 查询数据库,输出符合要求的记录的情况*/
	public static void query() {
		
		conn = getConnection();	//同样先要获取连接,即连接到数据库
		try {
			String sql = "select * from staff";		// 查询数据的sql语句
			st = (Statement) conn.createStatement();	//创建用于执行静态sql语句的Statement对象,st属局部变量
			
			ResultSet rs = st.executeQuery(sql);	//执行sql查询语句,返回查询数据的结果集
			System.out.println("最后的查询结果为:");
			while (rs.next()) {	// 判断是否还有下一个数据
				
				// 根据字段名获取相应的值
				String name = rs.getString("name");
				int age = rs.getInt("age");
				String sex = rs.getString("sex");
				String address = rs.getString("address");
				String depart = rs.getString("depart");
				String worklen = rs.getString("worklen");
				String wage = rs.getString("wage");
				
				//输出查到的记录的各个字段的值
				System.out.println(name + " " + age + " " + sex + " " + address
						+ " " + depart + " " + worklen + " " + wage);
			
			}
			conn.close();	//关闭数据库连接
			
		} catch (SQLException e) {
			System.out.println("查询数据失败");
		}
	}

	/* 删除符合要求的记录,输出情况*/
	public static void delete() {

		conn = getConnection();	//同样先要获取连接,即连接到数据库
		try {
			String sql = "delete from staff  where name = 'lili'";// 删除数据的sql语句
			st = (Statement) conn.createStatement();	//创建用于执行静态sql语句的Statement对象,st属局部变量
			
			int count = st.executeUpdate(sql);// 执行sql删除语句,返回删除数据的数量
			
			System.out.println("staff表中删除 " + count + " 条数据\n");	//输出删除操作的处理结果
			
			conn.close();	//关闭数据库连接
			
		} catch (SQLException e) {
			System.out.println("删除数据失败");
		}
		
	}
	
	/* 获取数据库连接的函数*/
	public static Connection getConnection() {
		Connection con = null;	//创建用于连接数据库的Connection对象
		try {
			Class.forName("com.mysql.jdbc.Driver");// 加载Mysql数据驱动
			
			con = DriverManager.getConnection(
					"jdbc:mysql://localhost:3306/myuser", "root", "root");// 创建数据连接
			
		} catch (Exception e) {
			System.out.println("数据库连接失败" + e.getMessage());
		}
		return con;	//返回所建立的数据库连接
	}
}

 

分享到:
评论

相关推荐

    Spring Batch批处理框架

    Spring Batch通过分区步骤(PartitionStep)支持了分片处理,这使得批处理作业能够利用分布式系统的计算能力来提高处理速度。 8. Spring Batch的持久化 Spring Batch支持多种数据源和持久化方式,包括关系型数据库...

    spring batch批处理 教程

    Spring Batch 是一个强大的批处理框架,它为Java开发者提供了处理大量数据的能力,广泛应用于企业级应用和大数据处理中。在本文中,我们将深入探讨Spring Batch的各个方面,包括其概念、结构、执行流程以及如何在...

    JDBC高级批处理

    深入研究JDBC源码,可以帮助我们理解批处理在底层是如何工作的,以及如何针对特定数据库优化性能。 ### 8. 工具支持 很多数据库管理工具如MySQL Workbench、Navicat等也支持批处理操作,可以在图形界面中方便地...

    【SpringBatch】批处理框架整合配置过程文档.docx

    这两个依赖分别提供了 Spring Boot 对 Spring Batch 的集成以及批处理的核心功能: ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-batch &lt;groupId&gt;org.springframework....

    JDBC操作步骤以及数据库连接操作.doc

    JDBC(Java Database Connectivity)是Java编程语言中用于与关系数据库交互的一组接口和类,它为各种数据库提供了标准化的访问方法。以下是JDBC操作步骤的详细解释: 1. **加载数据库驱动程序**: 在进行数据库...

    JDBC:MySQL8.0.29驱动

    JDBC(Java Database Connectivity)是Java编程语言中用于与关系数据库交互的一种标准接口。它是Java平台的标准部分,允许开发人员使用SQL语言在Java应用程序中执行数据库操作。MySQL JDBC驱动,也称为MySQL ...

    JDBC基础知识1_保存大文本_分页_批处理

    标题“JDBC基础知识1_保存大文本_分页_批处理”揭示了本文将要讨论的是Java数据库连接(Java Database Connectivity, JDBC)的基础知识,主要包括如何在数据库中处理大文本数据、实现分页查询以及利用批处理提高...

    JDBC驱动及JAR包

    - 使用批处理(Batch Processing)可以批量提交SQL语句,减少网络往返次数。 - 合理设置连接池,避免频繁创建和关闭连接。 - 使用数据库的连接复用技术,如Oracle的Physical Pools或C3P0连接池。 6. **注意事项*...

    jdbc批量插入大字段

    首先,我们需要了解JDBC(Java Database Connectivity),它是Java编程语言与各种数据库之间通信的标准API。使用JDBC,我们可以编写Java代码来执行SQL语句,包括插入数据。对于Blob字段的处理,JDBC提供了一种流式...

    jdbc的多个pdf帮助文档

    8. **批处理**:通过BatchUpdate接口,可以一次提交多条SQL语句,提高效率。 9. **数据库连接池**:如C3P0、Apache DBCP、HikariCP等,通过复用数据库连接,提高应用程序的性能和可扩展性。 10. **JDBC的异常处理*...

    hibernate-batch-size-test:Hibernate hibernate.jdbc.batch_size 测试

    `hibernate.jdbc.batch_size`是Hibernate配置中的一个重要参数,用于控制批处理操作的大小。本文将深入探讨这个参数的意义、作用以及如何在实际应用中进行测试。 批量插入是提高数据库性能的有效手段,特别是在大量...

    JDBC数据库

    1. **批处理(Batch Processing)**:多个SQL语句可以一起提交,提高性能。 2. **使用连接池(Connection Pool)**:避免频繁创建和关闭连接,减少系统开销。 3. **设置合适的缓冲大小**:调整`ResultSet`的fetch ...

    数据库系统的JDBC驱动程序.rar

    - 使用批处理(Batch Processing)处理大量相似的SQL语句。 - 设置合适的连接池大小,有效管理数据库连接,避免频繁创建和关闭连接。 - 使用数据库连接池(如C3P0、HikariCP、Apache DBCP等),提高连接复用性。 ...

    jdbc8.jar-oracle12

    Oracle JDBC驱动提供了许多性能优化选项,如批处理(batch processing)、预编译的语句(prepared statements)和连接池(connection pooling)。通过合理利用这些特性,可以显著提升应用的性能和可伸缩性。 总之,...

    Informix_JDBC_Driver.rar

    Informix JDBC驱动提供了多种性能优化选项,如批处理(Batch Updates)、预编译的SQL语句以及连接池管理,这些都可以提高应用程序的性能。 八、异常处理 在使用Informix JDBC驱动时,应正确处理可能抛出的...

    sqlserver2000 jdbc(3jar包)

    - 对于大数据量操作,考虑使用批处理(Batch Processing)来提升效率。 - 注意调整SQL语句,避免全表扫描,利用索引提高查询速度。 总之,SQL Server 2000的JDBC驱动提供了Java应用程序与数据库的连接能力,正确...

    JDBC连接实现简单学生管理系统(附数据库).zip

    - 使用批处理(batch processing)可以提高大量插入或更新操作的效率。 - 考虑使用连接池(如C3P0、HikariCP)管理数据库连接,以减少连接创建和销毁的开销。 通过这个简单的学生管理系统,开发者可以学习到如何...

    JDBC SP3

    6. **批处理(Batch Processing)**:允许一次性发送多个SQL语句到数据库,减少网络通信次数,提升效率。 **JDBC与SQL Server的交互** 在使用JDBC访问SQL Server时,我们需要使用Microsoft提供的JDBC驱动,如sql...

    logstash集成logstash-input-jdbc

    7. **性能优化**:根据实际需求调整 Logstash 的并行度(worker 参数)、批处理大小(batch_size 参数)以及重试机制等,以优化数据同步性能。 8. **安全性和监控**:考虑数据库和 Elasticsearch 的安全性设置,如...

Global site tag (gtag.js) - Google Analytics