`

(十二) 整合DEMO

阅读更多
package com.shaogq.review.jdbc.connectionDB;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Main {

	private static final Log log = LogFactory.getLog(Main.class);
	
	public static void main(String[] args) {
		
		String url = "jdbc:mysql://localhost:3306/corejava";
		String username = "root";
		String password = "12345678";
		// 1.注册驱动器类
		// 1.(1)自动注册驱动器类(Java Standard Edition Service Provider)
		// 包含META-INF/services/java.sql.Driver文件的JAR文件可以自动注册
		// 1.(2)在JAVA程序中加载驱动器类
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		// 1.(3)通过设置jdbc.drivers属性,并用冒号将他们分割
		// System.setProperty("jdbc.drivers",
		// "com.mysql.jdbc.Driver:oracle.jdbc.driver.OracleDriver");
		// 1.(4)直接通过DriverManager.registerDriver
		// try {
		// DriverManager.registerDriver(new com.mysql.jdbc.Driver());
		// } catch (SQLException e) {
		// e.printStackTrace();
		// }

		try {
			// 2.建立数据库连接
			// 2.(1)建立Connection空对象
			Connection conn = null;
			// 3.建立Statement对象,用于执行静态SQL语句并返回它所生成的结果对象
			// 3.(1)建立Statement空对象
			Statement stat = null;
			try {
				// 2.(2)通过DriverManager.getConnection方法所获得的Connection对象
				conn = DriverManager.getConnection(url, username, password);
				// 7.(1)事务:关闭自动提交模式  
				conn.setAutoCommit(false);
				try {
					/**
					 * 3.(2)创建可滚动和可更新的结果集
					 * ResultSet的type值:
					 * TYPE_FORWARD_ONLY 结果集不能滚动; 
					 * TYPE_SCROLL_INSENSITIVE 结果集可以滚动,但对数据库的变化不敏感;
					 * TPYE_SCROLL_SENSITIVE 结果集可以滚蛋,且对数据库的变化敏感.
					 * 
					 * ResultSet的Concurrency值: 
					 * CONCUR_READ_ONLY 结果集不能用于更新数据库(默认值);
					 * CONCUR_UPDATABLE 结果集可以用于更新数据库.
					 * 
					 */
					Statement stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,
							ResultSet.CONCUR_READ_ONLY);

					// 4.准备要执行的SQL语句
					// 4.(1)executeUpdate 用于执行除SELECT外的DML(UPDATE、INSERT、DELETE)
					//      			    和DDL(CREATE、ALTER、DROP等);
					// 		executeUpdate 对于 SQL 数据操作语言 (DML) 语句,返回行计数 (2) 
					//					    对于什么都不返回的 SQL 语句,返回 0
					// 5.执行SQL语句
					// 5.(1)通过executeUpdate执行删表语句
					String DropTable = "DROP TABLE IF EXISTS test_table";
					int DropTableResult = stmt.executeUpdate(DropTable);
					log.info("DropTableResult = " + DropTableResult + "== 0");
					// 5.(2)通过executeUpdate执行建表表语句
					String createTable = "CREATE TABLE IF NOT EXISTS test_table ("
							+ "id  INT(11) NOT NULL AUTO_INCREMENT, "
							+ "name varchar(20), " + "PRIMARY KEY (`id`))";
					int createTableResult = stmt.executeUpdate(createTable);
					log.info("createTableResult = " + createTableResult + "== 0");
					// 5.(3)通过executeUpdate执行插入操作
					String insertData = "INSERT INTO test_table (name) VALUES('a')";
					int insertDataResult = stmt.executeUpdate(insertData);
					log.info("insertDataResult = " + insertDataResult + "== 0");
					
					// 3.(3)或预备语句PreparedStatement :
					// PreparedStatement prepStmt =
					// conn.prepareStatement(command, type, concurrency);
					String insertPreparedData = "INSERT INTO test_table (name) VALUES(?)";
					PreparedStatement prepStmt = conn.prepareStatement(
							insertPreparedData, ResultSet.TYPE_SCROLL_INSENSITIVE,
							ResultSet.CONCUR_READ_ONLY);
					String[] names = new String[]{"b", "c", "d"}; 
					// 5.(4)通过PreparedStatement执行批量插入操作
	                for(int i=0;i<names.length;i++){  
	                    prepStmt.setString(1, names[i]);  
	                    //将一组参数添加到此 PreparedStatement 对象的批处理命令中
	                    prepStmt.addBatch();  
	                }
	                
	                int[] executeBatchResults = prepStmt.executeBatch(); 
	                for(int i=0;i<executeBatchResults.length;i++){
	                	log.info(i + " value : " + executeBatchResults[i]);
	                }
	                prepStmt.close(); 

					// 4.(2)执行SELECT方法必须使用executeQuery方法
					String query = "SELECT id,name FROM test_table";
					// 5.(5)通过executeQuery查询结果集
					ResultSet queryResult = stmt.executeQuery(query);
					while(queryResult.next()){  
						log.info(queryResult.getInt(1) + " " +queryResult.getString(2));
					}  
					
					// 5.(6)通过execute进行查询,并确定是否存在结果集
					// 如果有,则通过元数据遍历结果集的表头和值
					log.info("execute");
					boolean hasResult = stmt.execute(query);
					if(hasResult){
						queryResult = stmt.getResultSet();
						// 6.(1)得到ResultSet的元数据
						ResultSetMetaData metaData = queryResult.getMetaData();
						int columnCount = metaData.getColumnCount();  
				        log.info("columnCount = " + columnCount);  

						while (queryResult.next()) {
							for (int i = 1; i <= columnCount; i++) {
								log.info("第" + i + "行 "
										+ metaData.getColumnLabel(i) + " = "
										+ queryResult.getString(i));
							}
						}
				          
				        queryResult.close();  
					}
					
					// 6.(2)得到Connection的元数据DatabaseMetaData,并打印表的信息
					log.info("DatabaseMetaData");
					DatabaseMetaData meta = conn.getMetaData();     
					// 从数据库连接中获取一个DatabaseMetaData对象
					ResultSet result = meta.getTables(null, null, null,
							new String[] { "TABLE" });
					while (result.next()) {
				    	//该结果集每行包含数据库中一张表的信息,第三列是表的名称。
				        log.info(result.getString(3));      
				    }  
				} catch (Exception e) {
					// 7.(2)事务:回滚
					conn.rollback();
					e.printStackTrace();
				}
			} finally {
				// 7.(2)事务:提交事务
				conn.commit();
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

}
 
分享到:
评论

相关推荐

    三大框架ssh整合Demo

    在"三大框架ssh整合Demo"中,Struts2作为前端控制器,接收用户的请求,并根据配置决定调用哪个Action进行处理,最后返回相应的视图。 **Hibernate** 是一个强大的ORM(对象关系映射)框架,它简化了Java应用与...

    springmvc spring hibernate整合Demo

    这个"springmvc spring hibernate整合Demo"旨在帮助初学者理解如何将这三个框架协同工作,实现一个完整的CRUD(创建、读取、更新、删除)应用。 Spring MVC 是 Spring 框架的一部分,专门用于构建Web应用程序。它...

    SSM整合的Demo

    这个名为"SSM整合的Demo"的项目是一个非Maven构建的示例,特别适合初学者用来学习和理解SSM框架的集成与应用。 **Spring框架**是Java企业级应用的核心框架,它提供了依赖注入(Dependency Injection, DI)和面向切...

    mavan+ssm整合demo

    本整合项目“mavan+ssm整合demo”提供了一个可以直接运行的示例,方便开发者快速理解和学习SSM与Maven的结合使用。 1. **Spring框架**:Spring是Java领域的一个全功能的框架,核心特性包括依赖注入(DI)和面向切面...

    ssm整合demo代码

    在这个"ssm整合demo代码"中,我们可以学习到以下几个关键知识点: 1. **Spring框架**:Spring是Java企业级应用的核心框架,它提供了AOP(面向切面编程)、DI(依赖注入)以及对其他框架的集成支持。在SSM整合中,...

    ssh整合demo 整合在一起

    ssh整合demo 整合, structs 附带了多个测试页面可以跳转,写了一个简单action,structs.xml 使用了模糊匹配, spring 注释方式 注入依赖,xml方式实现aop,hibernate 配置好数据库,可自动生成表,标准的model ,dao...

    ssm框架整合小demo

    这个"ssm框架整合小demo"提供了一个实践性的示例,旨在帮助开发者理解和应用这些技术。以下是对这个项目及其包含文件的详细解读。 首先,Spring是一个全面的后端应用程序管理框架,它提供了依赖注入(DI)和面向切...

    SSM整合demo maven工程

    通过这个"SSM整合demo maven工程",开发者可以学习到如何将这三个框架有效地组合在一起,构建出一个完整的Web应用,理解它们之间的交互机制,以及如何在实际项目中运用这些技术。对于初学者来说,这是一个很好的实践...

    ssh框架整合demo,经典整合,初学必备

    这个"ssh框架整合demo"提供了一个完整的、适用于初学者的项目模板,帮助开发者快速理解和搭建基于这三个框架的应用。以下是对这些框架及其整合的详细解析: 1. **Struts2**:Struts2是一个基于MVC(Model-View-...

    springboot+mybatis 整合Demo下载

    现在我们来深入探讨如何将这两个框架整合,并通过这个名为"xyspringboot"的Demo来学习相关知识。 1. **SpringBoot概述**: SpringBoot的核心理念是“约定优于配置”,它默认配置了许多常见的设置,比如嵌入式Web...

    ssm整合Demo源文件.zip

    这个"ssm整合Demo源文件.zip"应该包含了基于这三个框架构建的一个基础示例项目,帮助学习者理解如何将它们协同工作。下面将详细解释Spring MVC请求转发规则以及SSM整合的关键点。 Spring MVC是Spring框架的一个模块...

    spring3.2.6struts2.3.15MyBatis3整合DEMO

    在这个整合DEMO中,我们首先会看到Spring的配置文件,其中会包含对Struts 2和MyBatis的配置。Spring会管理Struts 2的Action,同时提供数据源和事务管理。接着,Struts 2的配置文件会定义Action的映射,以及转发到...

    SpringMVC+Spring+Mybatis整合DEMO

    本DEMO将详细展示如何将这三个框架整合在一起,以便于开发者理解并掌握其集成过程。** 首先,**SpringMVC** 是Spring框架的一个模块,主要用于处理Web应用的请求和响应。它提供了模型-视图-控制器(MVC)架构模式,...

    Springboot整合RabbitMQ最简单demo

    Springboot整合RabbitMQ最简单demo,适用于springcloud项目,作为消息总线适用,需要安装RabbitMQ,Mac linux可以使用命令行一键安装,在项目配置文件配置好端口即可(已默认配置),启动项目访问8080端口,参数见controller.

    ssm dubbo整合demo

    在这个"ssm dubbo整合demo"中,我们主要关注如何将这三个框架与Dubbo服务治理框架进行集成,以及在配置过程中如何正确设置IP地址以确保服务间的通信。 首先,SSM是Java开发中的一个经典组合,Spring作为依赖注入...

    Springmvc+hibernate整合Demo

    在这个“Springmvc+hibernate整合Demo”中,我们将会探讨如何将这两个框架结合在一起,以创建一个功能丰富的客户关系管理(CRM)系统。 **Spring MVC 框架** Spring MVC 是 Spring 框架的一部分,提供了一个用于...

    springMVC+mybatis整合demo

    这篇教程将详细介绍如何将这两个框架整合在一起,以实现高效、灵活的Web应用程序。 首先,我们需要理解SpringMVC的核心概念。SpringMVC通过DispatcherServlet作为前端控制器接收HTTP请求,然后根据请求映射信息找到...

    Spring Spring MVC Mybatis整合demo

    Spring Spring MVC Mybatis三大框架的整合demo,里面包含写好的示例程序。可以作为所有SSM爱好者开发的基础模板,拿来即用。内附解释文档。由于涉及隐私问题,代码中将POM删除,需要自己写POM引入jar包。

    SpringMVC+hibernate4.3+Spring4.1整合demo

    在本示例的"SpringMVC+hibernate4.3+Spring4.1整合demo"中,提供的登陆功能可能就包含了这些整合步骤。通过创建一个简单的登录表单,用户输入用户名和密码,Controller接收请求,调用Service进行验证,Service通过...

Global site tag (gtag.js) - Google Analytics