Java连接MySQL数据库并进行一些基本操作以及导入jar包的两种方式

其实,任何开发工具连接数据库无非就是三步:1.安装驱动。2.加载驱动,创建连接对象。3.创建对象操作游标。4.游标调用函数完成执行SQL语句。 但是在各种语言开发工具进行连接过程中,这些过程操作又有一定的差异。接下来我们来了解Java语言开发工具idea连接数据库的基本操作。

首先进行了解,什么是JDBCJDBC是一套用于执行SQL语句的Java API,应用程序可通过这套API连接到关系数据库。并使用SQL语句完成对数据库中数据的查询、新增、更新、删除等操作。应用程序使用JDBC访问特定的数据库时,只需要通过不同的数据库驱动与其对应的数据库进行连接,再进行相应的操作即可。

  1. JDBC常用的API,主要位于java.sql包中,该包定义了一系列访问数据库的接口和类。
  2. Driver接口:Driver接口是所有JDBC驱动程序必须实现的接口,该接口专门提供给数据库厂商使用,即将所使用的数据库驱动程序加载到项目classpath中。也就是导入jar包:
    导包的具体过程为:1.File-->Project Setting-->Moudles-->dependencies-->点击12 version ……-->+ 然后选择完之后勾选,最后Apply即可。
    或者
    2.在src文件夹下-->右击-->Open Moudles Settings dependencies-->点击12 version ……-->+ 然后选择完之后勾选,最后Apply即可。
    具体位置如图所示

  1. DriverManager接口:DriverManager类用于加载数据库驱动并创建与数据库的连接。通过DriverManager类中的静态方法getConnection(String url,String user,String pwd)来建立和数据库的连接,并返回表述连接的Connection对象。
  1. Connection接口:Connection接口代表Java程序与数据库的连接对象。只有获得该连接对象之后,才能访问数据库,操作数据表。相当于游标对象。

    • Statement crestStatement()方法:
      通过Connection接口调用crestStatement方法。返回一个向数据库发送语句的Statement对象,即创建游标对象。
    • PreparedStatement preparedStatement(String sql)方法:
      该方法用于返回一个PreparedStatement对象,该对象用于向数据库发送参数化的SQL语句。
    • CallableStatement prepareCall(String sql)方法:
      该方法用于返回一个CallableStatement对象,该对象用于调用数据库中的存储过程。
  1. 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对象。
  1. 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)方法:
      将二进制的输入流数据写入到二进制字段中。
  1. 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对象的最后一行。

在了解了这些之后,接下来看代了解连接步骤:
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数据库的基本步骤及操作实例相关推荐

  1. Python Web开发框架之Django篇——二、Django连接MySQL数据库以及建表的操作

    二.Django连接MySQL数据库以及建表的操作 准备工作:安装Python访问MySQL的模块 一.修改project同名目录下面的__init__.py文件 二.修改project同名目录下面的 ...

  2. mysql java驱动 ibm_Java 通过JDBC连接Mysql数据库

    JDBC(java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  3. vs中如何开发mysql_VS2015如何连接mySQL数据库图文

    1.新建一个工程名叫mysql,编程环境选择c#,然后选择windows窗体应用程序,新建一个窗体用于显示查询到sql数据库的数据集 2.从工具箱向form1窗体上拖一个按钮和datagridview ...

  4. IDEA连接MySQL数据库并执行SQL查询操作

    打开IDEA后,新建一个项目或者在已有项目上均可操作!!! 1 打开数据库页面 1.1 方式一 在主页面工具栏上找到View(视图)-Tool Windows(工具窗口)-Database(数据库), ...

  5. wps连接mysql数据库增删改查_Python操作MySQL数据库实例详解【安装、连接、增删改查等】...

    本文实例讲述了python操作MySQL数据库.分享给大家供大家参考,具体如下: 1.安装 通过Python连接MySQL数据库有很多库,这里使用官方推荐的MySQL Connector/Python ...

  6. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享

    Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...

  7. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享_PHP教程

    Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...

  8. jsp程序带mysql数据库_【web开发】:JSP连接Mysql数据库(非常详细,代码一看就懂)...

    1,首先在自己新建的项目文本框中输入Web Project的名称,然后单击下一步. 2,继续单击下一步 3,把Generate web.xml deployment descriptor复选框勾上. ...

  9. mysql数据库的pxc工具_CentOS7 下 MySQL 数据库 PXC 集群部署操作指导

    背景 最近在进行 MySQL 的 PXC 集群搭建使用和研究 前期已完成了一篇记录文章 : [CentOS7 下 MySQL 之 PXC 集群部署[Docker+多机多节点]] 但是,毕竟不是所有人都 ...

最新文章

  1. c语言两个for语句并列执行_C语言两个for语句如何并列编写?
  2. C++起始(内联函数,宏的优缺点,const关键字,auto关键字(C++11)基于范围的for循环(C++11). 指针空值nullptr(C++11))
  3. 前端_网页编程 WebAPI_01
  4. 一级计算机电子表格试题,计算机一级考试电子表格题都是出什么样的题目或题型?以及幻灯片?【excel一级考试题目及解析】...
  5. Eclipse中 *.properties 文件编码设置
  6. 华为18级工程师三年心血终成趣谈网络协议文档(附详细讲解)
  7. 在开发IE插件时,遇到的各种问题记录
  8. mysql数据库双机备份_配置MySQL数据库双机热备份(转)
  9. 3DMAx:能导入导出的文件格式
  10. Word——如何在框框□里打打勾√
  11. 网页表格局部数据比对变色
  12. java获取其他应用程序的窗口控件
  13. tcprewrite批量修改报文ip地址一
  14. 巧用google实现快速搜索
  15. 消防气体灭火系统(二)
  16. TDengine与InfluxDB对比测试
  17. Springboot+vue项目体用用品销售商城网站
  18. 什么是端口?端口号分为几种类型?
  19. 头马角色注册系统说明
  20. 使用SlimYOLOv3框架实现实时目标检测

热门文章

  1. 电脑C盘快满了,你就重装系统?别犯傻了,看我三分钟搞定(值得收藏备用)
  2. bzoj 4573 大森林
  3. FreeBSD5.4Release中文工作站安装笔记 (Freebsd5.4R+Gnome2.10.0)
  4. 腾讯 SNG 监控数据的创新应用
  5. 如何检查迷你计算机有无兰牙,如何检查Windows10 PC是否具有内置蓝牙
  6. c++机房管理系统 大一课程设计
  7. 苹果Mac电脑使用的集成显卡GPU所有型号汇总
  8. C#/Java 调用WSDL接口及方法
  9. 【Vuejs】971- Vue SSR 性能优化实践
  10. pillow库可视化小错误