使用JAVA连接数据库的几个步骤

加载驱动类

DriverManager接口:JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序
并在数据库和相应的驱动程序间建立连接。
Class.forName(“com.mysql.cj.jdbc.Driver”)

建立连接对象(Connection)

连接对象内部包含了Socket对象,远程连接,比较耗时,Connection对象管理要点
为了提高效率,一般使用连接池来管理连接对象
需要用到的参数:url,登陆用户,登陆密码
Connction conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/数据库名?serverTimezone = GMT”,“用户”,“密码”);

传入sql语句和设置参数

Statement—>(继承)PreParedStatement(带参数的sql语句) -->(继承)CallableStatement(调用存储过程)

1)Statement
.createStatement(); //来获得Statement对象
.execute(sql语句); //执行语句,返回是否有结果集
.executeQuery(); //运行select语句,返回ResultSet结果集
.executeUpdate(); //运行insert/update/delete操作,返回更新的行数
需要使用字符串拼接sql语句 易发生sql注入的危险:传入不规范的参数,会轻易的修改和删除表中数据

2)PreparedStatement 预处理,效率更高,防止sql注入
.prepareStatement(sql); //获得PreparedStatement对象,并用sql语句预处理,使用占位符
.set类型(索引,参数); //传入参数,参数索引从1开始 可以直接使用setObject()
.execute(); //执行操作 先传参后执行

PreparedStatement pStatement = conn.prepareStatement(“sql语句”);
PS:在sql语句中可以使用`?`,可暂时代替参数,通过传参来传入不同的值

获取返回值

更新语句一般使用:pStatement.executeUpdate(),返回改变行数
查询语句一般使用:Statement.executeQuery(),返回ResultSet对象

ResultSet对象接收返回值

ResultSet rSet = pStatement.executeQuery()
使用next()方法对rSet进行遍历
PS:rSet对象的第一位并未存放数据,必须先rSet.next(),再访问
提取数据:Obejct obj = rSet.getObject(index或column_name)

:一个完整的数据库访问操作

