JavaSE基础之JDBC
JavaSE基础之JDBC
1、JDBC 的步骤:
①加载数据库驱动;
a.MySQL:com.mysql.jdbc.Driver;
b.SQLServer:com.microsoft.jdbc.sqlserver.SQLServerDriver;
c.Oracle:oracle.jdbc.driver.OracleDriver;
②获取数据库链接;
a.MySQL:jdbc:mysql://localhost:3306/DataBaseName;
b.SQLServer:jdbc:sqlserver://localhost:1433; DatabaseName=DataBaseName;
c.Oracle:jdbc:oracle:thin:@localhost:1521:orcl;
③创建SQL语句对象;
④执行SQL语句对象;
a.如果是insert、delete、update,则返回 int;
b.如果是query,则返回ResultSet,需要封装结果集。
⑤关闭数据库资源。
2、JDBC 的工具类(以链接MySQL为例):DBUtil.java
package cn.com.zfc.util; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
*
* @title DbUtil
* @describe 连接数据库的帮助类:链接 MySQL 数据库
* @author 张富昌
* @date 2016年8月23日上午9:52:44
*/
public class DbUtil {
/* 数据库链接的 URL,数据库名称可随意更改 */
private final static String URL = "jdbc:mysql://localhost:3306/library";
/* 数据库用户名 */
private final static String USERNAME = "root";
/* 数据库密码 */
private final static String PASSWORD = "root";
/* 数据库链接对象 */
private Connection connection = null;
/* 预处理语句对象,相同的 sql 语句只编译一次 */
private PreparedStatement preparedStatement = null;
/* 结果集对象,用于存储查询的数据 */
private ResultSet resultSet = null;
/* 结果集结构化对象,用于对结果集的处理,方便获取数据 */
private ResultSetMetaData resultSetMetaData = null; /**
*
* 功能:1、加载数据库驱动包
*
*/
static {
try {
// 需要加载数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
System.out.println("加载数据库驱动包出现了异常...");
e.printStackTrace();
}
} /**
*
* 功能:2、获取数据库链接
*
* 参数:
*
* 返回类型:Connection
*/
private Connection getConnection() {
try {
connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
return connection;
} catch (SQLException e) {
System.out.println("获取链接出现了异常");
e.printStackTrace();
}
return null;
} /**
*
* 功能:3、提供更新的方法,包括(添加、修改、删除)
*
* 参数: String sql, Object... objects
*
* 返回类型:int
*/
public int update(String sql, Object... objects) {
// 1、创建数据库链接对象
connection = getConnection(); // 2、创建预处理语句对象
try {
preparedStatement = connection.prepareStatement(sql); // 3、遍历参数 Object,代替 SQL 语句中的占位符(如果有)
for (int i = 0; i < objects.length; i++) {
preparedStatement.setObject(i + 1, objects[i]);
} // 4、执行 sql 语句
return preparedStatement.executeUpdate();
} catch (SQLException e) {
System.out.println("创建预处理语句对象出现了异常...");
e.printStackTrace();
} finally {
// 5、关闭数据库资源
release();
}
return -1; } /**
*
* 功能:4、查询数据库中的信息
*
* 参数:String sql, Object... objects
*
* 返回类型:List<Map<String,Object>>
*/
public List<Map<String, Object>> query(String sql, Object... objects) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
// 1、创建数据库链接对象
connection = getConnection(); // 2、创建预处理语句对象
try {
preparedStatement = connection.prepareStatement(sql); // 3、遍历参数 Object
for (int i = 0; i < objects.length; i++) {
preparedStatement.setObject(i + 1, objects[i]);
}
// 4、执行 SQL 语句,创建结果集对象
resultSet = preparedStatement.executeQuery(); // 5、创建结果集结构化对象
resultSetMetaData = resultSet.getMetaData(); // 6、遍历结果集,把存储数据类型转化为 List<Map<String, Object>>
while (resultSet.next()) {
Map<String, Object> map = new HashMap<String, Object>();
for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {
String key = resultSetMetaData.getColumnName(i);
Object value = resultSet.getObject(key);
// 封装结果集
map.put(key, value);
}
list.add(map);
}
return list;
} catch (SQLException e) {
System.out.println("创建预处理语句对象出现了异常...");
e.printStackTrace();
} finally {
// 7、关闭数据库资源
release();
} return null;
} /**
*
* 功能:5、关闭数据库资源,很重要
*
* 参数:
*
* 返回类型:void
*/
private void release() {
// 1、关闭数据库链接对象
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
System.out.println("关闭数据库链接对象出现了异常...");
e.printStackTrace();
}
}
// 2、关闭预处理语句对象
if (preparedStatement != null) {
try {
preparedStatement.close();
} catch (SQLException e) {
System.out.println("关闭预处理语句对象出现了异常...");
e.printStackTrace();
}
} // 3、关闭结果集对象
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }
JavaSE基础之JDBC的更多相关文章
- java学习之路之javaSE基础1
<h2>java学习之路之javaSE基础1</h2> <div> ###01.01_计算机基础知识(计算机概述)(了解)* A:什么是计算机?计算机在生活中的应用 ...
- javaSE基础07
javaSE基础07 一.static静态修饰符 用了static修饰的变量就会变成共享的属性,只会初始化一次,在内存中只存在一个,并且每个对象都可以访问,存放在方法区(数据共享区) 1.1 stat ...
- javaSE基础06
javaSE基础06 一.匿名对象 没有名字的对象,叫做匿名对象. 1.2匿名对象的使用注意点: 1.我们一般不会用匿名对象给属性赋值的,无法获取属性值(现阶段只能设置和拿到一个属性值.只能调用一次方 ...
- javaSE基础05
javaSE基础05:面向对象 一.数组 数组的内存管理 : 一块连续的空间来存储元素. Int [ ] arr = new int[ ]; 创建一个int类型的数组,arr只是一个变量,只是数组的一 ...
- javaSE基础04
javaSE基础04 一.三木运算符 <表达式1> ? <表达式2> : <表达式3> "?"运算符的含义是: 先求表达式1的值, 如果为真, ...
- javaSE基础03
javaSE基础03 生活中常见的进制:十进制(0-9).星期(七进制(0-6)).时间(十二进制(0-11)).二十四进制(0-23) 进制之间的转换: 十进制转为二进制: 将十进制除以2,直到商为 ...
- javaSE基础02
javaSE基础02 一.javac命令和java命令做什么事情? javac:负责编译,当执行javac时,会启动java的编译程序,对指定扩展名的.java文件进行编译,生成了jvm可以识别的字节 ...
- JavaSE基础01
JavaSE基础篇01 ------从今天开始,我就学习正式java了,O(∩_∩)O哈哈~,请大家多指教哦 一.Windows常见的dos命令 操作dos命令: win7 --->开始 --- ...
- javase基础复习攻略《十》
按照计划本篇为大家总结JAVA的网络编程,什么叫网络编程呢?网络编程!=网站编程,对于这一点大家一定要注意,很多小朋友都曾经这么认为.既然谈到网络编程,咱们先了解一下网络的基础知识,什么是计算机网络? ...
随机推荐
- Spring4笔记10--SSH整合1--Spring与Hibernate整合
SSH 框架整合技术: 1. Spring与Hibernate整合(对比Spring与JDBC模板): Service业务层代码和测试类都不变,添加实体类的映射配置文件: <?xml versi ...
- MySQL分布式集群之MyCAT(二)【转】
在第一部分,有简单的介绍MyCAT的搭建和配置文件的基本情况,这一篇详细介绍schema的一些具体参数,以及实际作用 首先贴上自己测试用的schema文件,双引号之前的反斜杠不会消除,姑 ...
- Jenkins+Ant+TestNG+Testlink自动化构建集成
这段时间折腾自动化测试,之前都是在Eclipse工程里面手工执行自动化测试脚本,调用Testlink API执行测试用例,目前搭建Jenkins自动化构建测试的方式,实现持续构建,执行自动化测试. 硬 ...
- 阿里云slb+https 实践操作练习
如果只是练习按照文档步骤逐步执行即可. 如果是业务需要,只供参考. 有道笔记链接->
- 使用MongoDB命令工具导出、导入数据
Windows 10家庭中文版,MongoDB 3.6.3, 前言 在前面的测试中,已经往MongoDB的数据库中写入了一些数据.现在要重新测试程序,数据库中的旧数据需要被清理掉,可是,又想保存之前写 ...
- 170406回顾-SQL Server的smalldatetime类型比较
在比较SQL Server的类型为smalldatetime字段时出现下面的错误:将 expression 转换为数据类型 smalldatetime 时出现算术溢出错误 正确的比较方法如下:将lon ...
- No.20 selenium学习之路之文件读写
1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.tx ...
- mongod 一些命令汇总
1. 导出数据库: mongoexport -d master -c reports -o no.json --type json -f "title,name" -q '{&qu ...
- 洛谷P3811乘法逆元
传送门 线性递推 #include <iostream> #include <cstdio> #include <cstring> #include <alg ...
- 洛谷P1411 砝码称重
传送门啦 这个题总体思路就是先搜索在 $ dp $ void dfs(int keep,int now){ //使用 放弃 if(now > m) return; //已经放弃超过m个了,就退出 ...