今天突然想多说两句,刚刚在知乎看到一个人说,在当今世界,没有技术型驱动的公司,全都是业务型。即便是表面上看似技术型公司,其本质还是为了服务业务。这段话推翻了我以前关于编程的所有看法,觉得颇有道理。下面也来说说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编程,从入门到精通的更多相关文章

  1. 《Linux.Shell编程从入门到精通》读书笔记

    第一章 第一个Shell程序 以 #!解析器名称 开头,表示选择哪个解释器解释shell脚本 source命令 export命令 env命令 unset命令 第二章 shell编程基础 函数传递 标准 ...

  2. Java并发编程从入门到精通 张振华.Jack --我的书

    [当当.京东.天猫.亚马逊.新华书店等均有销售] 目 录 第一部分:线程并发基础 第1章 概念部分   1 1.1 CPU核心数.线程数 (主流cpu.线程数的大体情况说一下) 1 1.2 CPU时间 ...

  3. Java网络编程从入门到精通(27):关闭服务端连接

    在客户端和服务端的数据交互完成后,一般需要关闭网络连接.对于服务端来说,需要关闭Socket和ServerSocket. 在关闭Socket后,客户端并不会马上感知自已的Socket已经关闭,也就是说 ...

  4. (升级版)Spark从入门到精通(Scala编程、案例实战、高级特性、Spark内核源码剖析、Hadoop高端)

    本课程主要讲解目前大数据领域最热门.最火爆.最有前景的技术——Spark.在本课程中,会从浅入深,基于大量案例实战,深度剖析和讲解Spark,并且会包含完全从企业真实复杂业务需求中抽取出的案例实战.课 ...

  5. 2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等

    2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等  官方论坛弄来的  如果在官方下载需要权限的  挺不错教程 想学习易语言入门到精通 post hook  js改写的可以看 ...

  6. GPU 编程入门到精通(五)之 GPU 程序优化进阶

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识.鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程. 有志同道合的小伙 ...

  7. GPU 编程入门到精通(四)之 GPU 程序优化

    博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

  8. 微博,and java 多线程编程 入门到精通 将cpu 的那个 张振华

    http://down.51cto.com/data/2263476  java 多线程编程 入门到精通  将cpu 的那个 张振华 多个用户可以同时用一个 vhost,但是vhost之间是隔离的. ...

  9. GPU 编程入门到精通(三)之 第一个 GPU 程序

    博主因为工作其中的须要.開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识,鉴于之前没有接触过 GPU 编程,因此在这里特地学习一下 GPU 上面的编程.有志同道合的小伙伴 ...

  10. 1Mybatis入门--1.1单独使用jdbc编程问题总结

    1.1.1 jdbc程序 Public static void main(String[] args) { Connection connection = null; PreparedStatemen ...

随机推荐

  1. C# DynamicObject 动态对象

    dynamic是FrameWork4.0的新特性.dynamic的出现让C#具有了弱语言类型的特性.编译器在编译的时候不再对类型进行检查,编译期默认dynamic对象支持你想要的任何特性.比如,即使你 ...

  2. F7里利用DIV 模拟 textarea 显示回行的问题解决

    <div class="card-content-inner" style="word-wrap:break-word;word-break:break-all;w ...

  3. eclipse乱码解决

    设置utf-8 1.点击window>preferences>content types 2.点击右侧Text 3.点击Java Source File 4.下面输入UTF-8 5.点击u ...

  4. java-数组排序--计数排序、桶排序、基数排序

    计数排序引入 不难发现不论是冒泡排序还是插入排序,其排序方法都是通过对每一个数进行两两比较进行排序的,这种方法称为比较排序,实际上对每个数的两两比较严重影响了其效率,理论上比较排序时间复杂度的最低下限 ...

  5. 输入a,b,求a^b的所有因子之和

    题目 poj的1845 分解a的质因数a=p1^t1*p2^t1........ 每个质因数对sum的贡献: 当除去质因数p1时的因数和为sum,当计入p1时,因子和变成sum*p1^0+sum*p1 ...

  6. P1462 通往奥格瑞玛的道路 最短路

    题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...

  7. Springmvc 横向源码原理解析(原创)

    1.springmvc的基本流程(不多赘述) 2.主要涉及到的类 //该方法返回HandlerExecutionChain 类 并不是直接返回handler 是因为在HandlerExecutionC ...

  8. 【C语言编程练习】新娘与新郎

    1. 题目要求 新郎A,B,C与新娘 X,Y,Z.有人不知道她们谁和谁结婚了,询问了6位新人中的三位,A说他将和X结婚,X说她的未婚夫是C,C说她会和Z结婚,一听就知道是全是假话,请编程找出谁和谁结婚 ...

  9. [Linux] 使用Yum在CentOS上安装MySQL

    跟随官网上的安装教程:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html官网上还有一个QuickGuide ...

  10. Bootstarp 使用布局

    实现 Bootstrap 基本布局 看到了一篇 20 分钟打造 Bootstrap 站点的文章,内容有点老,重新使用 Bootstrap3 实现一下,将涉及的内容也尽可能详细说明. 1. 创建基本的页 ...