IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> JDBC下载及连接数据库处理 -> 正文阅读

[大数据]JDBC下载及连接数据库处理

一、jdbc下载

musql-connection下载:

需要对应mysql版本进行下载

可以在管理员模式下打开cmd输入select version() 查看版本信息

什么是JDBC?

JDBC(Java DataBase Connectivity)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询、更新(增删改)数据库中数据的方法。JDBC,是Sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动。下图出自博客

img

二、JDBC操作

1.创建java类

将之前下载的软件包解压后找到这个复制到lib包下

  • mysql中创建一个数据库

要对数据库进行处理,首先得创建一个数据库,在mysqlyog中直接创建一个命名为market的数据库

2.数据库的连接

?public class Test {
? ? ?public static void main(String[] args)  {
? ? ? ? ?
? ? ? ? ?// 获取mysql连接地址 ? ? ? ? ? ? ? ? ? ? ? ?  market为要连接的数据库名
? ? ? ? ?String strURL = "jdbc:mysql://localhost:3306/market?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8";
? ? ? ? ?//(因为我的mysql字符编码不是utf8所以URL会有所区别)
? ? ? ? ?//有的是  jdbc:mysql://localhost:3306/数据库名称?&useSSL=false&serverTimezone=UTC
? ? ? ? ?
? ? ? ? ?// 用户名称
? ? ? ? ?String username = "用户名";
? ? ? ? ?// 用户密码
? ? ? ? ?String password = "用户密码";
??
? ? ? ? ?try {
? ? ? ? ? ? ? Class.forName("com.mysql.jdbc.Driver");//  mysql加载驱动
? ? ? ? ? ? ?//mysql.5版本不用加cj; 若是mysql.8 就需要加ysql.cj.jbdc... 
??
? ? ? ? ? ? ? Connection con = DriverManager.getConnection(strURL, username, password);
??
? ? ? ? ? ? ? System.out.println("数据库连接成功");
? ? ? ? ? ? ? ? ? ? 
? ? ? ? ? ? ? con.close();
??
? ? ? ? ? ? ?System.out.println("数据库已关闭");
??
? ? ? ?  }catch (ClassNotFoundException | SQLException e){
? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? }
? ?  }
?}
? ? ? ? 

补充查看字符编码命令:

修改字符编码命令:

?set character_set_server=utf8;

MySQL数据库编码

3.创建对象对数据库进行处理

?// 创建statement类对象,用来执行SQL语句!
??
?Statement stm = con.createStatement();
 

知识速递:

  1. jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。

  2. 增、删、改 用executeUpdate()返回值为int型,表示被影响的行数

  3. 查用executeQuery() 返回的是一个集合 .next()表示 指针先下一行,还有first()指向第一行 、last()指向最后一行、如果有数据就返回true

? ? ?4.ResultSet是我们使用jdbc连接时,查询的一个返回结果集,ResultSet resultSet =? ? stm.executeQuery(sql),

4.数据库的增加

?
?//定义sql语句对数据库进行处理
?String sql="INSERT INTO student VALUES(6,'七月六便士',53)";
??
?//用executeUpdate()检查是否插入成功
?int i= stm.executeUpdate();//返回值为被影响的行数
??
?if(i !=1 ){
? ? ? ?System.out.println("操作失败");
?}else{
? ? ? ?System.out.println("操作成功");
?}
??

5.数据库的查询

  • 查询所有元素

?String sql="SELECT * FROM student";
??
?// 通过SQL查询,把查询到的结果返回至Result的结果集
?ResultSet rs = stm.executeQuery(sql);
??
?while(rs.next()){
? ? ? ? ? ? ? ? ?int id=rs.getInt("id");
? ? ? ? ? ? ? ? ?String name=rs.getString("name");
? ? ? ? ? ? ? ? ?System.out.println("id:"+id+" name:"+name);
?}