public static void main(String[] args) {Connection cTion = null;PreparedStatement oStatement = null;ResultSet mySet = null;try {//①加载驱动类Class.forName("com.mysql.cj.jdbc.Driver");//②建立连接,(连接对象内部包含了Socket对象,远程连接,,比较耗时,Connection对象管理要点)//中为了提高效率,使用连接池来管理连接对象cTion =                                                  //时区报错DriverManager.getConnection("jdbc:mysql://localhost:3306/mfqh?serverTimezone = GMT","root","********");//③将sql语句传入参数oStatement = cTion.prepareStatement("select * from student where id>?;");oStatement.setObject(1,"2");//④获取查询/操作结果mySet = oStatement.executeQuery();//⑤输出while(mySet.next()) {System.out.println("id:"+mySet.getObject(1)+"\tage"+mySet.getObject(2)+"\tname"+mySet.getObject(3));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {try {if(mySet != null) {mySet.close();}} catch (SQLException e) {e.printStackTrace();}try {if(oStatement != null) {oStatement.close();}} catch (SQLException e) {e.printStackTrace();}try {if(cTion != null) {cTion.close();}} catch (SQLException e) {e.printStackTrace();}}
}

测试结果:

一些其它常用操作

事务管理

批处理
①Batch处理建议使用Statement,因为PrepareStatement预编译空间有限,当数据量大时,会发生异常
②需在连接数据库时,在url后面拼接参数rewriteBatchedStatements = true 来开启批处理
Connectinon.setAutoCommit(false);
Statement.addBatch(sql); //添加处理事件
Statement.exexuteBatch(); //执行批处理
Connectinon.commit(); //提交事务

ps:使用批处理时,添加数据时需使用values,因为value不标准,不能正常执行批处理

两种特殊的数据存储类型:CLOB(Character Large Object)和BLOB(BInary Large Object)

①CLOB:用于存储大量的文本数据,大字段以字符流的方式来处理
在传参时,使用pStatement.setClob(参数索引,Reader流)
通过sql语句查到CLOB对象时,通过.getCharacterStream()方法获取输入流,以此读取数据
tips:将字符串转换为byte数组,再借助byteArrayInputStream、InputStreamReader即可转为字符流
②BLOB:用于存储大量的二进制数据,大字段以字节流的方式来处理
使用setBlob(索引,InputStream流)和getBinaryStream()来进行输入和提取

DataBaseMetaData(数据库元数据)

DatabaseMetaData dbmd = conn.getMetaData();
①获取所有表(获取库中所有的表(数据库名、表架构、表名、类型(TABLE、VIEW))
PS:若不指定库名,会返回数据库中所有用户建立的表
ResultSet tableRet = dbmd.getTables(dbname, “%”, “%”, new String[] {“TABLE”});
②获取字段
ResultSet set = dbmd.getColumns(null, “%”, tableName, “%”);
set.getString(“COLUMN_NAME”) //获取列名
set.getString(“TYPE_NAME”)//获取列类型
③获取主键
ResultSet setPri = dbmd.getPrimaryKeys(null, “%”, tableName);

JDBC简单连接MySQL相关推荐

  1. JDBC SSL连接MySQL

    最近碰到个JDBC连接MySQL出现SSL错误的问题. SSL(Secure Socket Layer:安全套接字层),利用数据加密.身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提 ...

  2. JDBC简单连接查询MySQL数据库

    代码: DButil.java(连接关闭数据库的类) import java.sql.DriverManager; import java.sql.SQLException; import java. ...

  3. JDBC: Java连接MySQL

    文章目录 一.Java连接MySQL数据库步骤 二.JDBC基本操作:CRUD 2.1 Statement 2.2 ResultSet 之滚动结果集(了解) 2.3 示例: 查询用户 2.4 DBUt ...

  4. 数据库编程连接mysql_使用JDBC编程-连接MySQL数据库

    作者:李老师,吕老师              2019-09-23 准备工作: 1.首先安装MySQL5.5.30 64位:链接:https://pan.baidu.com/s/1H99PH-jRq ...

  5. Android Studio使用JDBC远程连接mysql的注意事项(附示例)

    JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载 ...

  6. android studio用mysql_Android Studio使用JDBC远程连接mysql的注意事项(附示例)

    JDBC为java程序访问各种类型的关系型数据库提供了统一的接口,用户不必针对不同数据库写出不同的代码,但是使用JDBC必须得下载相应的驱动,比如我这里是要连接mysql,于是就到mysql官网去下载 ...

  7. JDBC——java连接mysql、hive、hbase教程

    JDBC模板 一.准备工作 1.1.创建Maven工程 1.2.修改pom文件 1.3.修改Project Structure 1.4.修改Settings 1.5.资源文件夹 二.Java连接mys ...

  8. matlab jdbc mysql_Matlab连接MySQL(ODBC及JDBC驱动)

    前言: MySQL最新版本已经更新到了8.0,MATLAB最新版本是2018a,教程基于最新版. 电脑需安装MATLAB以及MySQL数据库. ODBC操作步骤: 安装 MySQL Connector ...

  9. 【JDBC】连接MySQL数据库实现增删改查

    文章目录 一.JDBC编写步骤 二.数据库连接--Connection 2.1 连接要素 2.1.1 Driver接口实现类 2.1.2 URL 2.1.3 用户名和密码 2.2 建立连接 2.2.1 ...

最新文章

  1. Linux系统搭建FTP服务器
  2. 为什么华为在发布会不提鸿蒙,华为又要开发布会?这次没有手机,鸿蒙系统要当主角!...
  3. 用 Python脚本生成 Android SALT 扰码
  4. Uiautomator--Uiselector元素定位
  5. 中国智能高清视频监控未来发展趋势
  6. html5手机端三级联动城市选择代码,省市县三级联动(jQuery手机端收货地址选择地区代码)...
  7. 信息学奥赛一本通 2033:【例4.19】阶乘之和
  8. 设置访问权限_CentOS7利用Firewall对PostgreSQL设置安全的访问权限
  9. 2021年中国单索运动滑轮市场趋势报告、技术动态创新及2027年市场预测
  10. .Net页面缓存OutPutCache详解
  11. php formdata 解析,系统学习前端之FormData详解
  12. 【单片机】51单片机烧录那些事儿
  13. “盲人”马云:骑着盲虎贩卖梦想
  14. 计算机桌面上的声音图标没了,Windows7旗舰版桌面音量图标消失的原因
  15. OpenGL 之 EGL 使用实践
  16. Unexpected token o in JSON at position 1 at JSON.parse (anonym)
  17. 人工智能的五大核心技术
  18. checkedListBoxControl的用法
  19. A visval git reference实践记录
  20. android 开发快捷键,Android开发部分快捷键总结

热门文章

  1. BGP——路由通告+IBGP水平分割机制+RR路由反射器(讲解+配置命令)
  2. 简说设计模式——策略模式
  3. 2021 Spring 自定义注解 +AOP +方法入参
  4. 安装EXSI遇到No Network Adapters的解决方案
  5. js对象数组计算总计_如何计算数组中的对象
  6. 如何使用Dependabot保持环境最新
  7. react 组件名称重复_设计可重复使用的React组件
  8. springMVC发送邮件
  9. python扫雷游戏课程设计小组任务计划与分配表_Python开源扫雷游戏由网瘾少年制作,转手后月入18K,附赠所有源文件...
  10. 图片渲染延迟_2D Canvas 的渲染优化