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();
}
}
}
分享到:
相关推荐
springmvc spring hibernate整合Demo 包含了CRUD 帮助初学者快速学习springmvc
hibernate与spring整合demohibernate与spring整合demo
Spring Mybatis Spring-MVC整合demo
ssh整合demo 整合, structs 附带了多个测试页面可以跳转,写了一个简单action,structs.xml 使用了模糊匹配, spring 注释方式 注入依赖,xml方式实现aop,hibernate 配置好数据库,可自动生成表,标准的model ,dao...
SSH整合demo,SSH环境的搭建,及其整合。 SSH整合demo,SSH环境的搭建,及其整合。
该工程代码是ssm框架整合的一个demo代码,可以作为参考,很简单
springboot+mybatis 整合Demo下载,直接下载导入就可以使用。例子已经写的非常完善。
springMVC+SpringBoot+Mybatis整合demo
三大框架struts2 hibernate spring 整合的实例项目
此demo将springmvc和mybatis进行了整合,需要学习的可以下载
自己整合的ssm框架小demo,大家一起学习交流。里面有详细的说明文件。
spring3.2.6 struts2.3.15 MyBatis3整合DEMO,数据库:http://dr-yanglong.iteye.com/blog/1989484
ssm代码整合demo ,spring- 4.0.2, mybatis-3.2.8 含代码lib库 集成demo
Springboot整合RabbitMQ最简单demo,适用于springcloud项目,作为消息总线适用,需要安装RabbitMQ,Mac linux可以使用命令行一键安装,在项目配置文件配置好端口即可(已默认配置),启动项目访问8080端口,参数见controller.
项目采用了Spring、SpringMVC、MyBatis搭建,非maven项目,包含sql脚本,适合入门学习。
springboot与mybatisplus整合demo,最简单的整合方式,供大家参考学习,
ssm和maven整合的项目,可导入直接运行运行,亲测可用
springMvc+mybatis+springSecurity整合demo
Spring Spring MVC Mybatis三大框架的整合demo,里面包含写好的示例程序。可以作为所有SSM爱好者开发的基础模板,拿来即用。内附解释文档。由于涉及隐私问题,代码中将POM删除,需要自己写POM引入jar包。
整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),演示搭建项目架构原型。 项目架构原型:Struts2.3.16+Spring4.1.1+Hibernate4.3.6。 此外,还有:log4j、slf4j、ehcache等知识点。 参考文档:...