一、Jdbc模版式写法:

【流程】

  1. 加载驱动
  2. 获取数据库链接
  3. 创建Statement对象(用于发送sql语句)
  4. 向数据库发送sql语句,获取数据库返回的结果集
  5. 从结果集中获取数据
  6. 释放资源
  7. 上述部分用try-catch-finally语句包围
【详解】(以Mysql为例)
1.加载驱动
将Mysql驱动jar包导入lib文件夹,配置到构建路径中。
String driver = "com.mysql.jdbc.Driver";//更改驱动时修改字符串即可
Class.forName(driver); //加载com.mysql.jdbc.Driver类
2.获取数据库链接
通过DriverManager工具类中的getConnection方法,创建数据库链接对象:
【Connection:java.sql.Connection】
Connection conn = DriverManager.getConnection(url, username, password);
url,user,password参数都是String字符串。其中username和password就是Mysql的用户名和密码。
url:数据库地址。在Mysql中,是:jdbc:mysql://主机:端口/数据库名?参数的形式。比如:
String url = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8";。
 
>>>>>>>>>>>>>>>>>>>>>>>>>实际开发中的做法<<<<<<<<<<<<<<<<<<<<<<<<<
>实际开发中,一般会建立db.properties配置文件,存储driver、url、username、password等信息。如此,这些信息有改动时,不用修改代码,只需修改配置文件即可。
db.properties:
driver = com.mysql.jdbc.Driver
url = jdbc:mysql:\\localhost:3306\student
username = root
password = root
获取db.properties中的数据:
Properties prop = new Properties();
prop.load(JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties"));//载入db.properties
Class.forName(prop.getProperty(driver));
Connnection conn = DriverManager.getConnection(prop.getProperty(url),prop.getProperty(username),prop.getProperty(password));
3.创建Statement对象
通过Connection类中的createStatement方法,创建Statement对象:
【Statement:java.sql.Statement】
Statement st = conn.createStatement();
4.发送sql语句,获取结果集
通过Statement类中的excuteQuery或excuteUpdate方法,执行sql语句,返回值为ResultSet类对象(创建):
【ResultSet:java.sql.ResultSet】
String sql = "SELECT name FROM student WHERE id = 1";
ResultSet rs = st.excuteQuery(sql);
5.从结果集中获取数据
数据在结果集rs中的存放方式:类似于表格的形式,初始游标指向表头。
要获取数据时,通过rs.next()方法,令游标指向下一行,然后通过rs.get*(*)方法获取该行的数据。
当存在下一行时,rs.next()返回true,否则返回false。所以rs.next()的返回值可以作为遍历结果集rs时的循环条件。
获取数据的方法:
(1)getInt("列名"),getString("列名")……
(2)getObject("列名")
通过ResultSet类中的方法获取rs中的数据:
String name = null;
while(rs.next()) {
name = rs.getString("name");
}

6.释放资源

与创建资源顺序相反,注意要放在finally中。
  • 释放rs:rs.close();
  • 释放st:st.close();
  • 关闭数据库链接:conn.close();
二、利用JdbcTemplate的写法
1.创建db.properties,定义驱动driver、数据库链接url、用户名username、密码password。
driver = com.mysql.jdbc.Driver
url = jdbc:mysql:\\localhost:3306\student
username = root
password = root
2.配置Spring配置文件:applicationContext.xml
首先(第1行),读取db.properties。
然后(第2-7行),用db.properties中的内容配置一个数据源对象。DriverManagerDataSource是数据源类。数据源类可详见编写DAO,通过JdbcTemplate操作数据库的实践
最后(第9-11行),配置一个JdbcTemplate实例,注入dataSource数据源对象。
<context:property-placeholder location="classpath:db.properties"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="driver" value="${driver}"></property>
<property name="url" value="${url}"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
3.创建应用上下文对象,获取JdbcTemplate对象。
ApplicationContext apc = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) apc.getBean("jdbcTemplate");
4.通过JdbcTemplate中封装的方法,执行sql语句,将结果提取到指定对象中(此处以查询语句为例)
String sql = "select id,name,school from student where id=? ";    //sql语句
RowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class); //通过Student创建RowMapper实例【为了高性能,应自定义RowMapper(复写mapRow方法)而不是利用现成类】
Student stu = jdbcTemplate.queryForObject(sql,rowMapper,20); //查询id为20的那一行数据,将结果存入到rowMapper对象中
三、JdbcTemplate的优势
1.加载驱动、创建链接都可以在xml文件中完成,代码可专注于sql语句的发送及其结果
2.无需创建Statement对象
3.无需手动释放资源
4.无需使用try-catch语句

