JDBC与数据库连接
JDBC
1、概述:
1.1概念:
java数据库连接
1.2作用:
提供了通用访问关系型数据库的接口规范.
2、入门案例
2.1导入驱动jar包
1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
2.右键–>Add As Library
2.2注册驱动
Class.forName(“com.mysql.jdbc.Driver”)
2.3获取连接
Connection conn =DriverManager.getConnection(“jdbc:mysql://localhost:3306/db2”,“root”,“1234”)
2.4编写SQL
2.5获取语句执行对象 Statement
Statement st = conn.createStatement();
2.6执行SQL
int executeUpdate(sql) 执行DML语句
Result executeQuery(sql) 执行DQL语句
2.7处理结果集(查询操作)
2.8释放资源
package com.itfenghua01;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JdbcDemo01 {public static void main(String[] args) throws ClassNotFoundException, SQLException {//注册驱动Class.forName("com.mysql.jdbc.Driver");//获取连接Connection con = DriverManager.getConnection("jdbc:mysql:///demo01", "root", "root");//sql语句String sql = "update stu set math=100 where name ='陈墨瞳' ";//获取执行对象Statement sta = con.createStatement();//执行语句int update = sta.executeUpdate(sql);System.out.println(update);//释放资源sta.close();con.close();}
}
3、相关的Api
3.1DriverManager ★
3.1.1注册驱动 registerDriver(Driver driver) -
3.1.2获取连接 getConnection(url,user,pwd)
1.参数url:
标准写法: jdbc:mysql://localhost:3306/数据库名称
简单写法: jdbc:mysql:///数据库名称
2.参数user: 数据库用户
3.参数pwd: 数据库密码
3.2Connection连接 ★
3.2.1获取语句执行对象
Statement st = conn.createStatement();
PreparedStatement pst = conn.preparedStatement(String sql);
3.区别:
1)PreparedStatement 防止SQL注入问题
2)执行效率更高
3)编写起来更加简单
3.2.2管理事务
开启事务 setAutoCommit(false);
- 提交事务 commit();
- 回滚事务 rollback();
3.3 Statement语句执行
1.int executeUpdate(String sql) 用于执行增删改的SQL语句,返回影响的行数
2.ResultSet executeQuery(String sql); 用于执行查询语句,返回结果集对象
3.4 ResultSet 结果集 ★
3.4.1作用:
封装了查询的数据
3.4.2操作
1.boolean next(); 游标向下移动一行, 若有下一行返回true,反之为false
2.getXxx(int 编号);
3.getXxx(“列名”) ★
Xxx 必须和 列类型一样
int getInt(…)
varchar getString(…)
Date getDate(…)
double getDouble(…)
package com.itfenghua01;import java.sql.*;public class jdbcDemo03 {public static void main(String[] args) {Connection con =null;Statement sta =null;ResultSet resultSet =null;try {con = DriverManager.getConnection("jdbc:mysql:///demo01", "root", "root");String sql ="select * from stu ";sta = con.createStatement();resultSet = sta.executeQuery(sql);while (resultSet.next()){String name = resultSet.getString("name");int age = resultSet.getInt("age");Date date = resultSet.getDate("time");int math = resultSet.getInt("math");String sex = resultSet.getString("sex");System.out.println(name+","+age+","+date+","+math+","+sex);}} catch (SQLException e) {e.printStackTrace();}finally {if (sta!=null)try {resultSet.close();sta.close();con.close();} catch (SQLException e) {e.printStackTrace();}}}}
4、PreparedStatement预处理对象 ★
4.1SQL注入问题
用户输入一些特殊字符,导致整个SQL的结构发生了改变
4.2开发步骤
1.导入jar包
2.注册驱动
获取连接
编写SQL
SELECT * FROM USER WHERE username = ? AND PASSWORD = ? ;获取语句执行对象 PreparedStatement
conn.preparedStatement(String sql);给?占位符赋值
preparedStatement.setXxx(int 问号的编号,值)
注意: ? 从 1开始的
Xxx 必须 和数据库列类型一样
7 执行SQL
8.处理结果集(查询操作)
9.释放资源
4.3操作
1.int executeUpdate() 用于执行增删改的SQL语句,返回影响的行数
2.ResultSet executeQuery(); 用于执行查询语句,返回结果集对象
package com.itfenghua02;import com.JDBCUtils.JDBCUtils;
import org.junit.Test;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class JDBCDemo01 {@Testpublic void add() throws SQLException {Connection conn = JDBCUtils.getConnection();String sql = "insert into ss VALUE(?,?)";PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1,8);pst.setInt(2,119);pst.executeUpdate();JDBCUtils.close(null,pst,conn);}@Testpublic void delect() throws SQLException {//获取连接Connection conn = JDBCUtils.getConnection();//sql语句String sql = "delete from ss where id=? ";//获取预处理对象PreparedStatement pst = conn.prepareStatement(sql);//给占位符赋值pst.setInt(1,1);//执行操作pst.executeUpdate();//释放资源JDBCUtils.close(null,pst,conn);}@Testpublic void update() throws SQLException {Connection conn = JDBCUtils.getConnection();String sql ="update ss set num=? where id=? ";PreparedStatement pst = conn.prepareStatement(sql);pst.setInt(1,10000);pst.setInt(2,2);pst.executeUpdate();JDBCUtils.close(null,pst,conn);}@Testpublic void query() throws SQLException {Connection conn = JDBCUtils.getConnection();String sql = "select * from ss";PreparedStatement pst = conn.prepareStatement(sql);//结果集ResultSet res = pst.executeQuery();//遍历结果集,结果集对象,封装查询结果while (res.next()){int id = res.getInt("id");int num = res.getInt("num");System.out.println(id+","+num);}JDBCUtils.close(res,pst,conn);}
}
5、事务管理
1.开启事务 setAutoCommit(false);
- 提交事务 commit();
- 回滚事务 rollback();
事务模版
6、JDBC工具类提取
package com.JDBCUtils;import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class JDBCUtils {private static String url;private static String user;private static String password;private static String driver;//静态代码块//只执行一次static {try {//获取集合对象Properties prop = new Properties();//读取配置文件:jdbc.propertiesInputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");//加载文件prop.load(in);//获取文件中的关键字值url = prop.getProperty("url");user = prop.getProperty("user");password = prop.getProperty("password");driver = prop.getProperty("driver");//1.注册驱动Class.forName(driver);} catch (Exception e) {e.printStackTrace();}}/*** //2.获取连接* @return* @throws SQLException*/public static Connection getConnection() throws SQLException {return DriverManager.getConnection(url,user,password);}/*** //释放资源* @param res* @param sta* @param con*/public static void close(ResultSet res, Statement sta,Connection con){if (res!=null){try {res.close();} catch (SQLException e) {e.printStackTrace();}} if (sta!=null){try {sta.close();} catch (SQLException e) {e.printStackTrace();}} if (con!=null){try {con.close();} catch (SQLException e) {e.printStackTrace();}}}
}
JDBC与数据库连接相关推荐
- day04 JDBC java数据库连接
day04 JDBC java数据库连接 yuxiaohu已关注 2017.12.03 16:12:19字数 139阅读 85 1 导包 mysql 提供的实现java接口的包路径 C:\Progra ...
- Java -- JDBC 学习--数据库连接池
JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...
- JavaWeb:JDBC之数据库连接池
JDBC系列阅读 JavaWeb:用JDBC操作数据库 JavaWeb:JDBC之事务 JavaWeb:JDBC之数据库连接池 使用JDBC实现水果超市管理系统 1. 池参数(所有池参数都有默认值) ...
- 基于JDBC的数据库连接池技术研究与应用
引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的3层开 ...
- Java JDBC和数据库连接池 韩顺平老师自学笔记
JDBC和数据库连接池 JDBC 概述 基本介绍 原理示意图 代码示例 JdbcInterface 模拟Java公司提供给其它数据库厂商的接口,供给调用 TestJdbc 模拟一个类来实现数据库的调用 ...
- 【JDBC】数据库连接池技术
文章目录 一.数据库连接池技术 二.多种开源的数据库连接池 一.数据库连接池技术 1.数据库连接池的基本思想︰ 就是为数据库连接建立一个"缓冲池".预先在缓冲池中放入一定数量的连接 ...
- JDBC 关闭数据库连接与自动提交
// Jdbc关闭数据库连接时,会隐含一个提交事务的操作 private final static String DB_DRIVER = "oracle.jdbc.driver.Oracle ...
- JDBC以及数据库连接池的使用
文章目录 JDBC 步骤 数据库连接池 1.概念 2.接口规范方法 3.第三方数据库连接池技术 C3p0 Druid:由阿里提供 Druid工具类 JDBC 概念 JDBC是sun公司提供的一套用 ...
- [JDBC] 获取数据库连接方式
方式一:将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接 此种方式的好处? 1.实现了数据与代码的分离.实现了解耦 2.如果需要修改配置文件信息,可以避免程序重新打包. ...
- 从JDBC到数据库连接池
文章目录 基本的JDBC操作方式 基本的JDBC操作在高并发的情况下带来的问题 第三方应该具备条件 连接池的初步设计 C3P0从数据源获取到连接的过程 如何从C3P0获取连接池状态信息 基本的JDBC ...
最新文章
- Pytorch: 命名实体识别: BertForTokenClassification/pytorch-crf
- 一行代码不用写,就可以训练、测试、使用模型,这个star量1.5k的项目帮你做到...
- 字符串异或c语言编写,C语言实现字符串的异或校验.doc
- Mybatis Plus 是如何实现动态 SQL 语句的?原理你懂吗?
- matlab 计算大圆距离,已知两点经纬度计算两点之间的大圆距离
- python中如何打印两行代码间的空行_python 打印几行空行、 打印不换行
- install scikit-learn
- selenium, firefox, python环境搭建指南
- .NET 内存管理与垃圾回收:实现IDisposable接口和析构函数
- python 类函数 实例函数_python_30期【实例函数 类里面的函数】
- 单片机ADC采样算法----中位值平均滤波法
- Egret中的三种单例写法
- php赛车,php调用接口及三分赛车平台搭建出租编写接口
- mid制作乐谱_作品1:MIDI彩虹钢琴(将简谱或五线谱制作成mid)
- 英雄无敌王朝 服务器维护,《魔法门之英雄无敌:王朝》版本更新公告
- pixhawk启动脚本分析
- R语言差异检验:非参数检验
- Python中字母大小写转换
- Vue进阶(六十八):JS 判断当前浏览器是否为 IE
- 第九层(1):初识STL