版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51308449

目录(?)[+]

1. JDBC简介

SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC,JDBC不能直接操作数据库,JDBC通过接口加载数据库的驱动,然后操作数据库。JDBC:Java Data Base Connectivity,它主要由接口组成。组成JDBC的2个包为java.sql和javax.sql。开发JDBC应用需要这2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

2. JDBC快速入门

编程从user表中读取数据,并打印在控制台窗口中。

2.1 搭建实验环境

[sql] view plaincopy
  1. create database test Character set utf8 collate utf8_general_ci;
  2. use test
  3. create table user
  4. (
  5. id int primary Key,
  6. name varchar(20),
  7. password varchar(20),
  8. email varchar(20),
  9. birthday Date
  10. );
  11. insert into user(id,name,password,email,birthday) values(1,'zw','123','zw@sina.com','1990-09-19');
  12. insert into user(id,name,password,email,birthday) values(2,'ls','123','ls@sina.com','1991-04-19');
  13. insert into user(id,name,password,email,birthday) values(3,'ww','123','ww@sina.com','1992-06-19');

2.2 编写java程序

新建一个java工程,并导入数据库驱动 MySQL-connector-java-5.1.20-bin.jar。

[java] view plaincopy
  1. public class Demo1 {
  2. public static void main(String[] args) throws Exception {
  3. String url = "jdbc:mysql://localhost:3306/day14";
  4. String username = "root";
  5. String password = "root";
  6. try{
  7. //1.加载驱动
  8. //DriverManager.registerDriver(new Driver());
  9. Class.forName("com.mysql.jdbc.Driver");
  10. //2.获取数据库的连接
  11. Connection conn = DriverManager.getConnection(url, username, password);
  12. //3.获得用于向数据库发送sql语句的statement对象
  13. Statement st = conn.createStatement();
  14. //4.向数据库发sql,并获取代表结果集的resultset
  15. String sql = "select id,name,password,email,birthday from user";
  16. ResultSet rs = st.executeQuery(sql);
  17. //取出结果集的数据
  18. while(rs.next()){
  19. int id = (Integer) rs.getObject("id");
  20. String name = (String)rs.getObject("name");
  21. String pd = (String)rs.getObject("password");
  22. String email = (String)rs.getObject("email");
  23. Date birthday = (Date)rs.getObject("birthday");
  24. System.out.println(id+","+name+","+pd+","+email+","+birthday);
  25. }
  26. }
  27. //关闭连接
  28. finally{
  29. if(rs != null){
  30. try{
  31. rs.close();
  32. }catch(Exception e) {
  33. e.printStackTrace();
  34. }
  35. rs = null;
  36. }
  37. if(st != null){
  38. try{
  39. st.close();
  40. }catch(Exception e) {
  41. e.printStackTrace();
  42. }
  43. st = null;
  44. }
  45. if(conn != null){
  46. try{
  47. conn.close();
  48. }catch(Exception e) {
  49. e.printStackTrace();
  50. }
  51. conn = null;
  52. }
  53. }
  54. }
  55. }

JDBC程序中的DriverManager用于加载驱动,并创建与数据库的连接,这个类的常用方法有:

[java] view plaincopy
  1. DriverManager.registerDriver(new Driver());
  2. DriverManager.getConnection(URL, user, password);

注意:在实际开发中不推荐采用registerDriver方法注册驱动,原因有二:
        a. 查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象;
        b. 程序依赖mysql的api,脱离mysql的jar包,程序将无法编译,将来程序切换底层数据库将会非常麻烦。
        推荐方式:Class.forName("com.mysql.jdbc.Driver");
        采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要依赖具体的驱动,使程序的灵活性更高。同样,在开发中也不建议采用具体的驱动类型指向getConnection方法返回的Connection对象。

3. JDBC常用API

JDBC程序中的Connection对象用于代表数据库的连接,Connection是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过Connection对象完成的。这个对象常用的方法有:

