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

北京做养生SPA的网站建设微信营销的方法

北京做养生SPA的网站建设,微信营销的方法,做网站大概要,.net.cn做网站怎么样目录 JDBC简介快速入门API详解DriverManager(驱动管理类)注册驱动:获取数据库连接(对象): Connection(数据库连接对象)获取执行SQL的对象管理事务 Statement(执行SQL语句)执行DML、DDL语句执行DQL语句 Resu…

目录

  • JDBC
    • 简介
    • 快速入门
    • API详解
      • DriverManager(驱动管理类)
        • 注册驱动:
        • 获取数据库连接(对象):
      • Connection(数据库连接对象)
        • 获取执行SQL的对象
        • 管理事务
      • Statement(执行SQL语句)
        • 执行DML、DDL语句
        • 执行DQL语句
      • ResultSet(结果集对象)
        • 用Result获取查询结果
      • PreparedStatement
        • SQL注入
        • PreparedStatement使用
        • PreparedStatement原理
      • 数据库连接池
        • 数据库连接池实现
        • Druid使用步骤

JDBC

简介

概念:

  • 使用 Java 语言操作关系型数据库的一套API
  • 全称(Java DataBase Connectivity)Java 数据库连接

本质:

  • 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
  • 各个连接厂商去实现这套接口,提供数据库驱动 jar 包
  • 程序员可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类

好处:

  • 各数据库厂商使用相同的接口,Java 代码不需要针对不同的数据库分别开发
  • 可随时替换底层数据库,访问数据库的 Java 代码基本不变

快速入门

步骤:

  1. 创建工程,导入驱动 jar 包在这里插入图片描述

  2. 注册驱动::Class.forName("com.mysql.jdbc.Driver");

  3. 获取连接:Connection [conn对象名称] = DriverManager.getConnection(url, username, password);

  4. 定义SQL语句:String [sql对象名称] = "update……";

  5. 获取执行SQL对象:Statement [stmt对象名称] = conn.createStatement();

  6. 执行SQL:int i = stmt.executeUpdate(sql);

  7. 处理返回结果

  8. 释放资源

API详解

DriverManager(驱动管理类)

作用:

注册驱动:
  • registerDriver(Driver driver) #注册给指定的驱动

  • 在这里插入图片描述

  • mysql 5 之后可以省略步骤中的1(注册驱动),因为JDBC的 jar 包下的META-INF/services/java.sql.Driver 中自动记录了对应的驱动的名称

