使用Java语言开发工具idea连接MySQL数据库的基本步骤及操作实例
Java连接MySQL数据库并进行一些基本操作以及导入jar包的两种方式
其实,任何开发工具连接数据库无非就是三步:1.安装驱动。2.加载驱动,创建连接对象。3.创建对象操作游标。4.游标调用函数完成执行SQL语句。 但是在各种语言开发工具进行连接过程中,这些过程操作又有一定的差异。接下来我们来了解Java语言开发工具idea连接数据库的基本操作。
首先进行了解,什么是JDBC。JDBC是一套用于执行SQL语句的Java API,应用程序可通过这套API连接到关系数据库。并使用SQL语句完成对数据库中数据的查询、新增、更新、删除等操作。应用程序使用JDBC访问特定的数据库时,只需要通过不同的数据库驱动与其对应的数据库进行连接,再进行相应的操作即可。
- JDBC常用的API,主要位于java.sql包中,该包定义了一系列访问数据库的接口和类。
- Driver接口:Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用,即将所使用的数据库驱动程序加载到项目classpath中。也就是导入jar包:
导包的具体过程为:1.File-->Project Setting-->Moudles-->dependencies-->点击12 version ……-->+ 然后选择完之后勾选,最后Apply即可。
或者
2.在src文件夹下-->右击-->Open Moudles Settings dependencies-->点击12 version ……-->+ 然后选择完之后勾选,最后Apply即可。
具体位置如图所示
- DriverManager接口:DriverManager类用于加载数据库驱动并创建与数据库的连接。通过DriverManager类中的静态方法getConnection(String url,String user,String pwd)来建立和数据库的连接,并返回表述连接的Connection对象。
- Connection接口:Connection接口代表Java程序与数据库的连接对象。只有获得该连接对象之后,才能访问数据库,操作数据表。相当于游标对象。
- Statement crestStatement()方法:
通过Connection接口调用crestStatement方法。返回一个向数据库发送语句的Statement对象,即创建游标对象。
- PreparedStatement preparedStatement(String sql)方法:
该方法用于返回一个PreparedStatement对象,该对象用于向数据库发送参数化的SQL语句。
- CallableStatement prepareCall(String sql)方法:
该方法用于返回一个CallableStatement对象,该对象用于调用数据库中的存储过程。
- Statement crestStatement()方法:
- Statement接口:Statement接口是执行Java数据库操作的一个重要接口,它用于执行静态的SQL语句,并返回一个结果对象,(通过Connection接口调用crestStatement方法获得)。
执行SQL语句的常用方法:- Boolean execute(String sql)方法:用于执行各种SQL语句,返回一个Boolean类型的值,如果为true,表示执行的SQL语句有查询结果,可通过Statement的getResult()方法获得查询结果。
- int executeUpdate(String sql)方法:用于执行SQL中的insert、update、delete语句,该方法返回一个int类型的值,表示数据库中should该SQL语句影响的记录条数。
- ResultSet executeQuery(String sql)方法:用于执行SQL中的select语句,该方法返回一个表示查询结果的ResultSet对象。
- PrepareStatement接口:Statement接口封装了JDBC执行SQL语句的办法,可执行SQL语句,但是在实际开发过程中常用程序中的变量作为查询条件,此时使用Statement接口代码SQL语句过于繁琐;而PreparedStatement接口是Statement接口的子接口,扩展了带有参数的SQL语句的操作,应用接口中的SQL语句可以使用占位符"?"来代替参数,通过setXxx()方法为SQL语句参数赋值。
- int executeUPdate()方法:
在此PreparedStatement对象中执行SQL语句,该语句必须是一个DML语句(数据库操作语句增删改查)或者是无返回值的SQL语句,如DDL语句(create建表语句、drop删表语句、alter(修改字段类型语句)等。
- ResultSet executeUpdate()方法:
在此PreparedStatement对象中执行SQL查询,该方法返回的是ResultSet对象。
- void setInt(int parameterIndex,int x)方法:将指定参数设置为给定的int值。
- void setFloat(int parameterIndex,float x)方法:
将指定参数设置为给定的float值。
- void setString(int parameterIndex,String x)方法:
将指定参数设置为给定的String值。
- void setDate(int parameterIndex,Date x)方法:
将指定参数设置为给定的Date值。
- void addBatch()方法:
将一组参数添加到此PreparedStatement对象的批处理命令中。
- void setCharacterStream(int parameterIndex,java.io.Reader reader,int length)方法:
将指定的输入流写入数据库的文本字段。
- void setBinaryStream(int parameterIndex,java.io.InputStream x,int length)方法:
将二进制的输入流数据写入到二进制字段中。
- int executeUPdate()方法:
- ResultSet接口:用于保存JDBC执行查询语句时返回的结果集,该结果集封装在一个逻辑表格中。在ResultSet接口内部有一个指向表格数据行的游标。ResultSet对象初始化时,游标在表格的第一行之前,调用next()方法可将游标移动到下一行。如果下一行没有数据,则返回false。
- String getString(int columnIndex)方法:
用于获取指定字段的String类型的值,参数columnIndex代表字段的索引。
- String getString(int columnIndex)方法:
用于获取指定字段的String类型的值,参数columnIndex代表字段的索引。
- String getString(String columnName)方法:
用于获取指定字段的String类型的值,参数columnName代表字段的名称。
- int getInt(int columnIndex)方法:
用于获取指定字段的int类型的值,参数columnIndex代表字段的索引。
- String getInt(String columnName)方法:
用于获取指定字段的int类型的值,参数columnName代表字段的名称。
- Date getDate(int columnIndex)方法:
用于获取指定字段的Date类型的值,参数columnIndex代表字段的索引。
- Date getDate(int columnName)方法:
用于获取指定字段的Date类型的值,参数columnName代表字段的名称。
- boolean next()方法:
将游标从当前位置指向下移一行
- boolean absolute(int row)方法:
将游标移动到此ResultSet对象的指定行。
- void afterLast()方法:
将游标移动到此ResultSet对象的末尾,即最后一行之后。
- void beforeFirst()方法:
将游标移动到此ResultSet对象的开头,即第一行之前。
- boolean previous()方法:
将游标移动到此ResultSet对象的上一行。
- boolean last()方法:
将游标移动到此ResultSet对象的最后一行。
- String getString(int columnIndex)方法:
在了解了这些之后,接下来看代了解连接步骤:
1.导入数据库驱动jar包:(加载数据库驱动通常使用Class类的静态方法forName()方法来实现,具体实现方式见下图代码。)
2.通过DriverManager类获取数据库连接,创建数据库对象。
3.通过数据库对象调用createStatement()方法创建游标对象。通过游标对象执行SQL语句。
4.通过ResultSet对象获得执行SQL语句返回的结果集。
5.关闭连接,释放资源。通过try……catch……finally代码块统一关闭资源。(依次关闭ResultSet结果集资源、游标对象、数据库连接对象)。
package Other;import java.sql.*;import static java.lang.Class.forName;public class JDBC_Connector {public static void main(String[] args) throws SQLException{//创建java程序与数据库的连接对象Connection connection = null;//创建执行静态SQL语句的接口对象Statement statement = null;//创建游标对象,返回查询结果集ResultSet resultSet = null;//将MySQL数据库驱动名称封装在字符串中String driver = "com.mysql.cj.jdbc.Driver";//指定使用数据库的路径、编码格式、时区,并以字符串进行封装String url = "jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false";//指定登录账户String user = "root";//指定账户密码String psw = "hcy5120184";//加载数据库驱动try {Class.forName(driver);} catch (ClassNotFoundException e) {e.printStackTrace();}//连接数据库connection = DriverManager.getConnection(url,user,psw);//通过Connection对象获取Statement对象statement = connection.createStatement();String sql = "select * from tb_admin";resultSet = statement.executeQuery(sql);System.out.println("id\t|\tuserName\t|\tuserPsw");while(resultSet.next()){int id = resultSet.getInt("id");String userName = resultSet.getString("userName");String userPsw = resultSet.getString("userPsw");System.out.println(id+"\t|\t\t"+userName+"\t\t|\t"+userPsw);}if (resultSet!=null)resultSet.close();if (statement!=null)statement.close();if (connection!=null)connection.close();}
}
运行结果为:
上述有很多方法我并没有进行使用。
这一套连接操作体系,可统一封装在一个类中,但需要使用时,直接通过创建类对象调用相关方法即可。下图为我经常使用的方法封装在了一个类中,代码附上:
package com.other;import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.models.TbAdmin;
import org.apache.commons.beanutils.ConvertUtils;import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;//改进的DBUtils:1.所有的数据库操作都使用了连接池技术 2.查询记录返回值中,不再需要强制转换
public class DBUtils1 {Connection connection = null;Statement statement = null;ResultSet resultSet = null;String driver = "com.mysql.cj.jdbc.Driver";String url = "jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&useSSL=false";String user = "root";String psw = "Sa123456";public void close() {try {if (resultSet != null && !resultSet.isClosed())resultSet.close();if (statement != null && !statement.isClosed())statement.close();if (connection != null && !connection.isClosed())connection.close();} catch (Exception e) {e.printStackTrace();}}//通过连接池获取connection对象public Connection getConnection() {Connection connection = null;ComboPooledDataSource cpds = new ComboPooledDataSource();try {cpds.setDriverClass(driver);cpds.setJdbcUrl(url);cpds.setUser(user);cpds.setPassword(psw);//最大线程池中连接对象10cpds.setMaxPoolSize(10);cpds.setMinPoolSize(1);connection = cpds.getConnection();} catch (Exception e) {e.printStackTrace();}return connection;}public int executeUpdate(String sql) {int result = 0;try {Class.forName(driver);//加载驱动connection = DriverManager.getConnection(url, user, psw);//打开数据库,返回连接数据库对象statement = connection.createStatement();//获取执行sql命令的对象result = statement.executeUpdate(sql);} catch (Exception e) {e.printStackTrace();} finally {close();}return result;}public ResultSet executeQueryResultSet(String sql) {try {Class.forName(driver);//加载驱动connection = DriverManager.getConnection(url, user, psw);//打开数据库,返回连接数据库对象statement = connection.createStatement();//获取执行sql命令的对象resultSet = statement.executeQuery(sql);} catch (Exception e) {e.printStackTrace();}return resultSet;}//查找单条记录,封装在对象中public <T> T executeQueryBean(String sql, Class<T> clzss) {T object = null;try {Class.forName(driver);connection = DriverManager.getConnection(url, user, psw);
// connection = getConnection();statement = connection.createStatement();resultSet = statement.executeQuery(sql);ResultSetMetaData resultSetMetaData = resultSet.getMetaData();if (resultSet.next()) {object = clzss.newInstance();for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {String methodName = resultSetMetaData.getColumnName(i);Field field = clzss.getDeclaredField(methodName);methodName = "set" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1);Method method = clzss.getMethod(methodName, field.getType());method.invoke(object, ConvertUtils.convert(resultSet.getString(i), field.getType()));//将数据库中的值的类型转换成类方法中的形参类型}}} catch (Exception e) {e.printStackTrace();}return object;}//查找多条记录,封装在列表中public <T> List<T> executeQueryBeans(String sql, Class<T> clzss) {List<T> list = new ArrayList<>();try {Class.forName(driver);connection = DriverManager.getConnection(url, user, psw);
// connection=getConnection();statement = connection.createStatement();resultSet = statement.executeQuery(sql);ResultSetMetaData resultSetMetaData = resultSet.getMetaData();while (resultSet.next()) {T object = clzss.newInstance();for (int i = 1; i <= resultSetMetaData.getColumnCount(); i++) {String methodName = resultSetMetaData.getColumnName(i);Field field = clzss.getDeclaredField(methodName);methodName = "set" + methodName.substring(0, 1).toUpperCase() + methodName.substring(1);Method method = clzss.getMethod(methodName, field.getType());method.invoke(object, ConvertUtils.convert(resultSet.getString(i), field.getType()));//将数据库中的值的类型转换成类方法中的形参类型}list.add(object);}} catch (Exception e) {e.printStackTrace();}if (list.size() == 0)list = null;return list;}}
需要导入的jar包为:
如有疑问,欢迎在评论区下方留言交流。若觉得内容稍可,请留下你们的
使用Java语言开发工具idea连接MySQL数据库的基本步骤及操作实例相关推荐
- Python Web开发框架之Django篇——二、Django连接MySQL数据库以及建表的操作
二.Django连接MySQL数据库以及建表的操作 准备工作:安装Python访问MySQL的模块 一.修改project同名目录下面的__init__.py文件 二.修改project同名目录下面的 ...
- mysql java驱动 ibm_Java 通过JDBC连接Mysql数据库
JDBC(java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...
- vs中如何开发mysql_VS2015如何连接mySQL数据库图文
1.新建一个工程名叫mysql,编程环境选择c#,然后选择windows窗体应用程序,新建一个窗体用于显示查询到sql数据库的数据集 2.从工具箱向form1窗体上拖一个按钮和datagridview ...
- IDEA连接MySQL数据库并执行SQL查询操作
打开IDEA后,新建一个项目或者在已有项目上均可操作!!! 1 打开数据库页面 1.1 方式一 在主页面工具栏上找到View(视图)-Tool Windows(工具窗口)-Database(数据库), ...
- wps连接mysql数据库增删改查_Python操作MySQL数据库实例详解【安装、连接、增删改查等】...
本文实例讲述了python操作MySQL数据库.分享给大家供大家参考,具体如下: 1.安装 通过Python连接MySQL数据库有很多库,这里使用官方推荐的MySQL Connector/Python ...
- mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享
Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...
- mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享_PHP教程
Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...
- jsp程序带mysql数据库_【web开发】:JSP连接Mysql数据库(非常详细,代码一看就懂)...
1,首先在自己新建的项目文本框中输入Web Project的名称,然后单击下一步. 2,继续单击下一步 3,把Generate web.xml deployment descriptor复选框勾上. ...
- mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导
背景 最近在进行 MySQL 的 PXC 集群搭建使用和研究 前期已完成了一篇记录文章 : [CentOS7 下 MySQL 之 PXC 集群部署[Docker+多机多节点]] 但是,毕竟不是所有人都 ...
最新文章
- c语言两个for语句并列执行_C语言两个for语句如何并列编写?
- C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))
- 前端_网页编程 WebAPI_01
- 一级计算机电子表格试题,计算机一级考试电子表格题都是出什么样的题目或题型?以及幻灯片?【excel一级考试题目及解析】...
- Eclipse中 *.properties 文件编码设置
- 华为18级工程师三年心血终成趣谈网络协议文档(附详细讲解)
- 在开发IE插件时,遇到的各种问题记录
- mysql数据库双机备份_配置MySQL数据库双机热备份(转)
- 3DMAx:能导入导出的文件格式
- Word——如何在框框□里打打勾√
- 网页表格局部数据比对变色
- java获取其他应用程序的窗口控件
- tcprewrite批量修改报文ip地址一
- 巧用google实现快速搜索
- 消防气体灭火系统(二)
- TDengine与InfluxDB对比测试
- Springboot+vue项目体用用品销售商城网站
- 什么是端口?端口号分为几种类型?
- 头马角色注册系统说明
- 使用SlimYOLOv3框架实现实时目标检测
热门文章
- 电脑C盘快满了,你就重装系统?别犯傻了,看我三分钟搞定(值得收藏备用)
- bzoj 4573 大森林
- FreeBSD5.4Release中文工作站安装笔记 (Freebsd5.4R+Gnome2.10.0)
- 腾讯 SNG 监控数据的创新应用
- 如何检查迷你计算机有无兰牙,如何检查Windows10 PC是否具有内置蓝牙
- c++机房管理系统 大一课程设计
- 苹果Mac电脑使用的集成显卡GPU所有型号汇总
- C#/Java 调用WSDL接口及方法
- 【Vuejs】971- Vue SSR 性能优化实践
- pillow库可视化小错误