Jdbc模版式写法与Spring-JdbcTemplate的比较的更多相关文章

  1. Apache Phoenix JDBC 驱动和Spring JDBCTemplate的集成

    介绍:Phoenix查询引擎会将SQL查询转换为一个或多个HBase scan,并编排运行以生成标准的JDBC结果集. 直接使用HBase API.协同处理器与自己定义过滤器.对于简单查询来说,其性能 ...

  2. 使用Spring JDBCTemplate简化JDBC的操作

    使用Spring JDBCTemplate简化JDBC的操作 接触过JAVA WEB开发的朋友肯定都知道Hibernate框架,虽然不否定它的强大之处,但个人对它一直无感,总感觉不够灵活,太过臃肿了. ...

  3. Spring JDBC模版以及三种数据库连接池的使用

    jar包版本有点乱,直接忽略版本号,将就一下. 这里引了aop包是因为在spring3版本之后用模版对数据库库操作时会出现问题,但是不会报错,也没有提示. 所以这里直接引入,以及之后会用到的DBCP与 ...

  4. 十九 Spring的JDBC模版使用: 模版的CRUD的操作

    Spring的JDBC模版使用: 模版的CRUD的操作 保存操作 修改操作 删除操作 查询操作 import com.ithheima.jdbc.domian.Account; @RunWith(Sp ...

  5. 十六 Spring的JDBC模版入门,默认连接池

    Spring是EE开发一站式框架,有EE开发的每层的解决方案,Spring对持久层也提供了解决方案:ORM模块和JDBC的模版

  6. 【Spring】Spring的数据库开发 - 1、Spring JDBC的配置和Spring JdbcTemplate的解析

    Spring JDBC 文章目录 Spring JDBC Spring JdbcTemplate的解析 Spring JDBC的配置 简单记录-Java EE企业级应用开发教程(Spring+Spri ...

  7. [转]Spring JdbcTemplate 查询分页

    原文:http://blog.csdn.net/xiaofanku/article/details/4280128 现在进行的项目由于数据库的遗留原因(设计的不堪入目)不能用hibernate.所以用 ...

  8. Spring JdbcTemplate 的使用与学习(转)

    紧接上一篇 (JdbcTemplate是线程安全的,因此可以配置一个简单的JdbcTemplate实例,将这个共享的实例注入到多个DAO类中.辅助的文档) Spring DAO支持 http://ww ...

  9. Spring JdbcTemplate框架搭建及其增删改查使用指南

    Spring JdbcTemplate框架搭建及其增删改查使用指南 前言: 本文指在介绍spring框架中的JdbcTemplate类的使用方法,涉及基本的Spring反转控制的使用方法和JDBC的基 ...

随机推荐

  1. 【Android Developers Training】 55. 序言:高效显示位图

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. 【Android Developers Training】 22. 与其他fragment通信

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. 进程间通信之AIDL

    一.引言 AIDL是android内部进程通信接口的描述语言,是实现跨进程方法调用的一大利器,其中Binder和Messenger的实现机制都是AIDL. 二.使用下面结合示例说明其使用过程: 本次示 ...

  4. 拥抱.NET Core系列:依赖注入(1)

    依赖注入时编程手段中解耦和封装的一个非常重要的手段,我本人已经到了没有DI无法编写项目的程度了,在.NET Framework中微软并没有在FCL中引入DI,虽然推出了"Unity" ...

  5. PeopleCode事件和方法只用于online界面不能用于组件接口(component interface)

    在使用CI过程中,哪些方法是不能使用的.以下为PeopleBook解释的内容. 一.搜索框代码不执行:SearchInit, SearchSave, and RowSelect events 意味着使 ...

  6. ORA-01157,记一次Oracle故障恢复过程

    生产环境中有两台部署PowerCenter的ETL业务机,近期发现无法通过客户端连接到ETL服务. 初步怀疑是PowerCenter挂掉了,或者资料库出现了故障. 登陆设备后发现PowerCenter ...

  7. vijos1010题解

    题目: 话说乾隆带着他的宰相刘罗锅和你出巡江南,被杭州城府邀请去听戏,至于什么戏,那就不知了.乾隆很高兴,撒酒与君臣共享.三更欲回住处,可是乾隆这人挺怪,他首先要到西湖边散散步,而且命令不准有人跟着他 ...

  8. 解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题

    解决QZ-SDK静态库libRPToolLib.a中avfoundation.o文件和kxMovie依赖的ffmpeg静态库libavdevice.a函数重复定义的问题 在原来项目中导入全志v3相机的 ...

  9. 利用VNC远程登录Linux服务器简易版

    我负责管理实验室的一台服务器,安装的系统是CentOS 6.7.使用pietty远程登录服务器(命令行) 需求:使实验室的同学和老师使用RealVNC远程登录服务器. 一,首先检查一下服务器是否安装V ...

  10. 面向对象JavaScript的基本概念

    一.类和对象 1, JavaScript对象分为三类:本地对象,内置对象,宿主对象. 本地对象有15种:Object Function Array String Number Boolean Date ...