博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[数据库操作]Java中的JDBC的使用方法.
阅读量:6614 次
发布时间:2019-06-24

本文共 8094 字,大约阅读时间需要 26 分钟。

前言:

想必大家在实际编码中都遇到过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.Driverurl=jdbc:mysql://localhost:3306/ddatabaseNameuser=rootpassword=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             //编写sql109             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             //执行sql117             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

 

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

 

转载地址:http://dxaso.baihongyu.com/

你可能感兴趣的文章
盒子的padding不影响总的大小css代码
查看>>
sonar的配置安装
查看>>
react 编写autocomplete实现(非jsx)
查看>>
[原创]如何获得SBO的数据表中文描述和数据表的中文字段
查看>>
Kademlia详解
查看>>
系统集中化管理工具之func和certmaster的部署
查看>>
也谈加速Windows7的开机速度
查看>>
C语言基础样例
查看>>
Android图像处理简单例子
查看>>
基于轮询解析+共享存储(NFS)的LAMP
查看>>
linux系统之iptables其三NAT的用法
查看>>
App-V 序列化服务器的部署及序列化的具体应用
查看>>
针对Oracle的10G版本提升SCOTT为DBA脚本!
查看>>
配置 URLScan 工具
查看>>
Windows 2003火热实用技巧
查看>>
Windows mobile 6捕获键盘操作
查看>>
Silverlight 5 RC新特性探索系列:14.Silverlight 5 RC 对字体呈现的改进
查看>>
short_open_tag = On
查看>>
使用stream类型的Result实现Ajax
查看>>
Nginx与Tomcat环境搭建
查看>>