博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java JDBC
阅读量:2421 次
发布时间:2019-05-10

本文共 2982 字,大约阅读时间需要 9 分钟。

目录

 

jdbc简介

在这里插入图片描述

jdbc是一套数据库编程接口,由各数据库厂商提供实现(数据库驱动),使用相同的方式就可操作不同的数据库,实现了跨数据库编程。

使用时添加数据库驱动到依赖中。

 

Statement

//注册驱动,mysql5.x不带cj,mysql8.x带cjClass.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/db_mall?serverTimezone=UTC";String user = "chy";String pwd = "abcd";// 获取数据库连接Connection connection = DriverManager.getConnection(url, user, pwd);//通过数据库连接获取Statement对象Statement statement = connection.createStatement();//通过Statement对象执行sql语句String sql = "select * from tb_user";ResultSet resultSet = statement.executeQuery(sql);   //遍历结果集while (resultSet.next()){
int id = resultSet.getInt("id"); //参数可以是列名或者列索引,列索引从1开始,1表示结果集中第一列 String name = resultSet.getString("name"); //建议使用列名,见名知义 System.out.println(id+"\t"+name);}//关闭资源resultSet.close();connection.close();

 

批量操作

int[] ageList = {
19, 21, 35};String[] nameList={
"张三","李四","王五"};for(int i=0;i

 

说明

  • Statement没有提供设置sql语句参数的方法,要设置sql语句的参数,需使用字符串拼接,使用+拼接字符串有sql注入的风险,尽量使用concat()拼接字符串。如果参数众多,sql语句很长,可读性差。
  • 每次都要重新编译sql语句,浪费时间

使用Statement的子接口PreparedStatement可解决以上问题

 

PreparedStatement

Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql://localhost:3306/db_mall?serverTimezone=UTC";String user = "chy";String pwd = "abcd";Connection connection = DriverManager.getConnection(url, user, pwd);//使用?占位String sql = "select * from tb_user where id=? and name=?";//预编译,编译后sql语句保存在内存中,以后使用时替换参数即可,效率高PreparedStatement preparedStatement = connection.prepareStatement(sql);//设置参数,第几个?、值preparedStatement.setInt(1,1);preparedStatement.setString(2,"张三");//执行sql语句ResultSet resultSet = preparedStatement.executeQuery();while (resultSet.next()){
//.....}resultSet.close();connection.close();

 

批量操作

//批量操作String[] nameList = {
"张三","李四","王五"};int[] ageList = {
19, 18, 20};String sql = "insert into tb_user (name,age) values (?,?)";PreparedStatement preparedStatement = connection.prepareStatement(sql);for(int i=0;i

 

从配置文件加载数据库配置

resources下新建文件mysql.properties,右键标识为Resource Root

driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/db_mall?serverTimezone=UTCuser=chypassword=abcd
//从properties文件加载数据库配置Properties properties = new Properties();FileInputStream inputStream = this.getClass().getResourceAsStream("/mysql.properties");properties.load(inputStream);String driver = properties.getProperty("driver");String url = properties.getProperty("url");String user = properties.getProperty("user");String pwd=properties.getProperty("password");Class.forName(driver);Connection connection = DriverManager.getConnection(url, user, pwd);

 

jdbc事务管理

Class.forName(driver);Connection connection = DriverManager.getConnection(url, user, pwd);connection.setAutoCommit(false);   //关闭自动提交,开启事务。默认值true//.....  //操作数据库try{
connection.commit(); //提交事务}catch (SQLException e){
connection.rollback(); //失败就回滚} finally {
preparedStatement1.close(); preparedStatement2.close(); connection.close();}

 

说明

  • 有一个dao层的小框架Dbutils,封装了jdbc,可以将结果集简单映射为实体类
  • 可以使用连接池c3p0、dbcp、druid

转载地址:http://zwhlb.baihongyu.com/

你可能感兴趣的文章
LC 446. 等差数列划分 II - 子序列
查看>>
LC 53. 最大子序和(DP)+ LC 152. 乘积最大子序列 + LC 238. 除自身以外数组的乘积
查看>>
198. 打家劫舍 DP
查看>>
628. 三个数的最大乘积
查看>>
正向代理和反向代理
查看>>
不同的类加载器加载的类不是同一个类
查看>>
Java 序列化和反序列化
查看>>
怎么让笔记本变路由器,亲身试验可用,不用下第三方软件
查看>>
DB2 SQL Error: SQLCODE=-668, SQLSTATE=57016 解决方案
查看>>
java.util.ConcurrentModificationException
查看>>
linux 通过crt直接上传和下载文件和文件
查看>>
javabase64编码原理和解码,加密案例
查看>>
Java 位运算(移位、位与、或、异或、非) 以及负数的二进制相互计算
查看>>
MyBatis 二级缓存机制
查看>>
第一章,安装Vmware和Ubuntu
查看>>
jquery freemarker模板设置变量每次循环加1
查看>>
VMware虚拟机启动后出现黑屏,不能显示界面,无论安装的是ubuntu还是centos
查看>>
osi七层模型,什么是tcp/ip协议,tcp与http,UDP的区别,tcp三次握手过程和特点
查看>>
第二章,ubuntu系统的查看防火墙,切换root用户,设置固定ip、系统时间等
查看>>
hash原理总结
查看>>