当前位置: 首页 > wzjs >正文

站长 网站对比长沙网络公司排行榜

站长 网站对比,长沙网络公司排行榜,6入空间网站免费观看,dw网页设计说明DAY19.2 Java核心基础 JDBC JDBC:Java database Connectivity JDBC是java程序连接各种数据库的组件 Mybatis就是基于JDBC的封装,是独立于数据库的管理系统,通用的SQL数据库存取和操作的公共接口 定义了一套标准,为访问 不同数…

DAY19.2 Java核心基础

JDBC

JDBC:Java database Connectivity

JDBC是java程序连接各种数据库的组件

Mybatis就是基于JDBC的封装,是独立于数据库的管理系统,通用的SQL数据库存取和操作的公共接口

定义了一套标准,为访问 不同数据库提供了统一的途径

  • 导入对应数据库驱动jar
  • 面向JDBC接口编程

JDBC接口包含两部分

  • 面向应用的API,给开发者调用
  • 面向数据库的API,供开发厂商开发数据库驱动

JDBC API

供开发者调用的类,主要在java.sql和javax.sql包中

  • DriverManager 类
  • Connection 接口
  • Statement 接口
  • ResultSet 接口

DriverManager:管理不同的驱动

JDBC驱动:复制连接不同的数据库

JDBC的原理:

加载数据库驱动,java程序和Mysql的桥梁

获取connection连接,一次连接

创建Statement,由Connection生成,执行sql语句

ResultSet保持Statement执行后产生的结果

建立一次连接:

public static void main(String[] args) throws SQLException {// 在URL中添加时区参数 serverTimezone=Asia/ShanghaiString url = "jdbc:mysql://localhost:3306/mytest1?serverTimezone=Asia/Shanghai&useSSL=false";String user = "root";String password = "root";Connection connection = DriverManager.getConnection(url, user, password);System.out.println(connection);
}

加载驱动就是将 JDBC 所需要的驱动类加载到 JVM 中才能运行,通过类加载器进行加载,通过反射机制将该类加载进来

Class.forName(类名) 反射机制,获取运行时类,什么是运行时类?

Java 程序是由类组成的,运行时,会将 Java 所有的类添加到 JVM 内存中,并且每个类只有一份,保持在 JVM 内存中的类叫运行时类,JVM 根据运行时类创建不同的对象,Class.forName(类名) 用来加载运行时类的,将驱动程序添加到 JVM 内存中,程序才能访问。

每个类的作用:

DriveManager:驱动管理类,创建Connection,通过用户名,密码,URL进行校验,校验成功创建一个Connection对象

Connection:表示java程序和Mysql之间的一次连接

Statement:表示sql的执行者,复制执行SQL语句

增删改操作 excute():

public static void main(String[] args) throws SQLException {// 在URL中添加时区参数 serverTimezone=Asia/ShanghaiString url = "jdbc:mysql://localhost:3306/mytest1?serverTimezone=Asia/Shanghai&useSSL=false";String user = "root";String password = "root";Connection connection = DriverManager.getConnection(url, user, password);System.out.println(connection);System.out.println("连接成功");// 定义sql// 增加String insertSql="insert into users(name,gender,score) values('小明','男',90)";// 删除String deleteSql="delete from users where name ='小明'";// 修改String updateSql="update users set name='述雾' where name = 'c'";// 执行sqlPreparedStatement preparedStatement = connection.prepareStatement(insertSql);boolean execute = preparedStatement.execute();System.out.println(execute);preparedStatement.close();preparedStatement = connection.prepareStatement(deleteSql);preparedStatement.execute();preparedStatement = connection.prepareStatement(updateSql);preparedStatement.execute();connection.close();preparedStatement.close();
}

excute():负责执行增 删 改方法

返回的结果是return rs != null && rs.hasRows();,判断是否为查询语句,rs != null表示是否有该对象,rs.hasRows()表示是否有值

executeQuery:负责执行查询方法,返回值 ResultSet,集合,查询肯定要返回查到的数据

返回的结果是一个ResultSet

通过ResultSet的next方法可以取出每一行的值

ResultSet resultSet = preparedStatement.executeQuery();
System.out.println(resultSet.getMetaData().getColumnCount());
while (resultSet.next()){// 方法一
//    String name = resultSet.getString("name");
//    String gender = resultSet.getString("gender");
//    double score = resultSet.getDouble("score");// 方法2String name = resultSet.getString(1);String gender = resultSet.getString(2);double score = resultSet.getDouble(3);System.out.println(name+" "+gender+" "+score);
}

这样每次操作都需要创建Connection,然后创建Statement对象然后执行吗?这样不显得太麻烦了吗

我们可以创建一个工具类来获取Connection连接,一个创建多次使用嘛,然后还可以封装一些方法来更新数据库的字段值

比如创建一个JDBCUtil工具类

在创建的时候初始化该类,初始化Connection对象,然后在insertUsers写一个方法插入到users表中