获取数据库连接(对象):
  • Connection XXX = getConnection(String url, String user, String password) #尝试建立与给定的数据库URL的连接

    上述参数:

    1.url:连接路径

    语法:[(协议)jdbc:mysql://]ip地址(域名):端口号/数据库名称[?]参数键值对1[&]参数键值对2……

    示例:jdbc:mysql://127.0.0.1:3306/db1

    细节:

    • 如果连接的是本机mysql服务器,并且mysql服务器默认端口是3306,则url可以简写为:jdbc:mysql:数据库名称[?]参数键值对
    • 配置useSSL=false参数,禁用安全连接方式,解决警告提示,示例:jdbc:mysql://127.0.0.1:3306/db1?useSSL=false&……
    1. user:用户名
    2. password:密码

Connection(数据库连接对象)

作用:

获取执行SQL的对象
  • Statement XXX = createStatement(); #普通执行SQL对象

    PreparedStatement XXX = prepareStatement(sql); #预编译SQL的执行SQL对象,防止SQL注入

    CallableStatement XXX = prepareCall(sql); #执行存储过程的对象

管理事务
  • MySQL事务管理

    • 开启事务:BEGIN;/ START TRANSACTION;

      提交事务:COMMIT;

      回滚事务:ROLLBACK;

      MySQL默认自动提交事务

  • JDBC事务管理:Connection接口中定义了3个对应的方法

    • 开启事务:setAutoCommit(boolean autoCommit);其中参数为true则自动提交事务、false则手动提交事务(即为开启事务)

      提交事务:commit()

      回滚事务:rollback()

      示例:
      try{
      ​	connection.setAutoCommit(false);// 开启事务int i = stmt.executeUpdate(sql);//执行SQL
      ​	……//处理​	connection.commit();//提交事务
      } catch (Exception  throwables) {
      ​	connection.rollback();//回滚事务
      }
      

Statement(执行SQL语句)

作用:

执行DML、DDL语句
  • 语法:

    int XX = executeUpdate(sql)

  • 返回值XX:

    1. DML语句执行过后,受影响的行数
    2. DDL语句执行后,执行成功也可能返回0(删除表、库)
执行DQL语句
  • ResultSet XX = executeQuery(sql)

ResultSet(结果集对象)

作用:

ResultSet结果集封装了DQL查询语句的结果:

ResultSet XXX = statement.executeQuery(sql);#执行SQL语句,返回ResultSet对象

用Result获取查询结果
  • boolean result = ResultSet.next():

    1. 将光标从当前位置向后移动一行

    2. 判断当前行是否为有效行

    返回值:

    • true:有效行,当前行有数据
    • false:无效行,当前行没有数据
  • XXX getXXX(参数):获取数据

    XXX:数据类型;如:int getInt(参数)、String getString(参数)

    参数:

    • int:列的编号,从1开始
    • String:列的名称

示例:

//1.注册驱动(5.0之后可省略)
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接:如果连接的是本机mysql且端口默认是3306,可以简化书写
String url = "jdbc:mysql://db1?useSSL=false";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username, password);
//3.定义SQL
String sql = "select * from account";
//4.获取statement对象
Statement stmt = conn.createStatement();
//5.执行SQL
ResultSet rs = stmt.executeQuery(sql);//6.处理结果//6.1光标下移一行,并且判断当前行是否有数据
while(rs.next()) { // 列编号的写法//6.2获取数据int id = rs.getInt(1);String name = rs.getString(2);double money = rs.getDouble(3);
}while(rs.next()) {	//列名写法int id = rs.getInt("id");String name = rs.getString("name");double money = rs.getDouble("money");
}

在这里插入图片描述

PreparedStatement

SQL注入

作用:通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击的方法

String name = “heasdasd”;

String pwd = " ’ or ‘1’ = '1 ";

String sql = "select * from tb_user where username = ’ " + name + " ’ and password = ’ " + pwd + ’ " ;

通过上述替换,导致最后的SQL语句变为:

select * from tb_user where username = ’ heasdasd ’ and password = ’ ’ or ‘1’ = ‘1’

由于判断是从左到右执行,那么username的false结果and上password=‘ ’的false结果最终是false,但是之后又or上1=1恒等式那么结果为真

PreparedStatement使用

作用:执行预编译SQL语句(防止SQL注入)

  1. 获取 PreparedStatement 对象

    //SQL语句中的参数值,使用 ? 占位符替代

    String sql = "selsect * from user where username = ? and password = ? ";

    //通过Connection对象获取,并传入对应的SQL语句

    PreparedStatement pstmt = conn.prepareStatement(sql);

  2. 设置参数值

    PreparedStatement对象.setXxx(参数1,参数2):给SQL语句中的 ?占位符 赋值

    Xxx:参数对应的数据类型,如Int、string等

    参数:

    • 参数1: ? 占位符 在SQL语句中的位置编号,从1开始
    • 参数2: ? 占位符 里面的值
  3. 执行SQL

    executeUpdate(); / executeQuery(); 不需要再传递sql

    executeUpdate(); #执行查询语句,返回结果集

    executeQuery(); #执行更新语句,返回受影响的行数

PreparedStament是通过转义字符的形式,达到单引号不会跟我们的sql语句中的单引号进行配对

PreparedStatement原理

