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 ...
随机推荐
- Moq 在.net Core 单元测试中的使用
Moq,主要用来伪造接口的实现类,实现方法,属性 moq The most popular and friendly mocking framework for .NET What? Moq (pro ...
- C#中的 隐式与显式接口实现
在C#中,正常情况下使用接口的实现使用的是 隐式接口实现. public interface IParent1 { void Medthod(); } public class Child : IPa ...
- 禁止Centos7系统yum自动下载更新
安装Centos7后,系统自动更新状态默认为开启,若禁止系统自动更新需要手动关闭. 1.进入yum目录 [root@localhost ~]$ cd /etc/yum 2.编辑yum-cron.co ...
- SQL反模式学习笔记1 开篇
什么是“反模式” 反模式是一种试图解决问题的方法,但通常会同时引发别的问题. 反模式分类 (1)逻辑数据库设计反模式 在开始编码之前,需要决定数据库中存储什么信息以及最佳的数据组织方式和内在关联方式. ...
- Mongodb4.0副本集构建
目前最新的mongodb4.0.2已经支持事务这个重要特性,需要使用的话必须是复制或副本集,这是第一篇先研发如何构建副本集,因为副本集是目前最低成本的高可用群集方式. 1.准备三台服务器,本次使用是的 ...
- fastdfsDemo
package com.xpl.fastdfs; import org.csource.common.NameValuePair;import org.csource.fastdfs.*;import ...
- centos6.5中 linux 升级内核
需要使用安装docker ,但是docker 需要版本在3.1及以上.但是虚拟机的是2.6所以需要升级 记录以下升级的时候报错以及解决的办法 遇到的错误有: 1.出现curl: (35) SSL co ...
- 阿里云 DTS 实践
控制台 https://dts.console.aliyun.com/#/task/basic/ 操作 填写源目标和目的数据库信息 选择需要迁移的数据库 检查通过 现在好像是免费的,计时收费也很便宜 ...
- mysql 5.6.43免安装版安装教程
1.第一步,下载 Mysql官方网站:http://www.mysql.com/,数据库下载地址:http://www.mysql.com/downloads/.个人比较喜欢用免安装版,使用起来方便 ...
- laravel-elasticsearch 全文搜索设置
1.首先安装 jave环境 jdk 下载地址 ,我用的是最新版本的,有时版本要跟elasticsearch对应 2.安装elasticsearch 下载地址 3.安装Laravel scout 全文搜 ...