[java] view plaincopy
  1. createStatement();    //创建向数据库发送sql的statement对象
  2. prepareStatement(sql); //创建向数据库发送预编译sql的prepareStatement对象。这个更常用
  3. prepareCall(sql); //创建执行存储过程中的callableStatement对象
  4. setAutoCommit(boolean autoCommit); //设置事物是否自动提交
  5. commit(); //在链接上提交事物
  6. rollback(); //在此链接上回滚事物

JDBC程序中的Statement对象用于向数据库发送sql语句,Statement对象常用方法有:

[java] view plaincopy
  1. <span style="font-family:Microsoft YaHei;">executeQuery(String sql);   //用于向数据库发送查询语句
  2. executeUpdate(String sql);  //用于向数据库发送insert,update或delete语句
  3. execute(String sql);  //用于向数据库发送任意sql语句
  4. addBatch(String sql);  //把多条sql语句放到一个批处理中
  5. executeBath();  //向数据库发送一批sql语句执行
  6. </span>

JDBC程序中的ResultSet对象用于代表sql语句的执行结果。ResultSet封装执行结果时,采用的类似于表格的方式。ResultSet对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用该对象的next()方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。由于ResultSet用于封装执行结果,所以该对象提供的都是用于获取数据的get方法:

[java] view plaincopy
  1. <span style="font-family:Microsoft YaHei;">//获取任意类型的数据
  2. getObject(int index);  //index表示列号
  3. getObject(String columnName);  //columnName表示列名,建议用这种方法,更好维护
  4. //获取指定类型的数据(int,String,Date等)
  5. getString(int index);
  6. getString(String columnName);
  7. </span>

ResultSet除了提供get方法以外,还提供了对结果集进行滚动的方法:

[java] view plaincopy
  1. <span style="font-family:Microsoft YaHei;">next();   //移动到下一行
  2. previous();  //移动到前一行
  3. absolute(int row);  //移动到指定行
  4. beforeFirst();  //移动到resultSet的最前面
  5. afterLast(); //移动到resultSet的最后面
  6. </span>

为了确保资源释放代码能运行,资源释放代码一定要写在finally语句中。

4. JDBC实现增删改查

JDBC技术主要是同数据库打交道,那么免不了增删改查,由上面的代码可以看出,在对数据库进行操作之前需要先建立连接,在操作之后都需要释放资源,所以我们可以把这两部分内容抽取出来,写到JDBCUtils类中来实现:

[java] view plaincopy
  1. public class JDBCUtils {
  2. private static String driver = null;
  3. private static String url = null;
  4. private static String username = null;
  5. private static String password = null;
  6. //加载驱动
  7. static{
  8. try {
  9. //db.properties是一个配置文件,里面有连接数据库所需要的信息
  10. InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
  11. Properties prop = new Properties();
  12. prop.load(in);//加载配置文件
  13. driver = prop.getProperty("driver");
  14. url = prop.getProperty("url");
  15. username = prop.getProperty("username");
  16. password = prop.getProperty("password");
  17. Class.forName(driver);//加载驱动
  18. } catch (Exception e) {
  19. throw new ExceptionInInitializerError(e);
  20. }
  21. }
  22. public static Connection getConnection() throws SQLException{
  23. return DriverManager.getConnection(url, username, password);//获得connection
  24. }
  25. public static void release(Connection conn, Statement st, ResultSet rs){ //释放资源
  26. if(rs != null){
  27. try{
  28. rs.close();
  29. }catch(Exception e) {
  30. e.printStackTrace();
  31. }
  32. rs = null;
  33. }
  34. if(st != null){
  35. try{
  36. st.close();
  37. }catch(Exception e) {
  38. e.printStackTrace();
  39. }
  40. st = null;
  41. }
  42. if(conn != null){
  43. try{
  44. conn.close();
  45. }catch(Exception e) {
  46. e.printStackTrace();
  47. }
  48. conn = null;
  49. }
  50. }
  51. }