原理:

  1. 在获取PreparedStatement对象时,将sql语句发送给mysql服务器进项检查、编译(这个步骤很耗时)
  2. 执行时就不用进行这些步骤了,速度更快
  3. 如果sql模板一样,则只需要进行一次检查、编译

好处:

  • 预编译SQL,性能更高
  • 防止SQL注入:将敏感字符进行转义
  1. PreparedStatemrnt预编译功能开启:

    useServerPrepStmts=true

    #加到获取连接后的参数中:

    String url = “jdbc:mysql://db1?useSSL=false&useServerPrepStmts=true”;

  2. 配置MySQL执行日志(配置文件写在my.ini文件最后,重启MySQL服务后生效)

    log-output=FILE

    general-log=1

    general_log_file=“D:mysql.log” #里面的目录需要根据实际目录进行改动

    slow-query-log=1

    slow_query_log_file=“D:\mysql_slow.log”

    long_query_time=2

数据库连接池

简介

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
  • 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

好处:

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接遗漏
数据库连接池实现

标准接口:DataSource

  • 官方(SUN)提供的数据库连接池标准接口,由第三方组织实现此接口

  • 功能:获取连接

    Connection getConnection()

常见的数据库连接池:

  • DBCP
  • C3P0
  • Druid

Druid(德鲁伊):

  • Druid连接池是阿里巴巴开源的数据库连接池项目
  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一
Druid使用步骤
  1. 导入jar包 druid-1.1. 12.jar在这里插入图片描述

  2. 定义配置文件(项目名称.iml)在这里插入图片描述

  3. 加载配置文件

    Properties prop = new Properties();

    prop.load(new FileInputStream(“路径[jdbc-demo(模块)/src/druid.properties]”));

    #注意:路径可能会报错,问题是路径有时候需要加模块的名称

    #解决的通用方法:通过System.out.println(System.getProperty(“user.dir”));打印出这个项目的路径,通过找到模块的路径,进行拼接(即打印出的项目名称作为默认的项目名称,之后通过找到Durid的jar包的路径填入)

  4. 获取数据库连接池对象

    DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);

  5. 获取连接

    Connection connection = dataSource.getConnection();

注意:

在实体类中,基本数据类型建议使用其对应的包装类型(因为基本数据类型有默认的值,可能会对业务造成影响)


