[数据库操作]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 }

(3)CRUDDemo, 使用PreparedStatement方式

  1 public class PPCRUDDemo {
  2     public static void main(String[] args) {
  3         //插入
  4         //insert("赵四","123","[email protected]");
  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 }

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

 

时间: 2024-04-19 05:32:24

[数据库操作]Java中的JDBC的使用方法.的相关文章

java中使用JDBC连接数据库的步骤

java中使用JDBC连接数据库的步骤? 采纳率:46%6级2015.06.30 1.注册驱动Class.forname("com.mysql.jdbc.Driver");//这是连接mysql数据库的驱动2.获取数据库连接java.sql.Connection conn=java.sql.DriverManager.getConnection(); 3.获取表达式java.sql.Statement stmt=conn.createStatement("jdbc:mysql

sqlite数据库在java中的使用

/** * */ package com.nyist.sqlitedemo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * @author yuchao * * @school 南阳理工软件学院移动设备应用与开发 * * @date 2014年6月

Java基础---使用Arrays类操作Java中的数组(三十二)

使用 Arrays 类操作 Java 中的数组 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序.搜索等(关于类和方法的相关内容在后面的章节中会详细讲解滴~~). Arrays 中常用的方法: 1. 排序 语法:  可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该数组的排序(按升序排列),如: 运行结果: 2. 将数组转换为字符串 语法: 

将java中数组转换为ArrayList的方法实例(包括ArrayList转数组)

方法一:使用Arrays.asList()方法 1 2 String[] asset = {"equity", "stocks", "gold", "foreign exchange","fixed income", "futures", "options"}; List<String> assetList = Arrays.asList(asset);

Java中的equals和hashCode方法

本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要重写这两个方法. equals()和hashCode()方法是用来在同一类中做比较用的,尤其是在容器里如set存放同一类对象时用来判断放入的对象是否重复.这里我们首先要明白一个问题: equals()相等的两个对象,hashcode()一定相等,equals()不相等的两个对象,却并不能证明他们的h

java中取得用户输入的方法

java中取得用户输入的方法 1.采用java.util.Scanner类 采用Scannerd的next()方法读取,测试代码如下: Scanner sc=new Scanner(System.in); System.out.println("waiting inputchar:"); String n=sc.next(); System.out.println(n); 当然记得在上面引入相关包: import java.util.Scanner; 2.采用BufferedReade

Java中停止线程执行的方法

Java中停止线程执行的方法 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.暂停或停止线程的理论 在Java编程中,要暂停或停止当前正在运行的线程,有几种方法.对于把线程转入睡眠Sleep状态,使用Thread.sleep()是最正确的方式.或许有人会问,为什么不使用等待wait()或通知notify()?要知道,使用等待或通知都不是很好的方式. 线程可以使用等待wait()实现被阻塞,这属于条件等待的方式,当条件满足后,又会从阻塞转为等待状态

Java中各种(类、方法、属性)访问修饰符与修饰符的说明

类: 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 (访问修饰符与修饰符的位置可以互换) 访问修饰符 名称 说明 备注 public 可以被本项目的所有类访问(使用),其他项目若想使用本项目中的类,必须将本项目打包为jar包,然后加入到classpath中 public类必须定义在和类名相同的同名文件中 (default) 只能被同一个包中的类访问(使用) 默认的访问权限,可以省略此关键字,可以定义在和public类的同一个文件中 修饰符 名称

为什么Java中有些接口没有任何方法

由于Java不支持多重继承,即一个类只能有一个父类,为了克服单继承的缺点,Java语言引入了接口这一概念.接口是抽象方法定义的集合(接口中也可以定义一些常量值),是一种特殊的抽象类.接口中只包含方法的定义,没有方法的实现.接口中的所有方法都是抽象的.接口中成员的作用域修饰符都是public,接口中的常量值默认使用public static final修饰.由于一个类可以实现多个接口,因此通常可以采用实现多个接口的方式来间接的达到多重继承的目的. 在Java语言中,有些接口内部没有声明任何方法,也