• [数据库操作]Java中的JDBC的使用方法.


    前言:
    想必大家在实际编码中都遇到过JDBC的操作, 这里仅做自己的一个总结, 有错误和不完整之处还请大家提出来. 

    1,JDBC其实一套规范(接口)
    数据库厂商需要实现此接口(实现类)--数据库驱动


    2,jdbc的作用:
    可以和数据库创建链接
    发送sql语句
    接收返回值,处理结果

    3,api详解(java.sql或者javaX.sql)

    DriverManager 类:
      管理一组 JDBC 驱动程序的基本服务。
      常用方法:
        registerDriver(Driver):注册驱动
          查看 mysql的Driver的时候有下面一段代码:
                  
               发现在类加载的时候已经注册过驱动,我们以后只需要把Driver加载到内存即可
            类.Class
            对象.getClass()
            Class.forName("全限定名(包名+类名)")
            以后开发中我们通过Class.forName("com.mysql.jdbc.Driver")把驱动注册进去即可.  
          static Connection getConnection(String url, String user, String password) :获取链接
            参数说明:
              url:告诉jdbc去连接那个数据库
              固定格式: 协议:子协议:子协议名称 参数
              mysql: jdbc:mysql ://localhost:3306/databaseName
              oracle: jdbc:oracle:thin :@localhost:1521:实例名
              user:数据库的登录名
              password:数据库的登录密码

      Connection 接口:
        创建语句执行者:
          Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456");

      常用方法:
        Statement createStatement():创建Statement -语句执行者
        PreparedStatement prepareStatement(String sql) :创建一个预编译的语句执行对象
        CallableStatement prepareCall(String sql) :(了解) 创建一个 CallableStatement 对象来调用数据库存储过程

      Statement 接口(容易产生sql注入, 后期使用PreparedStatement. 后面会有blog说明这个问题)
        sql语句执行者:
          Statement st=conn.createStatement();

        常用方法:
          ResultSet executeQuery(String sql) :执行查询语句,返回一个集合 ☆
          int executeUpdate(String sql) :执行更新 插入 删除语句,返回影响行数.☆
          boolean execute(sql):执行给定的 SQL 语句,该语句可能返回多个结果。
            若返回true ,执行是的查询语句
            调用 getResultSet 获取查询结果
            若返回false,执行的是更新 插入 删除语句
            调用 getUpdateCount 获取影响的行数

      ResultSet 接口
        
    返回的查询结果:
          String sql = "...";
          ResultSet rs=st.executeQuery(sql);

        常用方法:
          boolean next() :判断是否有下一条记录,并且移动到下一行
          获取内容:
            getXXX(参数)
          参数的写法:
            1.字段名称 字符串
            2.第几列 从1开始
              getInt()
              getString()
              getObject()

    4, 实例JDBCUtil类的书写
    (1)配置文件 jdbc.properties

    drivername=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/ddatabaseName
    user=root
    password=1234

    (2)JDBCUtil.java

     1 import java.sql.Connection;
     2 import java.sql.DriverManager;
     3 import java.sql.ResultSet;
     4 import java.sql.SQLException;
     5 import java.sql.Statement;
     6 import java.util.ResourceBundle;
     7 
     8 public class JDBCUtil {
     9     //ctrl + shift + x  转成大写
    10     //ctrl + shift + y  转成小写
    11     static final String DRIVERNAME;
    12     static final String URL;
    13     static final String USERNAME;
    14     static final String PASSWORD;
    15     
    16     static{
    17         
    18         /*通过ResourceBundle 专门用来加载properties文件
    19         ResourceBundle bundle=ResourceBundle.getBundle("文件名称");
    20         
    21         通过 bundle.getString(键的名字)
    22         String value=bundle.getString("url");
    23     */
    24     
    25         ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
    26         DRIVERNAME=bundle.getString("drivername");
    27         URL=bundle.getString("url");
    28         USERNAME=bundle.getString("user");
    29         PASSWORD=bundle.getString("password");
    30     }
    31     
    32     static{
    33         try {
    34             Class.forName(DRIVERNAME);
    35         } catch (ClassNotFoundException e) {
    36             e.printStackTrace();
    37         }
    38     }
    39     
    40     //获取链接
    41     public static Connection getConnection() throws SQLException{
    42         return DriverManager.getConnection(URL,USERNAME,PASSWORD);
    43     }
    44     
    45     //释放资源
    46     public static void closeResource(Connection conn,Statement st,ResultSet rs){
    47         if (rs!=null) {
    48             try {
    49                 rs.close();
    50             } catch (SQLException e) {
    51                 e.printStackTrace();
    52             }
    53         }
    54         
    55         if (st!=null) {
    56             try {
    57                 st.close();
    58             } catch (SQLException e) {
    59                 e.printStackTrace();
    60             }
    61         }
    62         
    63         if (conn!=null) {
    64             try {
    65                 conn.close();
    66             } catch (SQLException e) {
    67                 e.printStackTrace();
    68             }
    69         }
    70         
    71     }
    72 }
    View Code

    (3)CRUDDemo, 使用PreparedStatement方式

      1 public class PPCRUDDemo {
      2     public static void main(String[] args) {
      3         //插入
      4         //insert("赵四","123","zhaosi@163.com");
      5         //更新
      6         //updateByName("赵四","尼古拉斯.赵四");
      7         //获取
      8         //getByName("尼古拉斯.赵四");
      9         //删除
     10         deleteByName("尼古拉斯.赵四");
     11     }
     12 
     13     private static void deleteByName(String string) {
     14         //模版
     15         Connection conn=null;
     16         PreparedStatement st=null;
     17         ResultSet rs=null;
     18         
     19         try {
     20             //获取链接
     21             conn=JDBCUtil.getConnection();
     22             //编写sql
     23             String sql="delete from user where username =?";
     24             //获取预编译执行者
     25             st=conn.prepareStatement(sql);
     26             //设置参数
     27             st.setString(1, string);
     28             //执行sql
     29             int i = st.executeUpdate();
     30             //处理结果
     31             if (i>0) {
     32                 System.out.println("成功");
     33             }else{
     34                 System.out.println("失败");
     35             }
     36         } catch (Exception e) {
     37             e.printStackTrace();
     38         }finally{
     39             //释放资源
     40             JDBCUtil.closeResource(conn, st, rs);
     41         }
     42         
     43     }
     44 
     45     private static void getByName(String string) {
     46 
     47         Connection conn=null;
     48         PreparedStatement st=null;
     49         ResultSet rs=null;
     50         
     51         try {
     52             conn=JDBCUtil.getConnection();
     53             String sql="select * from user where username=? limit 1";
     54             st=conn.prepareStatement(sql);
     55             
     56             st.setString(1, string);
     57             rs=st.executeQuery();
     58             if (rs.next()) {
     59                 System.out.println(rs.getInt(1)+":"+rs.getString(2)+":"+rs.getObject(3)+":"+rs.getObject(4));
     60             }
     61         } catch (Exception e) {
     62             // TODO: handle exception
     63             e.printStackTrace();
     64         }finally{
     65             
     66             JDBCUtil.closeResource(conn, st, rs);
     67         }
     68         
     69     }
     70 
     71     private static void updateByName(String oldName, String newName) {
     72         Connection conn=null;
     73         PreparedStatement st=null;
     74         ResultSet rs=null;
     75         
     76         try {
     77             conn=JDBCUtil.getConnection();
     78             String sql="update user set username = ? where username = ?";
     79             st=conn.prepareStatement(sql);
     80             st.setString(1, newName);
     81             st.setString(2, oldName);
     82             
     83             int i=st.executeUpdate();
     84             //处理结果
     85             if (i>0) {
     86                 System.out.println("成功");
     87             }else{
     88                 System.out.println("失败");
     89             }
     90             
     91         } catch (Exception e) {
     92             e.printStackTrace();
     93         }finally{
     94             JDBCUtil.closeResource(conn, st, rs);
     95         }
     96         
     97         
     98     }
     99 
    100     private static void insert(String username, String password, String email) {
    101         Connection conn=null;
    102         PreparedStatement st=null;
    103         ResultSet rs=null;
    104         
    105         try {
    106             //获取链接
    107             conn=JDBCUtil.getConnection();
    108             //编写sql
    109             String sql="insert into user values(null,?,?,?)";
    110             //获取预编译语句执行者
    111             st=conn.prepareStatement(sql);
    112             //设置参数
    113             st.setString(1, username);
    114             st.setString(2, password);
    115             st.setString(3, email);
    116             //执行sql
    117             int i=st.executeUpdate();
    118             //处理结果
    119             if (i>0) {
    120                 System.out.println("成功");
    121             }else{
    122                 System.out.println("失败");
    123             }
    124         } catch (Exception e) {
    125             e.printStackTrace();
    126         }finally{
    127             JDBCUtil.closeResource(conn, st, rs);
    128         }
    129     }
    130 
    131 }
    View Code

    这里没有多么高深的东西, 熟能生巧, 暂时总结的就这么多.

     



  • 相关阅读:
    数据库路由中间件MyCat
    MyCat
    网页动画师与技术开发,如何精准高效的协作完成动效。
    JAVA异常的最佳工程学实践探索
    MySQL导入.sql文件及常用命令
    如何申请新浪SAE,发布自己的网站
    新手教程: 如何在新浪云计算SAE里部署代码
    微信公众平台开发(一) 配置接口
    SQL数据库面试题以及答案
    Sql Server之旅——终点站 nolock引发的三级事件的一些思考
  • 原文地址:https://www.cnblogs.com/wang-meng/p/5373438.html
Copyright © 2020-2023  润新知