【JAVA】JDBC

一、JDBC概述  

  JDBC(Java DataBase Connectivity,java数据库连接),SUN 公司推出的 Java 访问数据库的标准规范(接口)。
  1. JDBC 是一种用于执行SQL语句的 Java API
  2. JDBC 可以为多种关系数据库提供统一访问
  3. JDBC 由一组用Java语言编写的类和接口组成
  
  JDBC与ODBC的区别与联系:
1、Java 可以使用 ODBC,但最好是在 JDBC 的帮助下以JDBC-ODBC桥的形式使用。它们提供相同的功能,都允许 Java 程序包含与数据库无关的代码。
2、JDBC:SUN公司开发,Java接口
  ODBC:微软开发,C 语言接口


二、JDBC原理

这里写图片描述
  早期SUN公司的天才们想编写一套可以连接所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了。后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是一组接口),并提供连接数据库的协议标准,然后各个数据库厂商会遵循SUN的规范提供一套访问自己公司的数据库服务器的API出现。SUN提供的规范命名为JDBC,而各个厂商提供的,遵循了JDBC规范的,可以访问自己数据库的API被称之为驱动。  


三、JDBC开发步骤

1、导入包:

  需要导入包含数据库编程所需的JDBC类的包。
  大多数情况下,使用“import java.sql.*”就足够了。

2、注册JDBC驱动程序:

  需要初始化驱动程序,以便可以打开与数据库的通信通道。

Class.forName("com.mysql.jdbc.Driver");

3、打开连接:

  需要使用DriverManager.getConnection()方法创建一个Connection对象,它表示与数据库的物理连接。

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");

  这句代码:DriverManager.getConnection(url,username,password),其中username和password是登录数据库的用户名和密码,这里假设mysql数据库的用户名和密码分别是:root、root。
  JDBC规定url的格式由三部分组成,每个部分中间使用冒号分隔。一:jdbc,固定不变;二:数据库名称,这里连接mysql数据库,因此为mysql;三、由数据库厂商规定,mysql的第三部分由数据库服务器的IP地址(localhost)、端口号(3306),以及DATABASE名称(mydb)组成。

4、获得语句执行者:

  在得到Connection之后,说明已经与数据库连接上了,下面是通过Connection获取Statement(用来向数据库发送要执行的SQL语句)对象的代码:

Statement stmt = conn.createStatement();

5、执行sql语句:

  需要使用类型为Statement的对象来构建和提交SQL语句到数据库。

1、intexecuteUpdate(String sql);          执行 insertupdatedelete 语句.(DML语句)
2、ResultSetexecuteQuery(String sql);     执行 select 语句.(DQL语句)
3、booleanexecute(String sql);            执行 select 返回 true 执行其他的语句返回false.
如果返回 true,需要使用 getResultSet()获得查询结果
如果返回 false,需要使用 getUpdateCount()获得影响行数

6、处理结果集:

  ResultSet就是一张二维的表格,它内部有一个“行光标”,光标默认的位置在“第一行上方”,我们可以调用rs对象的next()方法把“行光标”移动到第一行记录的位置,这时可以使用ResultSet提供的getXXX(int col)方法来获取指定列的数据了:
  

rs.next();//光标移动到第一行
rs.getInt(1);//获取第一行第一列的数据

  当你使用rs.getInt(1)方法时,你必须可以肯定第1列的数据类型就是int类型,如果你不能肯定,那么最好使用rs.getObject(1)。在ResultSet类中提供了一系列的getXXX()方法,比较常用的方法有:

Object getObject(int col)
String getString(int col)
int getInt(int col)
double getDouble(int col)

7、清理环境:

  需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集,关闭的顺序是先得到的后关闭,后得到的先关闭(栈原理)。

扫描二维码关注公众号,回复: 1825230 查看本文章
stmt.close();
conn.close();

四、完整实例——用户登录

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class TestLogin {
    public void login(String username, String password) throws ClassNotFoundException, SQLException {
        // 1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
        // 3.创建执行sql语句的对象
        Statement stmt = conn.createStatement();
        // 4.编写sql
        String sql = "select * from tbl_user where " + "uname='" + username + "' and upassword='" + password + "'";
        // 5.执行sql语句
        ResultSet rs = stmt.executeQuery(sql);
        // 6.对结果集进行处理
        if (rs.next()) {
            System.out.println("恭喜您," + username + ",登录成功!");
            System.out.println(sql);
        } else {
            System.out.println("账号或密码错误!");
        }
        if (rs != null)
            rs.close();
        if (pstmt != null)
            pstmt.close();
        if (conn != null)
            conn.close();
    }
}

猜你喜欢

转载自blog.csdn.net/ljl55555/article/details/80735148