Java JDBC连接数据库常见操作总结
作者:时间在这里停顿 发布时间:2021-12-01 23:01:40
标签:Java,JDBC,连接数据库
本文实例总结了Java JDBC连接数据库常见操作。分享给大家供大家参考,具体如下:
db.properties
配置文件(MySql数据库)
# db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
# paramter for BasicDataSource
initSize=2
maxActive=2
db.properties
配置文件(Oracle数据库)
# db.properties
jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:localhost:1521:orcl
jdbc.username=root
jdbc.password=123456
# paramter for BasicDataSource
initSize=2
maxActive=2
JDBC直接连接数据库
package JDBC;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/**
* JDBC连接数据库管理工具类
*/
public class JDBC {
static String driver;
static String url;
static String username;
static String password;
static {
try {
Properties cfg = new Properties();
InputStream in = JDBC.class.getClassLoader().getResourceAsStream("db.properties");
cfg.load(in); //将文件内容加载到Properties对象中(以散列表形式存在)
driver = cfg.getProperty("jdbc.driver");
url = cfg.getProperty("jdbc.url");
username = cfg.getProperty("jdbc.username");
password = cfg.getProperty("jdbc.password");
in.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 创建数据库连接
*/
public static Connection getConnection() {
try {
Class.forName(driver); //注册驱动
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/*
* 关闭数据库的连接
*/
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
通过连接池连接数据库
package JDBC;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
/**
* 连接池版本的数据库连接管理工具类
*/
public class DBUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
private static int initSize;
private static int maxActive;
private static BasicDataSource dbs;
static {
dbs = new BasicDataSource();
Properties cfg = new Properties();
try {
InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("db.properties");
cfg.load(in);
// 初始化参数
driver = cfg.getProperty("jdbc.driver");
url = cfg.getProperty("jdbc.url");
username = cfg.getProperty("jdbc.username");
password = cfg.getProperty("jdbc.password");
initSize = Integer.parseInt(cfg.getProperty("initSize"));
maxActive = Integer.parseInt(cfg.getProperty("maxActive"));
in.close();
// 初始化连接池
dbs.setDriverClassName(driver);
dbs.setUrl(url);
dbs.setUsername(username);
dbs.setPassword(password);
dbs.setInitialSize(initSize);
dbs.setMaxActive(maxActive);
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 创建数据库连接,从连接池中获取连接,如果连接池满了,则等待.
*/
public static Connection getConnection() {
try {
Connection conn = dbs.getConnection();
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/*
* 关闭数据库的连接,归还到连接池
*/
public static void close(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//回滚,仅在禁用自动提交时使用
public static void rollback(Connection conn) {
if (conn != null) {
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
连接数据库后的使用
Connection conn=null;
try{
conn=DbUtils.getConnection();
Statement st=conn.createStatement();
String sql="select id, name from people";
ResultSet rs=st.executeQuery(sql);
while(rs.next()){
int id=rs.getInt("id");
String name=rs.getString("name");
System.out.println(id+","+name);
}
//结果集元数据
ResultSetMetaData meta = rs.getMetaData();
int n = meta.getColumnCount(); //多少列
for(int i=1; i<=n; i++){
String name= meta.getColumnName(i); //获取列名
System.out.println(name);
}
rs.close();//释放查询结果
st.close();//释放语句对象
}catch(Exception e){
e.printStackTrace();
}finally {
DbUtils.close(conn);
}
预编译SQL执行 及 取消自动提交
try {
conn = DBUtils.getConnection();
conn.setAutoCommit(false); //取消自动提交, 后续手动提交
String sql="update people set name=? where id=? ";
PreparedStatement ps= conn.prepareStatement(sql);
//按照顺序发送参数
ps.setString(1, "Lao Wang");
ps.setInt(2, 100);
//执行"执行计划"
int n=ps.executeUpdate();
conn.commit(); //手动提交
} catch (Exception e) {
e.printStackTrace();
DBUtils.rollback(conn); //异常回滚
}finally{
DBUtils.close(conn);
}
Statement的addBatch(sql)
和executeBatch()
方法可以批量执行sql。
Statement st=conn.createStatement();
st.addBatch(sql1); //sql1 添加到Statement的缓存中
st.addBatch(sql2);
st.addBatch(sql3);
int[] ary=st.executeBatch(); //执行一批SQL
PreparedStatement也支持批量参数的处理
PreparedStatement ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
ps.setString(2, "wang");
ps.addBatch(); //将参数添加到ps缓存区
ps.setInt(1, 2);
ps.setString(2, "li");
ps.addBatch(); //将参数添加到ps缓存区
int[] ary = ps.executeBatch(); // 批量执行
PreparedStatement ps = conn.prepareStatement(sql);
还可以传入第二个参数用以获取自增主键或者序号自增的列
希望本文所述对大家java程序设计有所帮助。
来源:https://blog.csdn.net/n447194252/article/details/71123917


猜你喜欢
- 结构是使用 struct 关键字定义的,例如:public struct PostalAddress{ // Fields, propert
- using System;using System.Collections.Generic;using System.ComponentMo
- 1.editplus1.1 官方下载https://www.editplus.com/官方下载最新的64位2 .解压就可以使用2.1 vsc
- 本文实例为大家分享了Java猜拳游戏的具体代码,供大家参考,具体内容如下先来看一下效果图: 首先我们创建一个Person类,这个类
- SimpleDateFormat类:SimpleDateFormat是-一个以与语言环境有关的方式来格式化和解析日期的具体类。进行格式化(日
- 1.上原图 前几天在 Hencoder 征稿看到的Filpboard 里的的动画效果:Filipboard.gif先bb一句:在看本文的同时
- 想必大家都知道,国内的Android应用基本都是免费的
- 我们在使用APP的过程中,软件会偶尔提示我们进行版本更新,我们点击确认更新后,会在通知栏显示下载更新进度(已知长度的进度条)以及安装情况(不
- 一、业务说明对应APP业务中的成员有两类,一是服务人员,二是被服务人员, 主要实现功能, 对APP中的服务人员位置进行时时定位, 然后通过被
- 1. MyBatis 中 #{}和 ${}的区别是什么?#{}是预编译处理,${}是字符替换。 在使用 #{}时,MyBatis 会将 SQ
- 1. IOC和DI首先,我们应该明确,IOC是一种思想,并不是Spring特有的,而是软件工程逐步发展的一种产物,是一种优秀的编程思想,之所
- 一.为什么要用线程池先来看个简单的例子1.直接new Thread的情况:public static void main(String[]
- 第一次写上传图片的代码,碰到很多问题。昨天做了整整一天,终于在晚上的时候成功了。大声欢呼。但是,做完之后,还是有很多问题想不通。所以在这里也
- 一、背景有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,一般我们检
- 前言今天从github把我以前写的一个小demo下载下来了,第一次下载项目,摸索了一个多小时,才运行起来。下载有两种方法,通过git下载,或
- 命令仓库 Ctrl + Shift + A 可以搜集对应命令快捷键1、基础快捷键1.1、无处不在的跳转项目之间的跳转1.1.1、项目项目之间
- RPC,即 Remote Procedure Call(远程过程调用),说得通俗一点就是:调用远程计算机上的服务,就像调用本地服务一样。RP
- 类是使用关键字 class 声明的,如下面的示例所示:访问修饰符 class 类名 { //类成员: // Methods, prope
- 程序结构:一、配置 1. 在pom.xml中添加依赖pom.xml文件如下:<?xml version="1.0&
- AbstractQueuedSynchronizerAbstractQueuedSynchronizer 简称 AQS ,抽象队列同步器,用