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"中,Struts2作为前端控制器,接收用户的请求,并根据配置决定调用哪个Action进行处理,最后返回相应的视图。 **Hibernate** 是一个强大的ORM(对象关系映射)框架,它简化了Java应用与...
这个"springmvc spring hibernate整合Demo"旨在帮助初学者理解如何将这三个框架协同工作,实现一个完整的CRUD(创建、读取、更新、删除)应用。 Spring MVC 是 Spring 框架的一部分,专门用于构建Web应用程序。它...
这个名为"SSM整合的Demo"的项目是一个非Maven构建的示例,特别适合初学者用来学习和理解SSM框架的集成与应用。 **Spring框架**是Java企业级应用的核心框架,它提供了依赖注入(Dependency Injection, DI)和面向切...
本整合项目“mavan+ssm整合demo”提供了一个可以直接运行的示例,方便开发者快速理解和学习SSM与Maven的结合使用。 1. **Spring框架**:Spring是Java领域的一个全功能的框架,核心特性包括依赖注入(DI)和面向切面...
在这个"ssm整合demo代码"中,我们可以学习到以下几个关键知识点: 1. **Spring框架**:Spring是Java企业级应用的核心框架,它提供了AOP(面向切面编程)、DI(依赖注入)以及对其他框架的集成支持。在SSM整合中,...
ssh整合demo 整合, structs 附带了多个测试页面可以跳转,写了一个简单action,structs.xml 使用了模糊匹配, spring 注释方式 注入依赖,xml方式实现aop,hibernate 配置好数据库,可自动生成表,标准的model ,dao...
这个"ssm框架整合小demo"提供了一个实践性的示例,旨在帮助开发者理解和应用这些技术。以下是对这个项目及其包含文件的详细解读。 首先,Spring是一个全面的后端应用程序管理框架,它提供了依赖注入(DI)和面向切...
通过这个"SSM整合demo maven工程",开发者可以学习到如何将这三个框架有效地组合在一起,构建出一个完整的Web应用,理解它们之间的交互机制,以及如何在实际项目中运用这些技术。对于初学者来说,这是一个很好的实践...
这个"ssh框架整合demo"提供了一个完整的、适用于初学者的项目模板,帮助开发者快速理解和搭建基于这三个框架的应用。以下是对这些框架及其整合的详细解析: 1. **Struts2**:Struts2是一个基于MVC(Model-View-...
现在我们来深入探讨如何将这两个框架整合,并通过这个名为"xyspringboot"的Demo来学习相关知识。 1. **SpringBoot概述**: SpringBoot的核心理念是“约定优于配置”,它默认配置了许多常见的设置,比如嵌入式Web...
这个"ssm整合Demo源文件.zip"应该包含了基于这三个框架构建的一个基础示例项目,帮助学习者理解如何将它们协同工作。下面将详细解释Spring MVC请求转发规则以及SSM整合的关键点。 Spring MVC是Spring框架的一个模块...
在这个整合DEMO中,我们首先会看到Spring的配置文件,其中会包含对Struts 2和MyBatis的配置。Spring会管理Struts 2的Action,同时提供数据源和事务管理。接着,Struts 2的配置文件会定义Action的映射,以及转发到...
本DEMO将详细展示如何将这三个框架整合在一起,以便于开发者理解并掌握其集成过程。** 首先,**SpringMVC** 是Spring框架的一个模块,主要用于处理Web应用的请求和响应。它提供了模型-视图-控制器(MVC)架构模式,...
Springboot整合RabbitMQ最简单demo,适用于springcloud项目,作为消息总线适用,需要安装RabbitMQ,Mac linux可以使用命令行一键安装,在项目配置文件配置好端口即可(已默认配置),启动项目访问8080端口,参数见controller.
在这个"ssm dubbo整合demo"中,我们主要关注如何将这三个框架与Dubbo服务治理框架进行集成,以及在配置过程中如何正确设置IP地址以确保服务间的通信。 首先,SSM是Java开发中的一个经典组合,Spring作为依赖注入...
在这个“Springmvc+hibernate整合Demo”中,我们将会探讨如何将这两个框架结合在一起,以创建一个功能丰富的客户关系管理(CRM)系统。 **Spring MVC 框架** Spring MVC 是 Spring 框架的一部分,提供了一个用于...
这篇教程将详细介绍如何将这两个框架整合在一起,以实现高效、灵活的Web应用程序。 首先,我们需要理解SpringMVC的核心概念。SpringMVC通过DispatcherServlet作为前端控制器接收HTTP请求,然后根据请求映射信息找到...
Spring Spring MVC Mybatis三大框架的整合demo,里面包含写好的示例程序。可以作为所有SSM爱好者开发的基础模板,拿来即用。内附解释文档。由于涉及隐私问题,代码中将POM删除,需要自己写POM引入jar包。
在本示例的"SpringMVC+hibernate4.3+Spring4.1整合demo"中,提供的登陆功能可能就包含了这些整合步骤。通过创建一个简单的登录表单,用户输入用户名和密码,Controller接收请求,调用Service进行验证,Service通过...