db.properties文件:

[plain] view plaincopy
  1. driver=com.mysql.jdbc.Driver
  2. url=jdbc:mysql://localhost:3306/day14
  3. username=root
  4. password=root

这样我们就完成了数据库的连接和资源的释放工具类。下面我们开始编写对数据库的增删改查:

[java] view plaincopy
  1. //使用JDBC对数据库的增删改查
  2. public class Demo2 {
  3. private Connection conn = null;
  4. private Statement st = null;
  5. private ResultSet rs = null;
  6. @Test
  7. public void insert(){
  8. try {
  9. conn = JDBCUtils.getConnection();
  10. st = conn.createStatement();
  11. String sql = "insert into user(id,name,password,email,birthday) values(3,'ww','123','ww@sina.com','1982-06-14');";
  12. int num = st.executeUpdate(sql);//返回的是该sql语句会影响数据库的几行
  13. if(num > 0){
  14. System.out.println(num);
  15. System.out.println("插入成功");
  16. }
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }finally {
  20. JDBCUtils.release(conn, st, rs);
  21. }
  22. }
  23. @Test
  24. public void delete(){
  25. try {
  26. conn = JDBCUtils.getConnection();
  27. st = conn.createStatement();
  28. String sql = "delete from user where password='123'";
  29. int num = st.executeUpdate(sql);
  30. if(num > 0){
  31. System.out.println(num);
  32. System.out.println("删除成功");
  33. }
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }finally {
  37. JDBCUtils.release(conn, st, rs);
  38. }
  39. }
  40. @Test
  41. public void update(){
  42. try {
  43. conn = JDBCUtils.getConnection();
  44. st = conn.createStatement();
  45. String sql = "update user set password='456' where name='ww'";
  46. int num = st.executeUpdate(sql);
  47. if(num > 0) {
  48. System.out.println(num);
  49. System.out.println("修改成功");
  50. }
  51. } catch (Exception e) {
  52. e.printStackTrace();
  53. }finally {
  54. JDBCUtils.release(conn, st, rs);
  55. }
  56. }
  57. @Test
  58. public void find(){
  59. try {
  60. conn = JDBCUtils.getConnection();
  61. st = conn.createStatement();
  62. String sql = "select id,name,password,email,birthday from user";
  63. rs = st.executeQuery(sql);
  64. while(rs.next()){
  65. int id = (Integer)rs.getObject("id");
  66. String name = (String)rs.getObject("name");
  67. String password = (String)rs.getObject("password");
  68. String email = (String)rs.getObject("email");
  69. Date birthday = (Date)rs.getObject("birthday");
  70. System.out.println(id+","+name+","+password+","+email+","+birthday);
  71. }
  72. } catch (Exception e) {
  73. e.printStackTrace();
  74. }finally {
  75. JDBCUtils.release(conn, st, rs);
  76. }
  77. }
  78. }

JDBC基本知识点就介绍到这,后面再介绍一些高级点的应用,如有错误之处,欢迎留言指正~

相关阅读:http://blog.csdn.net/column/details/servletandjsp.html

_____________________________________________________________________________________________________________________________________________________

-----乐于分享,共同进步!

-----更多文章请看:http://blog.csdn.net/eson_15

