zoukankan      html  css  js  c++  java
  • 复习java数据库操作的总结

    以前学习java数据库操作,学得那叫糊里糊涂,各种JDBC常用的类和接口根本是傻傻分不清啥是干嘛的。只是套着用用吧。

    不过这次好歹清楚些了,呜呜,学习有阶段性,多次重复才有好效果,多么痛的领悟。

    工程名字是瞎起的,本来想复习继承多态来着,(逃

    然后再来说一下JDBC,JDBC是一种可用于执行SQL语句的Java API,是连接应用程序和数据库的纽带,可以为多种关系数据库提供统一访问,它由一组用java编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。

    但大多数的书里面都会讲到JDBC-ODBC,然后就很懵逼,啥啊!

    那么先说啥是ODBC吧。

    开放数据库连接(Open Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。ODBC基于SQL,并把它作为访问数据库的标准。这个接口提供了最大限度的相互可操作性:一个应用程序可以通过一组通用的代码访问不同的数据库管理系统。一个软件开发者开发的客户/服务器应用程序不会被束定于某个特定的数据库之上。ODBC可以为不同的数据库提供相应的驱动程序。对于ASP程而言,ODBC数据源是ASP程序的ADO组件和数据库之间的接口。

    由于微软的数据库不是用Java语言来编写的,但是我们需要用java语言连接微软的数据库,这样就要编写一个桥连接,使java语言编写的代码也可以操作数据库。也就是说:

    JDBC是使用通过JAVA的数据库驱动直接和数据库相连,而JDBC-ODBC连接的是ODBC的数据源,真正与数据库建立连接的是ODBC。这下懂了吧。
    不过我还在网页上看见另一句话,建议使用JDBC直接连接,同时最好使用连接池!

    说的真对,这么多年用MYSQL,一直都是用了一个叫“mysql-connector-java-5.1.35-bin.jar”的jar包,也就是java的数据库驱动,还没有用过ODBC呢,SQL Server没怎么学过,orz。。。

    贴代码:

    1.连接数据库

    要访问数据库,首先加载数据库的驱动程序,只需要在第一次访问数据库时家再一次,然后每次访问数据时创建一个Connection对象,接着执行操作数据库的SQL语句,最后完成数据库操作后销毁前面的Connection对象即可。

    将连接数据库作为单独的一个方法,并以Connection对象作为返回值,遇到对数据库执行操作的程序时可以直接调用Conn类的getConnection方法获取连接,增加代码重用性。

     1 package DBManager;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.SQLException;
     6 
     7 public class DBConn {
     8     Connection conn;
     9     public Connection getConnection(){//目的是为了获取与数据库的连接,在主方法中调用该方法。
    10         //JDBC技术是一种执行SQL语句的javaAPI。
    11                 try {
    12                     Class.forName("com.mysql.jdbc.Driver");//java.lang包的静态方法来加载JDBC驱动程序。。加载失败异常ClassNotFoundException
    13                     System.out.println("db run success");
    14                     conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/littlet","root","1234");//通过访问数据库的URL获取数据库连接对象java.sql包中类DriveManager的静态方法。。连接失败异常SQLException
    15                     System.out.println("db connect success");
    16                 } catch (Exception e) {
    17                     // TODO Auto-generated catch block
    18                     e.printStackTrace();
    19                 }
    20                 return conn;
    21     }
    22     //关闭Connection对象
    23         public static void closeConnection(Connection conn){
    24             try {
    25                 conn.close();
    26             } catch (SQLException e) {
    27                 // TODO Auto-generated catch block
    28                 e.printStackTrace();
    29             }
    30         }
    31         //回滚
    32         public static void rollbackConnection(Connection conn){
    33             try {
    34                 conn.rollback();
    35             } catch (SQLException e) {
    36                 // TODO Auto-generated catch block
    37                 e.printStackTrace();
    38             }
    39         }
    40 }

    2.确定存储的类型,就是数据库中放的东西,就是我们处理的这个对象。

     1 package domain;
     2 
     3 public class Student {
     4     private int id;
     5     private String name;
     6     public int getId() {
     7         return id;
     8     }
     9     public void setId(int id) {
    10         this.id = id;
    11     }
    12     public String getName() {
    13         return name;
    14     }
    15     public void setName(String name) {
    16         this.name = name;
    17     }
    18     
    19 }

    3.java数据库操作代码

     1 package DBManager;
     2 
     3 import java.sql.Connection;
     4 import java.sql.PreparedStatement;
     5 import java.sql.ResultSet;
     6 import java.sql.SQLException;
     7 import java.sql.Statement;
     8 
     9 import domain.Student;
    10 
    11 public class Select {
    12     Connection con;
    13     PreparedStatement sql;
    14     ResultSet res;//ResultSet类的next()方法返回值就是boolean类型的数据,当游标移动到最后一行会返回false。
    15     public void select(int id){
    16         DBConn db=new DBConn();
    17         con=db.getConnection();
    18         try {
    19             sql=con.prepareStatement("select * from stub where id=?");
    20             sql.setInt(1,id);
    21             res=sql.executeQuery();//执行预处理语句
    22             while(res.next()){
    23                 String name=res.getString(2);
    24                 System.out.println(name);
    25             }
    26         } catch (SQLException e) {
    27             // TODO Auto-generated catch block
    28             e.printStackTrace();
    29         }finally{
    30             db.closeConnection(con);
    31         }
    32         
    33         
    34     }
    35 }

    为什么执行SQL语句用的是PrepareStatement对象而不是Statement对象呢?有什么区别吗?

     1 sql=con.createStatement();有了Statement对象后,可以调用相应的方法实现对数据库的查询和修改
     2 
     3 res.sql.executeQery(select * from stub);//获取查询结果集使用“%”代替0个或多个字符,使用下划线“_”代替一个字符实现模糊查询。+"where name like'zhang%'"
     4 
     5 while(res.next()){
     6 
     7   int id=rew.getInt("id");
     8 
     9   String name=res.getString("name");
    10 
    11 }

    向数据库发送一个SQL语句,数据库中的SQL解释器负责把SQL语句生成底层的内部命令,然后执行该命令,完成相关的数据库操作,但是不断地向数据库提交SQL语句,会增加DB中SQL解释器的负担,影响执行速度。对于JDBC,可以通过Connection对象的preparedStatement方法对SQL语句进行预处理。

    贵有恒何必三更眠五更起,最无益只怕一日曝十日寒。
  • 相关阅读:
    io系列浅谈
    git 删除分支--本地分支和远程分支
    提问须知
    PDF 补丁丁 0.6.2.3691 测试版发布
    PDF 补丁丁 0.6.2.3689 测试版发布
    .Net调用接口处理时间过长,前端访问超时解决方案
    Abp用多个DbContext
    IDEA 报错 Could not autowire. No beans of 'UserMapper' type found(无法自动装配。找不到类型为 'UserMapper' 的 bean)解决IDEA中自动装配,找不到类型的bean问题
    springboot整合springmvc拦截器
    springboot自动配置原理
  • 原文地址:https://www.cnblogs.com/carazk/p/java.html
Copyright © 2011-2022 走看看