JDBC编程,从入门到精通
今天突然想多说两句,刚刚在知乎看到一个人说,在当今世界,没有技术型驱动的公司,全都是业务型。即便是表面上看似技术型公司,其本质还是为了服务业务。这段话推翻了我以前关于编程的所有看法,觉得颇有道理。下面也来说说web应用的本质。
1.什么是web应用?就是用户通过浏览器,访问服务器,进行一系列操作,保存数据,修改数据的应用。其核心,就是对数据的操作。不管什么框架、什么UI,其目的还是对数据进行操作。所以,对于数据库的操作,是web应用的重中之重。而jdbc又是数据库操作中最为重要的基石。
2.jdbc的基本操作,看如下代码及注释:
首先加载数据库驱动程序,然后用驱动管理器获取数据库连接
private static final String URL="jdbc:mysql://127.0.0.1:3306/xiao";
private static final String NAME="root";
private static final String PASSWORD="13720994358lhp";
static Connection connection=null;
static {
try {
//1.加载数据库驱动程序
Class.forName("com.mysql.jdbc.Driver"); //2.获取数据库连接
connection = DriverManager.getConnection(URL, NAME, PASSWORD);
}catch (ClassNotFoundException e){
System.err.println("未找到数据库加载程序");
}catch (SQLException e){
System.err.println("数据库错误" +e);
}
}
然后用获取到的连接connection获取一个数据库操作对象,该对象可以执行sql
Statement statement=connection.createStatement();
statement.execute("sql语句");
还有另一种执行sql的对象,叫做预处理。什么意思呢?就是先把sql的模板放进去,然后执行的时候再把具体的参数一一带入,这样做可以减少连接数据库的次数。代码如下:
PreparedStatement preparedStatement=connection.prepareStatement(sql);
preparedStatement.setString(1,goddess.getUserName());
preparedStatement.setInt(2,goddess.getSex());
preparedStatement.setInt(3,goddess.getAge());
preparedStatement.setDate(4,new Date(goddess.getBirthday().getTime()));
preparedStatement.setString(5,goddess.getEmail());
preparedStatement.setString(6,goddess.getMobile());
preparedStatement.setString(7,goddess.getCreateUser());
preparedStatement.setString(8,goddess.getUpdateUser());
preparedStatement.setInt(9,goddess.getIsdel());
增删改查基本上操作都一样,区别在于,增加删除修改,最后statement调用执行sql的方法有所不同查询是preparedStatement.executeQuery(),修改是preparedStatement.executeUpdate()等等
3.jdbc调用无参存储过程。存储过程怎么写在此不做说明,只说java代码如何调用存储过程。
//1.获得连接
Connection connection= DBUtil.getConnection(); //2.要获得执行存储过程的对象
CallableStatement callableStatement=connection.prepareCall("call sp_select_nofilter()"); //3.执行存储过程
callableStatement.execute(); //4.获得结果集对象
ResultSet rs=callableStatement.getResultSet();
4.JDBC调用带入参的存储过程,相比于不带参数就多了一点变化:先用?代替sql中的参数,再在后面设置参数的具体值。
Connection connection=DBUtil.getConnection();
CallableStatement callableStatement=connection.prepareCall("call sp_filter(?)");
callableStatement.setString("1","");
callableStatement.execute();
ResultSet resultSet=callableStatement.getResultSet();
5.JDBC调用带有出参的存储过程,相比于带有入参的又多了一点变化,请看代码:
Connection connection=DBUtil.getConnection();
CallableStatement callableStatement=connection.prepareCall("call sp_select_count(?)"); //与入参存储过程不同的是,出参不能提前设置,而需要注册,第一个参数是索引,第二个参数是数据库字段类型
callableStatement.registerOutParameter(1, Types.INTEGER);
callableStatement.execute();
int count=callableStatement.getInt("1");
return count;
6.JDBC的事务操作。具体什么是事务操作,在这里不做详细说明,网上百度一大把,很详细。简而言之就是一句话,要一次完成一系列对数据库的操作,如果中间某个环节出现问题,则需要将所有操作回退。举个最简单的例子:银行转账,先在A的账户扣一百块,再给B的账户加一百块,这样完成了从A到B的转账,假如在A已经扣钱而B没有加钱的情况下,程序突然出错了,那怎么办?A的钱已经扣了,而B的钱还没加,钱去哪了??这就是事务操作的重要性。请看代码:
public static business(){
Connection connection=DBUtil.getConnection(); //本来数据库默认自动提交数据,现在关掉
connection.setAutoCommit(false);
try{
//进行数据库操作之后,手动提交数据,在提交完成后才生效
connection.commit();
}catch (Exception e){
//当陈程序发生异常,首先要把所有对数据库的操作回退
connection.rollback();
}
}
7.数据库连接池。上文讲到,当程序需要对数据库进行操作的时候,第一步请求连接数据库,第二步进行数据库操作,第三步关闭数据库连接。加入一个项目很大,每一次请求都会走这三步,将非常消耗资源。不如创造一个池子,专门管理一些常态连接,当需要的时候从池子里拿,不需要的时候再放回去。这样可以节约资源。比较常用的有dbcp连接池和c3p0连接池,使用方法如下:
##首先设置配置文件,将连接数据库需要的相关参数放进来统一管理
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcURL=jdbc\:mysql\://127.0.0.1\:3306/xiao
c3p0.user=root
c3p0.password=13720994358lhp
上面是一个properties文件,里面有一些连接数据库需要的常量。
然后当程序启动的时候会自动加载这个配置文件,获得数据库连接,代码如下:
private static ComboPooledDataSource dataSource=new ComboPooledDataSource();
public static Connection getConnection()throws SQLException {
return dataSource.getConnection();
}
JDBC编程,从入门到精通的更多相关文章
- 《Linux.Shell编程从入门到精通》读书笔记
第一章 第一个Shell程序 以 #!解析器名称 开头,表示选择哪个解释器解释shell脚本 source命令 export命令 env命令 unset命令 第二章 shell编程基础 函数传递 标准 ...
- Java并发编程从入门到精通 张振华.Jack --我的书
[当当.京东.天猫.亚马逊.新华书店等均有销售] 目 录 第一部分:线程并发基础 第1章 概念部分 1 1.1 CPU核心数.线程数 (主流cpu.线程数的大体情况说一下) 1 1.2 CPU时间 ...
- Java网络编程从入门到精通(27):关闭服务端连接
在客户端和服务端的数据交互完成后,一般需要关闭网络连接.对于服务端来说,需要关闭Socket和ServerSocket. 在关闭Socket后,客户端并不会马上感知自已的Socket已经关闭,也就是说 ...
- (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)
本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...
- 2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等
2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等 官方论坛弄来的 如果在官方下载需要权限的 挺不错教程 想学习易语言入门到精通 post hook js改写的可以看 ...
- GPU 编程入门到精通(五)之 GPU 程序优化进阶
博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识.鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程. 有志同道合的小伙 ...
- GPU 编程入门到精通(四)之 GPU 程序优化
博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...
- 微博,and java 多线程编程 入门到精通 将cpu 的那个 张振华
http://down.51cto.com/data/2263476 java 多线程编程 入门到精通 将cpu 的那个 张振华 多个用户可以同时用一个 vhost,但是vhost之间是隔离的. ...
- GPU 编程入门到精通(三)之 第一个 GPU 程序
博主因为工作其中的须要.開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程,因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...
- 1Mybatis入门--1.1单独使用jdbc编程问题总结
1.1.1 jdbc程序 Public static void main(String[] args) { Connection connection = null; PreparedStatemen ...
随机推荐
- C# DynamicObject 动态对象
dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...
- F7里利用DIV 模拟 textarea 显示回行的问题解决
<div class="card-content-inner" style="word-wrap:break-word;word-break:break-all;w ...
- eclipse乱码解决
设置utf-8 1.点击window>preferences>content types 2.点击右侧Text 3.点击Java Source File 4.下面输入UTF-8 5.点击u ...
- java-数组排序--计数排序、桶排序、基数排序
计数排序引入 不难发现不论是冒泡排序还是插入排序,其排序方法都是通过对每一个数进行两两比较进行排序的,这种方法称为比较排序,实际上对每个数的两两比较严重影响了其效率,理论上比较排序时间复杂度的最低下限 ...
- 输入a,b,求a^b的所有因子之和
题目 poj的1845 分解a的质因数a=p1^t1*p2^t1........ 每个质因数对sum的贡献: 当除去质因数p1时的因数和为sum,当计入p1时,因子和变成sum*p1^0+sum*p1 ...
- P1462 通往奥格瑞玛的道路 最短路
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- Springmvc 横向源码原理解析(原创)
1.springmvc的基本流程(不多赘述) 2.主要涉及到的类 //该方法返回HandlerExecutionChain 类 并不是直接返回handler 是因为在HandlerExecutionC ...
- 【C语言编程练习】新娘与新郎
1. 题目要求 新郎A,B,C与新娘 X,Y,Z.有人不知道她们谁和谁结婚了,询问了6位新人中的三位,A说他将和X结婚,X说她的未婚夫是C,C说她会和Z结婚,一听就知道是全是假话,请编程找出谁和谁结婚 ...
- [Linux] 使用Yum在CentOS上安装MySQL
跟随官网上的安装教程:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html官网上还有一个QuickGuide ...
- Bootstarp 使用布局
实现 Bootstrap 基本布局 看到了一篇 20 分钟打造 Bootstrap 站点的文章,内容有点老,重新使用 Bootstrap3 实现一下,将涉及的内容也尽可能详细说明. 1. 创建基本的页 ...