当当当当~~~~欢迎大家阅读,今天我们学习JDBC程序编写步骤 

以上是JDBC程序编写步骤的流程图

步骤一:导入java.sql包

步骤二:加载并注册驱动程序

java.sql.Driver 接口:是所有 JDBC 驱动程序需要实现的接口,这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现,例如:

 mySql的驱动: com.mysql.jdbc.Driver

Oracle的驱动:oracle.jdbc.driver.OracleDriver

接下来我们将以Mysql为例进行操作:将数据库连接需要的4个基本信息申明在配置文件中

(一)创建配置文件【jdbc.properties】此配置文件声明在工程的src下 

user=root
password=****
url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
driverClass=com.mysql.jdbc.Driver

(二)获取数据库连接的四要素

要素一:用户名:  user可以用“属性名=属性值”方式告诉数据库

要素二:密码:      password可以用“属性名=属性值”方式告诉数据库

要素三:URL:用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接

要素四:Driver接口实现类:java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现

(三)使用配置文件的好处

1、实现了代码和数据的分离,如果需要修改配置信息,直接在配置文件中修改

2、如果修改了配置信息,省去重新编译的过程。

步骤三:创建Connection对象,连接数据库 

@Testpublic void testConnection() throws Exception{//1、读取配置文件中的4个基本信息InputStream is = ConnectionTest1.class.getClassLoader().getResourceAsStream("jdbc.properties");Properties pros=new Properties();pros.load(is);String user = pros.getProperty("user");String password = pros.getProperty("password");String url = pros.getProperty("url");String driverClass = pros.getProperty("driverClass");//2、加载驱动Class.forName(driverClass);//3、获取连接Connection conn = DriverManager.getConnection(url, user, password);System.out.println(conn);}

步骤四:创建Statement的子接口PreparedStatement对象

(一)PreparedStatement  VS  Statement

1、使用Statement操作数据表的弊端

问题一:存在拼串操作,繁琐

问题二:存在SQL注入问题

2、PreparedStatement的介绍

与Statement的关系:是 Statement 的子接口

特点:可以预编译sql语句

用途:可以解决Statement的sql注入问题,拼串问题

 3、使用PreparedStatement的好处 

(1)避免Statement的拼串操作繁琐

(2)PreparedStatement 可以防止 SQL 注入问题

(3)PreparedStatement操作Blob的数据,而Statement做不到

(4)PreparedStatement 可以实现更高效的批量操作

(二)使用PreparedStatement实现通用的增、删、改的方法

代码:

//通用的增删改操作public void update(String sql,Object ...args){//sql中占位符的个数与可变形参的长度相同!Connection conn = null;PreparedStatement ps = null;try {//1.获取数据库的连接conn = JDBCUtils.getConnection();//2.预编译sql语句,返回PreparedStatement的实例ps = conn.prepareStatement(sql);//3.填充占位符for(int i = 0;i < args.length;i++){ps.setObject(i + 1, args[i]);//小心参数声明错误!!}//4.执行ps.execute();} catch (Exception e) {e.printStackTrace();}finally{//5.资源的关闭JDBCUtils.closeResource(conn, ps);}}

 案例:

  @Testpublic void testCommonUpdate(){String sql="delete from account where id=?";update(sql,7);}

(三)使用PreparedStatement实现通用的查询操作

以上是查询操作的流程图 

1、返回表中的一条元素

代码:

public <T> T getInstance(Class<T> clazz,String sql, Object... args) {Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = JDBCUtils.getConnection();ps = conn.prepareStatement(sql);for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}rs = ps.executeQuery();// 获取结果集的元数据 :ResultSetMetaDataResultSetMetaData rsmd = rs.getMetaData();// 通过ResultSetMetaData获取结果集中的列数int columnCount = rsmd.getColumnCount();if (rs.next()) {T t = clazz.newInstance();// 处理结果集一行数据中的每一个列for (int i = 0; i < columnCount; i++) {// 获取列值Object columValue = rs.getObject(i + 1);// 获取每个列的列名// String columnName = rsmd.getColumnName(i + 1);String columnLabel = rsmd.getColumnLabel(i + 1);// 给t对象指定的columnName属性,赋值为columValue:通过反射Field field = clazz.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, columValue);}return t;}} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.closeResource(conn, ps, rs);}return null;}

 案例:

 @Testpublic void testGetInstance(){String sql="select id,username,balance from account where id=?";Account account = getInstance(Account.class, sql, 3);System.out.println(account);}

2、返回表中的多条元素

代码:

public <T> List<T> getForList(Class<T> clazz,String sql, Object... args){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = JDBCUtils.getConnection();ps = conn.prepareStatement(sql);for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}rs = ps.executeQuery();// 获取结果集的元数据 :ResultSetMetaDataResultSetMetaData rsmd = rs.getMetaData();// 通过ResultSetMetaData获取结果集中的列数int columnCount = rsmd.getColumnCount();//创建集合对象ArrayList<T> list = new ArrayList<T>();while (rs.next()) {T t = clazz.newInstance();// 处理结果集一行数据中的每一个列:给t对象指定的属性赋值for (int i = 0; i < columnCount; i++) {// 获取列值Object columValue = rs.getObject(i + 1);// 获取每个列的列名// String columnName = rsmd.getColumnName(i + 1);String columnLabel = rsmd.getColumnLabel(i + 1);// 给t对象指定的columnName属性,赋值为columValue:通过反射Field field = clazz.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, columValue);}list.add(t);}return list;} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.closeResource(conn, ps, rs);}return null;}

案例:

 @Testpublic void testGetForList(){String sql="select id,username,balance from account where id<?";List<Account>list=getForList(Account.class, sql, 3);list.forEach(System.out::println);}

步骤五:关闭资源

数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,如果Connection不能及时正确的关闭将导致系统宕机。Connection的使用原则是尽量晚创建,尽量早的释放。

 //关闭资源的操作public static void closeResource2 (Connection conn, Statement ps,ResultSet rs){try {if(ps!=null)ps.close();} catch (SQLException throwables) {throwables.printStackTrace();}try {if(conn!=null)conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}try {if(rs!=null)rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}

JDBC API小结

(一)两种思想

1、面向接口编程的思想

JDBC是sun公司提供一套用于数据库操作的接口,java程序员只需要面向这套接口编程即可。
不同的数据库厂商,需要针对这套接口,提供不同实现。不同的实现的集合,即为不同数据库的驱动

2、ORM思想(object relational mapping)

(1)一个数据表对应一个java类
(2)表中的一条记录对应java类的一个对象
(3)表中的一个字段对应java类的一个属性

(二)两种技术

1、使用结果集的元数据:ResultSetMetaData

getColumnCount():获取列数
getColumnLabel():获取列的别名

2、反射的使用

(1)创建对应的运行时类的对象
(2)运行时,动态的调用指定的运行时类的属性、方法

以上就是JDBC程序编写步骤啦,希望我的文章对你有所帮助,如果有错误的地方还望大家批评指正,谢谢大家阅读!

JDBC之程序编写步骤相关推荐

  1. 用计算机控制单片机的程序编写,单片机程序编写步骤

    单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上.相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备.概括的讲:一块芯片就成了一台计算机.它的体 ...

  2. c语言T1中断程序编写步骤,用51单片机中断编写的4x4键盘程序

    当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章 用51单片机中断编写的4x4键盘程序 作者:未知   来源:山涧一溪流   点击数:-  更新时间:2014年06 ...

  3. 单片机c语言程序编写步骤,用c语言编写单片机流水灯程序详解

    用C语言编写的流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口, ...

  4. 创建JDBC应用程序的步骤

    使用JDBC操作数据库中的数据包括6个基本操作步骤: (1).载入JDBC驱动程序: 首先要在应用程序中加载驱动程序driver,使用Class.forName()方法加载特定的驱动程序,每种数据库管 ...

  5. 汇编中断程序编写步骤

  6. 浅谈JDBC,JDBC实现的几大步骤

    前言 当我们学完数据库之后总觉得数据库和java之间是没有联系的,但是我们还是要去学数据库是为了什么呐?现在就来了,现在我就来给大家讲讲怎么将数据库和java进行联系,我们也可以用数据库代替以前的IO ...

  7. 控制台编写JAVA程序教程_写一个java程序的步骤是什么?写java程序技巧

    写Java程序是要按照步骤来的,这样才能写好一个java程序,那么接下来,我们就来给大家讲解一下写一个java程序的步骤是什么? (1)创建Java项目:"FileàNewàProjectà ...

  8. java程序步骤_java编写程序的步骤是什么?java编写程序步骤实例讲解

    写java编程就是一步一步的来,这样才会写好一个编程,之后也才能正常的运行,那么java编写程序的步骤是什么?今天我们就来给大家讲解一下这方面的内容.大家可以参考以下文章! 1.编写源文件 使用文本编 ...

  9. Linux下C语言程序编写及执行和分步骤编译链接C源代码

    实验一:Linux下C语言程序编写及执行 //hello.c #include <stdio.h> int main(){int x = 1;int y = 2;int sum = x + ...

最新文章

  1. strchr strstr函数php,PHP字符串函数之 strstr stristr strchr strrchr
  2. Thinkpad SL400 issue
  3. [转]c++ new带括号和不带括号
  4. 在Eclipse的DDMS中查找genymotion模拟器的sdcard中的文件---开发中遇到的问题(一)
  5. HUE WorkFlow Schedule 调用Hive参数传递,外部参数传递,时间参数传递
  6. jQuery之call()方法的使用
  7. C++中栈内存和堆内存
  8. wdatepicker不展示秒_华为电源键只能开关机?其实还隐藏了这5个作用,一般人不知道...
  9. java batik 乱码_linux下batik-rasterizer.jar生成图片中文乱码
  10. windows 安装SNMP MIB Browser
  11. import绝对路径问题
  12. iOS开发人员必看的精品资料(100个)——下载目录
  13. 解决npm一直停在“checking installable status“的问题
  14. 云日记个人中心项目思路
  15. JavaEE|TCP/IP协议栈之TCP协议端格式详解
  16. 项目可行性研究报告详解
  17. 《深入浅出Docker》学习笔记
  18. Postgre SQL 简介
  19. 系列学习分布式任务调度 XXL-JOB 之第 2 篇 —— 调度中心集群
  20. 华为认证实验篇-ENSP的安装(附下载地址)

热门文章

  1. 什么是软件测试,软件测试的目的?
  2. 使用distpicker的简单测试页面
  3. Windows和Ubuntu双系统安装教程
  4. coreldraw凹槽_Coreldraw教程:打造逼真静物写生
  5. vue3 编译报 ESLint: ‘defineProps‘ is not defined no-undef 错误问题
  6. 天朝皇叔:学习笔记 Qt 连接数据库sql server
  7. 余华《活着》日本版自序
  8. html怎么修改td 的宽度,互联网常识:htmltd怎么设置宽度
  9. EChar中的柱状图如何设置柱子的最大宽度和刻度的最小间隔
  10. URLDecoder.decode与URLEncoder.encode