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语句时,如果执行成功,就会向数据库自己提交,而不能回滚。

1 #取消自动提交事务:
2 conn.setAutoCommit(false);
3 #在所有的SQL语句都成功执行之后,调用commit()方法提交事务
4 conn.commit();
5 #在出现异常时,调用rollback()方法回滚事务,一般再在catch模块中执行回滚操作
6 conn.rollback();

注:可以通过Connection的getAutoCommit()方法来获得当前事务的提交方式。

转载于:https://www.cnblogs.com/zhangchengzhangtuo/p/5616563.html

sql语句的进化--原始篇相关推荐

  1. 【SQL语句】SQL语句大全之技巧篇

    文章目录 前言 1.1=1,1=2的使用,在SQL语句组合时用的较多 2.压缩数据库 3.转移数据库给新用户以已存在用户权限 4.检查备份集 5.修复数据库 6.说明:更改某个表 7.存储更改全部表 ...

  2. mysql基本sql语句大全(基础用语篇)

    mysql基本sql语句大全(基础用语篇). 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明 ...

  3. 经典SQL语句大全(提升篇)

    提升篇 1.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer) ...

  4. 经典SQL语句大全(技巧篇)

    技巧篇 1.1=1,1=2的使用,在SQL语句组合时用的较多 "where 1=1" 是表示选择全部 "where 1=2"全部不选, 如: if @strWh ...

  5. SQL语句汇总(终篇)—— 表联接与联接查询

    上一篇博文说到相关子查询效率低下,那我们怎么能将不同表的信息一起查询出来呢?这就需要用到表联接. 和之前的UNION组合查询不同,UNION是将不同的表组合起来,也就是纵向联接,说白了就是竖着拼起来. ...

  6. mysql的经典sql语句大全_经典SQL语句大全_基础篇_提升篇_技巧篇_开发经典篇

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  7. mysql用语_mysql基本sql语句大全(基础用语篇)

    1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...

  8. mysql sql语句提升_mysql基本sql语句大全(提升用语篇)

    1.说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 1<>1(仅用于SQlServer) 法二:s ...

  9. (转载)经典SQL语句大全3-技巧篇

    三.技巧 1.1=1,1=2的使用,在SQL语句组合时用的较多 "where 1=1"是表示选择全部    "where 1=2"全部不选, 如: if @st ...

最新文章

  1. 【青少年编程】【四级】绘图程序优化
  2. 重磅!Google推出了Python最牛X的编辑器......
  3. Coding-数组(Array)
  4. F​P​G​A​工​作​原​理
  5. react native初始化项目
  6. P4309 [TJOI2013]最长上升子序列 平衡树 + dp
  7. python数据类型及字符编码
  8. AcWing1088.旅行问题(单调队列DP)
  9. 【故障诊断分析】基于matlab小波包能量分析轴承故障诊断【含Matlab源码 1620期】
  10. finereport9.0破解版|finereport10.0破解并发数|finereport授权注册|FineBI5.0破解lic
  11. 线性代数学习之坐标转换和线性变换
  12. 乌龟git配置ssh密钥
  13. linux定时器时间轮算法详解
  14. adb命令——简单常用命令介绍:截图——adb shell screencap -p /sdcard/123.png...
  15. Codeforces1040B Shashlik Cooking
  16. ArcGIS操作系列(一)之地理配准
  17. 你应该懂得的关于电脑配置冷知识
  18. 解决在微信中不能直接发送和下载APK的方案
  19. xboxone硬盘坏的表现_详解硬盘常见的故障及解决方法
  20. 中国十大域名圈高手 看看知道几个

热门文章

  1. 高级驾驶辅助系统ADAS
  2. IEEE的论文需要注意的一些
  3. 度量.net framework 迁移到.net core的工作量
  4. 查看HTTP请求返回状态码对照表详解
  5. C# 面向对象之继承后初始化顺序
  6. You should rebuild using libgmp = 5 to avoid timing attack vulnerability.
  7. Java算法--串的简单处理
  8. IT专家经验教训分享: 我犯过的九件大错
  9. EXCEL打开CSV文件乱码的解决方法
  10. 解决在Ubuntu下打开txt文件乱码的问题