查询指定元素信息
?
?String sql="SELECT * FROM student WHERE id=? AND name=?";
??
?// 为SQL语句设置参数,这里setObject()方法中的第一个参数代表的是SQL语句中的第几个问号,而第二参数代表的是设置变量
?PreparedStatement pst = con.prepareStatement(sql);//已经预处理了,后面不用再加sql
??
?pst.setInt(1,2);
?//第一个数表示是第几个问号
?pst.setString(2,"情书");
??
?ResultSet rs = pst.executeQuery();//不需要sql了,前面已经预处理了
??
?while(rs.next()){
? ? ?int id=rs.getInt("id");
? ? ?String name=rs.getString("name");
? ? ?int price=rs.getInt("price");
? ? ?System.out.println("id:"+id+" name:"+name+" price:"+price);
?}

PreparedStatement与Statement:

PreparedStatement有预编译的过程,而且绑定了sql语句,无论执行多少遍,都不会再次进行编译。而Statement则不同,sql执行多少遍,就需要编译多少遍,所以PreparedStatement效率要比Statement

6.关闭仓库

?//最后需要关闭
?rs.close();
?stm.close();
?con.close();

在数据库操作完毕之后,需要关闭ResultSetStatementConnection

操作完数据库之后ResultSetStatementConnection`是在程序中占用内存的,所以我们需要关闭,而且需要注意关闭的顺序,是从左到右的。

三、数据库工具类

为什么需要?

如果数据信息量很庞大的话,不断地打开关闭数据库会非常的麻烦,所以就把操作封装成一个Java类,并且通过配置资源配置文件储存需要数据库连接基本信息。

db.properties:

连接池配置文件db.properties是java中采用数据库连接池技术完成应用对数据库的操作的配置文件信息的文件。

新建一个resource目录,在里面新建一个资源包命名为db。

在db.properties输入

?driver=com.mysql.cj.jdbc.Driver//注意mysql.5没有cj
?url=jdbc:mysql://localhost:3306/market?&useSSL=false&serverTimezone=UTC
?username=root
?password=123456

jdbc工具类处理数据库

最终代码模板:

1.jdbc工具类代码; 创建在jdbc包下的 JDBCUtil 类(固定的代码形式)?

?package jdbc;
??
?import java.sql.*;
??
?public class JDBCUtil {
? ? ?// MySQL 5应为com.mysql.cj.jdbc.Driver
? ? ?private static final String driver = "com.mysql.jdbc.Driver";
? ? ?private static final String url = "jdbc:mysql://localhost:3306/market?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8";
? ? ?private static final String userName = "用户名";
? ? ?private static final String password = "用户密码";
??
? ? ?// 获取数据库连接
? ? ?public static Connection getConnection() {
? ? ? ? ?Connection con = null;
? ? ? ? ?try {
? ? ? ? ? ? ?Class.forName(driver);
? ? ? ? ? ? ?con = DriverManager.getConnection(url, userName, password);
? ? ? ?  } catch (SQLException | ClassNotFoundException e) {
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ?  }
? ? ? ? ?return con;
? ?  }
??
? ? ?// 数据库查询,返回结果集
? ? ?public static ResultSet query(Connection con, PreparedStatement st, ResultSet rs, String sql
? ? ? ? ? ?  , Object[] params) throws SQLException {
? ? ? ? ?st = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE,
? ? ? ? ? ? ? ? ?ResultSet.CONCUR_READ_ONLY);
? ? ? ? ?if (params != null) {
? ? ? ? ? ? ?for (int i = 0; i < params.length; i++) {
? ? ? ? ? ? ? ? ?st.setObject(i + 1, params[i]);
? ? ? ? ? ?  }
? ? ? ?  }
? ? ? ? ?rs = st.executeQuery();
? ? ? ? ?return rs;
? ?  }
??
? ? ?// 数据库增删改
? ? ?public static int update(Connection con, String sql
? ? ? ? ? ?  , Object[] params, ResultSet rs, PreparedStatement st) throws SQLException {
? ? ? ? ?st = con.prepareStatement(sql);
? ? ? ? ?for (int i = 0; i < params.length; i++) {
? ? ? ? ? ? ?st.setObject(i + 1, params[i]);
? ? ? ?  }
? ? ? ? ?return st.executeUpdate();
? ?  }
??
? ? ?// 关闭数据库连接
? ? ?public static void release(Connection con, Statement st, ResultSet rs) {
? ? ? ? ?boolean flag = true;
??
? ? ? ? ?if (rs != null) {
? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ?rs.close();
? ? ? ? ? ? ? ? ?rs = null;
? ? ? ? ? ?  } catch (SQLException e) {
? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ? ?flag = false;
? ? ? ? ? ?  }
? ? ? ?  }
??
? ? ? ? ?if (st != null) {
? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ?st.close();
? ? ? ? ? ? ? ? ?st = null;
? ? ? ? ? ?  } catch (SQLException e) {
? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ? ?flag = false;
? ? ? ? ? ?  }
? ? ? ?  }
??
? ? ? ? ?if (con != null) {
? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ?con.close();
? ? ? ? ? ? ? ? ?con = null;
? ? ? ? ? ?  } catch (SQLException e) {
? ? ? ? ? ? ? ? ?e.printStackTrace();
? ? ? ? ? ? ? ? ?flag = false;
? ? ? ? ? ?  }
? ? ? ?  }
? ?  }
?}
??

2.mysql驱动

?
?driver=com.mysql.jdbc.Driver ///还是要注意有无 cj.
?url=jdbc:mysql://localhost:3306/market?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
?username=root
?password=123456

3.测试代码,处理数据库

查询数据

?package jdbc;
??
?import java.sql.*;
??
?public class Test2 {
? ? ?public static void main(String[] args) {
? ? ? ? ?Connection con;
? ? ? ? ?PreparedStatement st = null;
? ? ? ? ?ResultSet rs = null;
? ? ? ? ?try {
? ? ? ? ? ? ?// 获取链接
? ? ? ? ? ? ?con = JDBCUtil.getConnection();
? ? ? ? ? ? ?String sql = "SELECT * FROM student WHERE id = ? AND name = ?";
? ? ? ? ? ? ?st = con.prepareStatement(sql);
? ? ? ? ? ? ?Object[] params = {2, "情书"};
? ? ? ? ? ? ?rs = JDBCUtil.query(con, st, rs, sql, params);
? ? ? ? ? ? ?while (rs.next()) {
? ? ? ? ? ? ? ? ?int id = rs.getInt(1);
? ? ? ? ? ? ? ? ?String name = rs.getString(2);
? ? ? ? ? ? ? ? ?int price = rs.getInt(3);
? ? ? ? ? ? ? ? ?System.out.println(id + " " + name + " " + price);
? ? ? ? ? ?  }
? ? ? ? ? ? ?// 关闭数据库
? ? ? ? ? ? ?JDBCUtil.release(con, st, rs);
? ? ? ?  } catch (SQLException e) {
? ? ? ? ? ? ?e.printStackTrace();
? ? ? ?  }
? ?  }
?}
?

增加数据

?try {
? ? ?// 获取链接
? ? ?con = JDBCUtil.getConnection();
??
? ? ?String sql ="INSERT INTO student VALUES(? ,?,?)";
??
? ? ?// st = con.prepareStatement(sql);
??
? ? ?Object[] params = {6 ,"七月六便士",53};
??
? ? ?int i = JDBCUtil.update(con,sql, params,rs ,st);
??
? ? ?if(i != 1 ){
? ? ? ? ?System.out.println("插入失败");
? ?  }else{
? ? ? ? ?System.out.println("插入成功");
? ?  }
??
? ? ?// 关闭数据库
? ? ?JDBCUtil.release(con, st, rs);
?} catch (SQLException e) {
? ? ?e.printStackTrace();
?}

关于VALUES(?, ?, ?) :

在PreparedStatement里面我们需要对SQL语句进行预处理, 所以首先需要把这些参数用占位符?来代替

而statement里面并不需要首先预处理 , 所以就不需要这边的参数用 ?来代替

PreparedStatement是如何防止SQL注入的?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章           查看所有文章
加:2022-07-20 18:56:33  更:2022-07-20 19:00:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:35:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码