sql语句的进化

1.JDBC

1)JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。

2)它由一组用Java语言编写的类和接口组成,是一个独立于特定数据库管理系统、通用的sql数据库存储和操作的公共接口。

3)JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

2.JDBC常用(重要)类/接口

1)java.sql.Driver接口:

该接口是所有JDBC驱动程序需要实现的接口,这个接口是提供给数据库厂商使用的,不同的数据库厂商提供不同的实现。

注:在程序中不需要直接去访问实现了Driver接口的类,而是驱动程序管理器类去调用这些Driver实现.

2)DriverManager类:

用来创建连接,它本身就是一个创建Connection的工厂,设计的时候使用的就是Factory模式,这个接口也是提供给数据库厂商使用的,各数据库厂商需要实现它。

3)Connection接口

根据提供的不同驱动产生不同的连接。

4)Statement接口

用来发送SQL语句

5)Resultset接口

用来接收查询语句返回的查询结果

3.JDBC应用步骤

1)注册加载一个驱动

2)创建数据库连接(Connection)

3)创建statement,发送sql语句

4)执行sql语句

5)处理sql结果

6)关闭statement和connection

4.访问数据库

在java.sql包中有3个接口分别定义了对数据库的调用的不同方式:

1)statement

1 创建Statement对象
2 Statement sm=conn.createStatement();
3
4 执行数据查询语句(select)
5 sm.executeQuery(sql);
6
7 执行数据更新语句(delete、update、insert、drop等)
8 sm.executeUpdate(sql);

2)prepatedStatement

 1 创建PreparedStatement对象
 2 String sql="INSERT INTO user (id,name) VALUES (?,?)";
 3 PreparedStatement ps=conn.prepareStatement(sql);
 4 ps.setInt(1,1);
 5 ps.setString(2,"admin");
 6
 7 执行数据查询语句
 8 ResultSet rs=ps.executeQuery();
 9
10 执行数据更新语句
11 int c=ps.executeUpdate();

PreparedStatement与Statement比较

  • 使用PreparedStatement,代码的可读性和可维护性比Statement高
  • Statement不安全,PreparedStatement比较安全,能有效解决Sql注入的问题。
  • PreparedStatement能最大可能提高性能。

DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行。 在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义。事实是没有数据库会对普通语句编译后的执行代码缓存。这样每执行一次都要对传入的语句编译一次。

3)CallableStatement

当不直接使用SQL语句,而是调用数据库中的存储过程时,要用到Callable Statement.

CallableStatement从PreparedStatement继承。

创建CallableStatement对象
String sql="{call insert_users(?,?)}";调用存储过程
CallableStatement st=conn.prepareCall(sql);
st.setInt(1,1);
st.setString(2,"admin");

执行
st.execute();

5.处理执行结果

查询语句,返回记录集ResultSet

更新语句,返回数字,表示该更新影响的记录数。

ResultSet对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet接口由数据库厂商实现。

ResultSet对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过ResultSet对象的next()方法移动到下一行。

ResultSet接口常用的方法:

next():将游标往后移动一行,如果成功返回true;否则返回false。

getXXX(String name):返回当前游标下某个字段的值。

6.JDBC事务处理

在JDBC中,事务默认是自动提交的,每次执行一个SQL语句时,如果执行成功,就会向数据库自己提交,而不能回滚。

为了让多个SQL语句作为一个事物执行,需调用Connection对象的setAutoCommit(false);以取消自动提交事务:conn.setAutoCommit

时间: 2024-10-24 14:35:06

sql语句的进化的相关文章

sql语句的进化--hibernate篇

Hibernate对JDBC进行了封装: 1)Hibernate属于持久层的框架(典型三层架构:表示层.业务层.持久层),其他的持久层比如myBatis等 2)hibernate是开源的一个ORM(对象关系映射)框架 ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射.从对象(Object)映射到关系(Relation),再从关系映射到对象.这 样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(

Sql语句的进化--myBatis

1.MyBatis对JDBC的封装 1)MyBatis属于持久层的框架(典型三层架构:表示层.业务层.持久层),其他的持久层比如Hibernate等 2)MyBatis是开源的一个ORM(对象关系映射)框架 ORM是 Object和Relation之间的映射,包括Object->Relation和Relation->Object两方面. Hibernate是个完整的ORM框架,而MyBatis完成的是Relation->Object,也就是其所说的data mapper framewor

走向DBA[MSSQL篇] 针对大表 设计高效的存储过程【原理篇】 附最差性能sql语句进化过程客串

原文:走向DBA[MSSQL篇] 针对大表 设计高效的存储过程[原理篇] 附最差性能sql语句进化过程客串 测试的结果在此处 本篇详解一下原理 设计背景 由于历史原因,线上库环境数据量及其庞大,很多千万级以上甚至过亿的表.目标是让N张互相关联的表 按照一张源表为基表,数据搬移归档 这里我们举例N为50 每张表数据5000W 最差性能sql进化客串 2表KeyName 字段意义 名称等相同 从bug01 表中取出前500条不在bug02 表中的数据 最差性能: SELECT TOP 500 a.K

oracle sql语句运行效率

--当前执行sql语句 SELECT a.SID , a.SERIAL# , a.USERNAME , b.PARSE_CALLS , b.PARSING_SCHEMA_NAME , b.CPU_TIME / 1000000 , b.ELAPSED_TIME / 1000000 , b.DISK_READS , b.DIRECT_WRITES , b.BUFFER_GETS , a.event , b.sql_text , b.SQL_FULLTEXTFROM v$session a INNER

sql 语句之 case

case语句语法: --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END --Case搜索函数 CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END 首先创建一张users表,其中包含id,name,sex三个字段,表内容如下: 复制代码 SQL> drop table users purge; drop table users p

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

JDBC系列:(3)使用PreparedStatement执行sql语句

执行sql语句的接口 接口 作用 Statement接口 用于执行静态的sql语句 PreparedStatement接口 用于执行预编译sql语句 CallableStatement接口 用于执行存储过程的sql语句(call xxx) PreparedStatement Vs Statement 序号 不同 描述 1 语法不同 PreparedStatement可以使用预编译的sql,而Statment只能使用静态的sql 2 效率不同 PreparedStatement可以使用sql缓存区

【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建

数据库的创建和sql语句增删改查 1. 加载驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, name varchar(20), age integer ); 添加: insert into person(name, age) values('lisi', 19); 删除: delete from person where _id = 1; 修改: update person set name =

应用系统如何分析和获取SQL语句的执行代码

大部分开发人员都有这样一个需求,在程序连接数据库执行时,有时需要获取具体的执行语句,以便进行相关分析,这次我向大家介绍一下通用权限管理系统提供的SQL语句执行跟踪记录,直接先看看代码吧:(这个功能我也是在看底层代码时发现的) namespace DotNet.Utilities { /// <summary> /// SQLTrace /// 记录SQL执行 Global 中设置 BaseSystemInfo.LogSQL=true 可以开启跟踪记录 /// /// /// 修改纪录 ///