public class JDBCUtil {public static final String URL = "jdbc:mysql://localhost:3306/mytest1?useSSL=true&serverTimezone=GMT%2B8";public static final String USER = "root";public static final String PASSWORD = "root";public static final String DRIVER = "com.mysql.cj.jdbc.Driver";private Connection connection = null;// 获取连接public void initConnection(){try {Class.forName(DRIVER);connection = DriverManager.getConnection(URL, USER, PASSWORD);System.out.println("连接成功");} catch (ClassNotFoundException e) {throw new RuntimeException(e);} catch (SQLException e) {throw new RuntimeException(e);}}public JDBCUtil(){initConnection();}// 关闭连接public void closeConnection(){if (connection != null){try {connection.close();System.out.println("关闭连接");} catch (SQLException e) {throw new RuntimeException(e);}}}// 插入到users表字段public void insertUsers(String name,String gender,Integer score){String sql = "insert into users(name,gender,score) values('"+name+"','"+gender+"',"+score+")";System.out.println(sql);PreparedStatement preparedStatement = null;try {preparedStatement = connection.prepareStatement(sql);preparedStatement.execute();System.out.println("插入成功");} catch (SQLException e) {throw new RuntimeException(e);} finally {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}}}}

测试函数

public class Test {public static void main(String[] args) throws SQLException {JDBCUtil jdbcUtil = new JDBCUtil();jdbcUtil.insertUsers("张三","男",100);}
}

成功插入

image-20250329172528767

image-20250329172518102

但是有个问题就是这样写sql赋值的时候显得太麻烦了,我们可以用占位符来解决

 String sql = "insert into users(name,gender,score) values('"+name+"','"+gender+"',"+score+")";
String sql = "insert into users(name,gender,score) values(?,?,?)";
System.out.println(sql);
PreparedStatement preparedStatement = null;
try {preparedStatement = connection.prepareStatement(sql);preparedStatement.setString(1,name);preparedStatement.setString(2,gender);preparedStatement.setInt(3,score);preparedStatement.execute();System.out.println("插入成功");
} catch (SQLException e) {throw new RuntimeException(e);
} finally {try {preparedStatement.close();} catch (SQLException e) {throw new RuntimeException(e);}
}

用preparedStatement.setString(占位符的位置,赋值的参数);

根据参数的类型可以选择setString(),setInt,setDouble…来设置,这样就好写多了

下一篇我们来讲解更加高级通用的方法


文章转载自:

http://lsSy551y.xbtLt.cn
http://mee1VwYZ.xbtLt.cn
http://pfZ3u05C.xbtLt.cn
http://srd4XGpz.xbtLt.cn
http://chcP4Ccw.xbtLt.cn
http://D64eGXei.xbtLt.cn
http://ABmJKPkq.xbtLt.cn
http://JLSgSHHF.xbtLt.cn
http://29sfqjzx.xbtLt.cn
http://QirdQDg2.xbtLt.cn
http://jWDTNyUj.xbtLt.cn
http://mgE43nty.xbtLt.cn
http://Bl0oe7pc.xbtLt.cn
http://cloULTv5.xbtLt.cn
http://hDCQ2Z9p.xbtLt.cn
http://yaq13n5r.xbtLt.cn
http://BUN0ZuTC.xbtLt.cn
http://TzjwfO33.xbtLt.cn
http://VntLuEkE.xbtLt.cn
http://fW5Rsdhx.xbtLt.cn
http://Z4O9QN4P.xbtLt.cn
http://PlbBxR02.xbtLt.cn
http://8XfPHFjR.xbtLt.cn
http://k6yr5nEH.xbtLt.cn
http://s52kdeoK.xbtLt.cn
http://HT0aqEzV.xbtLt.cn
http://xSf2xO8F.xbtLt.cn
http://RdMIndCo.xbtLt.cn
http://TkU7GMm3.xbtLt.cn
http://ftesDqUT.xbtLt.cn
http://www.dtcms.com/wzjs/658876.html

相关文章:

  • 怎么创建音乐网站汉阳放心的建站企丿
  • 网站运营主要做什么工作wordpress网站聊天插件
  • 做pc端网站包括哪些微信小程序登录平台
  • 展示型网站建设的标准六安人事考试网
  • 做网站怎么收费深圳网络推广方法
  • 做网站意向客户php网站开发 pdf
  • wordpress博客名字广州seo关键词
  • 易语言做网站视频wap页面是什么意思
  • 网建设门户网站ui设计软件下载官网
  • 电商网站开发的职责网站开发微信提现功能
  • 上海网站建设在哪制作一个简单的网站
  • 品牌形象网站建设找客网怎么样
  • 深圳维特网站建设自己怎么做商城网站
  • 行政机关网站建设wordpress jw
  • 个人优秀网站logo字体设计在线生成
  • 贷款网站怎么做搜索网站开发背景
  • php在网站开发中的作用东莞广告公司招聘信息
  • 网站系统繁忙怎么办网站建设 开发工具 python
  • 红色基调网站濮阳做网站的公司
  • 红古微信网站建设网站单子
  • 做网站多少钱_西宁君博优选嘉兴中小企业网站制作
  • 局域网网站域名怎么做海口企业模板建站
  • 婚嫁网站模板上海企业名称
  • 网站建设 万网网站建设案例ppt
  • 最新微网站建设价格重庆网站设计好的公司
  • dj音乐网站建设开发上海房产做哪个网站好
  • 网站建设微信公众号文章旅行社网站建设规划的内容
  • 网站制作模板软件wordpress preg_replace 关键词 alt
  • 做百科需要参考的网站做网站项目前怎么收集需求
  • WordPress网站图片预加载91色做爰网站