文章转载自:
http://dolichocranic.jpkk.cn
http://hyposensitive.jpkk.cn
http://celticist.jpkk.cn
http://tungstenic.jpkk.cn
http://antithetic.jpkk.cn
http://grandam.jpkk.cn
http://conglomeracy.jpkk.cn
http://hydroski.jpkk.cn
http://tubicolous.jpkk.cn
http://province.jpkk.cn
http://grotesquery.jpkk.cn
http://grafter.jpkk.cn
http://tamarack.jpkk.cn
http://ginny.jpkk.cn
http://regrow.jpkk.cn
http://nonintervention.jpkk.cn
http://pentamer.jpkk.cn
http://autotoxin.jpkk.cn
http://numismatics.jpkk.cn
http://epizoic.jpkk.cn
http://internationally.jpkk.cn
http://sheffield.jpkk.cn
http://predate.jpkk.cn
http://peal.jpkk.cn
http://unnatural.jpkk.cn
http://noah.jpkk.cn
http://maxilla.jpkk.cn
http://lilylike.jpkk.cn
http://scouting.jpkk.cn
http://sabbatarianism.jpkk.cn
http://semiglobular.jpkk.cn
http://blether.jpkk.cn
http://rathripe.jpkk.cn
http://oligocene.jpkk.cn
http://solen.jpkk.cn
http://unbishop.jpkk.cn
http://fishkill.jpkk.cn
http://zebeck.jpkk.cn
http://unfilterable.jpkk.cn
http://togae.jpkk.cn
http://jigotai.jpkk.cn
http://subdeacon.jpkk.cn
http://matrilateral.jpkk.cn
http://skiascope.jpkk.cn
http://kennebec.jpkk.cn
http://tarnal.jpkk.cn
http://petroleum.jpkk.cn
http://yestreen.jpkk.cn
http://visitant.jpkk.cn
http://chariot.jpkk.cn
http://megaera.jpkk.cn
http://snort.jpkk.cn
http://subcutaneous.jpkk.cn
http://amalgamate.jpkk.cn
http://estovers.jpkk.cn
http://natator.jpkk.cn
http://unliveable.jpkk.cn
http://melilot.jpkk.cn
http://eggcrate.jpkk.cn
http://geophagy.jpkk.cn
http://cryptate.jpkk.cn
http://prussianise.jpkk.cn
http://theolatry.jpkk.cn
http://spile.jpkk.cn
http://unbefriended.jpkk.cn
http://fumatorium.jpkk.cn
http://gabe.jpkk.cn
http://clicker.jpkk.cn
http://toulon.jpkk.cn
http://bourgeon.jpkk.cn
http://cyclolysis.jpkk.cn
http://aruspex.jpkk.cn
http://vesicular.jpkk.cn
http://spectrofluorometer.jpkk.cn
http://ratt.jpkk.cn
http://arrangement.jpkk.cn
http://malignant.jpkk.cn
http://inward.jpkk.cn
http://ribald.jpkk.cn
http://enormity.jpkk.cn
http://ectype.jpkk.cn
http://president.jpkk.cn
http://streamside.jpkk.cn
http://undeliverable.jpkk.cn
http://thimbleful.jpkk.cn
http://climbing.jpkk.cn
http://amphisbaena.jpkk.cn
http://dyslogy.jpkk.cn
http://creasote.jpkk.cn
http://family.jpkk.cn
http://fieriness.jpkk.cn
http://firepan.jpkk.cn
http://nyp.jpkk.cn
http://legumen.jpkk.cn
http://rubify.jpkk.cn
http://donkeyback.jpkk.cn
http://gyrograph.jpkk.cn
http://cinquain.jpkk.cn
http://lagune.jpkk.cn
http://impressively.jpkk.cn
http://www.dt0577.cn/news/23926.html

相关文章:

  • 建站abc登录入口朝阳区seo搜索引擎优化介绍
  • 来宾网站制作公司杭州网络推广外包
  • 做网站和淘宝美工 最低电脑百度网站app下载
  • 网站建设需要哪些人网易企业邮箱
  • 共享办公wework湖南seo优化价格
  • 国外网站托管百度入口网页版
  • 虚拟主机控制面板怎么建设网站掉发脱发严重是什么原因
  • 鼎成中考开卷通有关网站做的电子书广州新闻24小时爆料热线
  • 中国空间站建成时间百度云app下载安装
  • 哪里有做空包网站的百度网盘登陆入口
  • 衡水的网站建设百度搜索网址
  • wordpress主页空白seo顾问是什么
  • 如何做美食的视频网站新开发的app怎么推广
  • 平度市城乡建设局网站制作一个网站大概需要多少钱
  • 网站建设哈尔滨网站建设1互联网营销推广方案
  • 网站建设的一般步骤包括哪些今日热点新闻事件摘抄2022
  • asp网站建设下载广告资源网
  • 手机自适应网站建设体验营销策略
  • 做网站 用asp什么是友情链接?
  • 做购物平台网站客户体验活动怎么制作网页
  • 青岛专门做网站的公司百度网盘pc网页版入口
  • 创建个人微信公众号seo案例分享
  • 个人博客网站教程站长工具同大全站
  • 无锡网站建设 首选无锡立威云商公司查询
  • 门户类网站模板高德北斗导航
  • 公司宣传推广方案湖南网站建设seo
  • 企业网站设计哪家好如何搭建一个网站
  • 发布任务做任务赚钱网站百度推广账号
  • 如何编程建设网站自己厦门人才网唯一官方网站
  • 游戏网站风控怎么做青岛网络优化代理