JDBC技术总结(一)相关推荐

  1. jdbc动态查询语句_Java修行第037天--JDBC技术

    学习目标: 1.掌握JDBC概念 2.掌握JDBC常用接口和类的作用 3.掌握JDBC连接数据库的步骤 4.掌握JDBC操作数据库,以及资源关闭 练习代码 今天练习代码 properties文件使用: ...

  2. JAVA数据库编程(JDBC技术)-入门笔记

    本菜鸟才介入Java,我现在不急着去看那些基本的语法或者一些Java里面的版本的特征或者是一些晋级的知识,因为有一点.Net的OOP编程思想,所以对于Java的这些语法以及什么的在用到的时候在去发现学 ...

  3. java的数据库连接编程(jdbc)技术_Java的数据库连接编程(JDBC)技术

    Java的数据库连接编程(JDBC)技术 Java的数据库连接编程(JDBC)技术 [本讲的知识要点]:JDBC.JDBC的工作原理,访问数据库的方法.Statement.PreparedStatem ...

  4. 数据库-----JDBC技术

    目录 JDBC概述 数据的持久化 什么是 JDBC 什么是数据库驱动程序 Java中访问数据库技术 程序操作数据库流程 JBDC中常用的类与接口 Driver 接口 DriverManager 类 C ...

  5. 02.模块二 JDBC技术和XML

    文章目录 任务五_JDBC 1. JDBC 概述 1.1 客户端操作数据库的方式 1.2 什么是JDBC 1.3 JDBC 原理 2. JDBC 开发 2.1 数据准备 2.2 MySql驱动包 2. ...

  6. jdbc技术实现万能查询,增加、删除插入操作

    1.在src目录下建立jdbc.propertise文件user=root//数据库登录账户 password=123456//数据库登录密码 url=jdbc:mysql://localhost:3 ...

  7. JDBC技术预研选型依据【转】

    2019独角兽企业重金招聘Python工程师标准>>> http://songwie.com/articlelist/44 mycat分布式mysql中间件(mysql中间件研究) ...

  8. 张晨光-JAVA零基础保姆式JDBC技术教程

    JDBC文档 JDBC概述 JDBC概述 Java DataBase Connectivity Java 数据库连接技术 JDBC的作用 通过Java语言操作数据库,操作表中的数据 SUN公司为**了 ...

  9. 【JDBC技术】终于知道Java底层是如何连接数据库了!——(1)JDBC概述

    JDBC 核心技术解析 JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库. 文章目录 JDBC 核心技术解析 JDB ...

最新文章

  1. 4.9---4.16总结
  2. boost::depth_first_search用法的测试程序
  3. python中restful接口开发实例_Python RESTful接口开发02
  4. html中th 与thead tbody的 使用
  5. 谷歌排名第一的编程语言,死磕这点应用,小白也能转型!
  6. 国士无双:卖掉美国房子,回国创办姚班,他只为培养一流的程序员!
  7. 记一次DRBD Unknown故障处理过程
  8. [Hive]Hive的分析函数
  9. golang中apend_golang的append()为什么不会影响slice的地址?
  10. 新手如何发布第一个Python项目开源包?这里有一份详细指南
  11. 网络营销-渠道、公关
  12. 计算机专业志愿者活动策划书模板,青春益起来之电脑义诊活动策划书
  13. 假设检验:如何理解单侧、双侧检验的拒绝域
  14. 国产芯片传来好消息,纯国产CPU测试数据“曝光”
  15. 南华大学计算机系宿舍,2021年南华大学新生宿舍条件和宿舍环境图片
  16. 福利!在线编写代码的网站
  17. 抖音怎么去赚钱?小白也能快速上手的抖音测试号项目。丨国仁网络资讯
  18. 9、Harvard Dataverse 数据批量下载
  19. 千兆以太网网络变压器进行 poe 供电的原理是什么?
  20. 浅谈Masonry的使用技巧

热门文章

  1. 机器学习算法(3)——线性回归与逻辑回归
  2. 奇怪的顾客(C++)
  3. 回文判断(栈+队列)
  4. 获取mysql 时钟,员工时钟的MySQL数据库结构
  5. sql查询语句中的乱码 -- 前面加N
  6. 矩阵经典题目六:poj 3070 Fibonacci
  7. 5.26在网上看到的方法,实现图形缩放、对齐、图形修改后进行dirty check。(未实验过)...
  8. 诗与远方:无题(三十二)- 曾经写给妹子的一首诗
  9. JS对象迭代、事件处理器、表单控件绑定、表单复选框、表单单选按钮
  10. kafka发送mysql数据丢失_Kafka 如果丢了消息,怎么处理的?