三.Java 之JDBC java数据库的连接(java与数据库的交互基础使用)

首先我们需要知道的是JDBC的概念,都不知道它是什么,更谈不上使用它了。
JDBC的全称是 Java Database Connectivity 就是·java数据库连接,再说得明白一点就是java的开发者(sun公司)提供了一组与数据库交互的API
在这里插入图片描述
可能有人问 api是什么!
划重点,之前我也不太清楚。
百度解释:API就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API 而使操作系统去执行应用程序的命令
所以要求我们明白的一点是API是接口。
下面给上一张图,图片来源,百度
在这里插入图片描述
这张图能说明什么呢?这张图说明了JDBC是java提供的一种数据库连接统一接口,用JDBC可以连接到不同的数据库。
我这次连接到的是 MySQL,因为之前就学习了MySQL.
其语法上次已经总结了。
在这里插入图片描述
来开始了。
第一步:启动数据库 sudo service mysql start
mysql -u root(没设密码,设了密码的自己加上)
创建一个数据库
CREATE DATABASE Student;
连接数据库
use Student
创建表
CREATE TABLE Students
(
id int not null,
age int not null,
name varchar(255),
primary key(id)
);
向表中插入数据
INSERT INTO Students values(1,18,‘jack’),(2,19,‘zhangsan’),(3,20,'LiSi‘);
退出:
exit或者quit
第二步:建立一个JDBC连接
一共有四步:
1. 导入 JDBC 驱动: 只有拥有了驱动程序我们才可以注册驱动程序完成连接的其他步骤。
需要下载,并导入,其他大佬的博客有介绍的,这不是我们今天介绍的
2.注册 JDBC 驱动程序:这一步会导致 JVM 加载所需的驱动类实现到内存中,然后才可以实现 JDBC 请求。
一共有两种方法进行注册
1.使用Class.forName方法
示例

try {
 Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException ex) {
 System.out.println("Error: unable to load driver class!");
 System.exit(1);
}

2.DriverManager.registerDriver()

   Driver driver = new com.mysql.jdbc.Driver();
   DriverManager.registerDriver(driver);

3.数据库 URL 指定:创建具有正确格式的地址,指向到要连接的数据库。(数据库的 URL 是指向数据库地址。)
MySQL 的URL是
jdbc:mysql://hostname/ databaseName
MySQL的JDBC驱动程序名称
com.mysql.jdbc.Driver
其他的自己去网上查(hostname 是用以显示或设置系统的主机名称)

4.创建连接对象:最后,代码调用 DriverManager 对象的 getConnection() 方法来建立实际的数据库连接。
一共有三种连接方法
4.1.使用数据库 URL 的用户名和密码


String URL = "jdbc:mysql://localhost/EXAMPLE";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);

4.2.只使用一个数据库 URL

String URL = "jdbc:mysql://localhost/EXAMPLE?user=root&password=0909";
//Mysql URL 的参数设置详细可以查阅相关资料
Connection conn = DriverManager.getConnection(URL);

4.3 使用数据库的 URL 和一个 Properties 对象

import java.util.*;

String URL = "jdbc:mysql://localhost/EXAMPLE";
Properties pro = new Properties( );

//Properties 对象,保存一组关键字-值对
pro.put( "user", "root" );
pro.put( "password", "" );

Connection conn = DriverManager.getConnection(URL, pro);

Properties:Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量设置。像Python支持的配置文件是.ini文件,同样,它也有自己读取配置文件的类ConfigParse,方便程序员或用户通过该类的方法来修改.ini配置文件。在Java中,其配置文件常为.properties文件,格式为文本文件,文件的内容的格式是“键=值”的格式,文本注释信息可以用"#"来注释。
这就要求我们在使用时,需要保存一对关键字-值对。
第三步:对数据库进行操作:
通过使用 JDBC Statement, CallableStatement 和 PreparedStatement 接口定义的方法和属性,就可以使用 SQL 或 PL/SQL 命令和从数据库接收数据
三种接口的详情请参考百度,大佬的博客。
第四步:建立结果集
前面第三步对数据库进行了一些操作,需要建立一些结果集来保存这些数据
名称:Resultset接口有三类
1.导航方法:用于移动光标

2.获取方法:用于查看当前行的光标所指向的列中的数据

3.更新方法:用于更新当前行的列中的数据
相关知识留在下一次介绍。比较复杂,也可以参考其他大佬的博客,搜索JDBC的Resultset就会有很多介绍了
第五步:
可以把结果集输出或者其他操作(使用导航方法移动光标可将其输出)。
第六步:清除 = 代码里的清理环境+finally 的关闭资源。(注意这一点)
1.关闭Resultset对象,2.关闭 Statement 对象,3.关闭了 Connection 对象.这是有顺序的,最好不要调换,避免清理失败。而且还需要加上finally 关闭资源。`
附上代码:

import java.sql.*;

public class JdbcTest {
   // JDBC 驱动器的名称和数据库地址
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
   static final String DB_URL = "jdbc:mysql://localhost/Student";

   static final String USER = "root";
   static final String PASS = "";

   public static void main(String[] args) {
       Connection conn = null;
       PreparedStatement stmt = null;
       try{
           //注册 JDBC 驱动器
           Class.forName("com.mysql.jdbc.Driver");

           //打开连接
           System.out.println("Connecting to database...");
           conn = DriverManager.getConnection(DB_URL,USER,PASS);

           //执行查询
           System.out.println("Creating statement...");
           //这里我们要更改一个同学的年龄,参数待定
           String sql = "UPDATE Students set age=? WHERE id=?";
           stmt = conn.prepareStatement(sql);

           //将值绑定到参数,参数从左至右序号为 1,2...
           stmt.setInt(1, 22);  // 将age为22值赋给第一个问号
           stmt.setInt(2, 1); //  ID 为1的值赋给第2割问号
       
           // 结果就是我们了更新 ID 为 1 的同学的年龄
           int rows = stmt.executeUpdate();//int executeUpdate(String SQL)
                                           //这个是jdbc里面的一个方法
                                          // 主要功能是执行 update和insert、delete等sql语句
                                          //返回的数据类型为int 
           System.out.println("被影响的行数 : " + rows );//返回操作数据的行数意思是 操作的数据条数 
                                                        //比如你delete了三条数据 返回的结果就是3,这里就是1

           // 查询所有记录,并显示。
           sql = "SELECT id, name, age FROM Students";
           ResultSet rs = stmt.executeQuery(sql);//执行查询操作时使用此方法可以生成一个Resultset集合

           //处理结果集
           while(rs.next()){
               //检索
               int id  = rs.getInt("id");
               int age = rs.getInt("age");
               String name = rs.getString("name");


               //显示
               System.out.print("ID: " + id);
               System.out.print(", Age: " + age);
               System.out.print(", Name: " + name);
               System.out.println();
           }
           //清理环境
           rs.close();
           stmt.close();
           conn.close();
       }catch(SQLException se){
           se.printStackTrace();
       }catch(Exception e){
           e.printStackTrace();
       }finally{//关闭资源
           try{
               if(stmt!=null)
                   stmt.close();
           }catch(SQLException se2){
           }
    try{
         if(conn!=null)
                 conn.close();
      }catch(SQLException se){
              se.printStackTrace();
          }
       }
           System.out.println("Goodbye!");
   }
}

可以多看看注释哦,写了一些方法的用法在注释里
注意:
结果集通常是通过执行查询数据库的语句生成,表示数据库查询结果的数据表。ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在 ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。光标可以方便我们对结果集进行遍历。默认的 ResultSet 对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。
当然这是默认的,可以不这样,这就需要我们掌握Resultset的相关知识,这我想下次再总结。
如果有什么错误的地方,希望大佬指出,非常感谢。
在这里插入图片描述

发布了16 篇原创文章 · 获赞 12 · 访问量 1479

猜你喜欢

转载自blog.csdn.net/weixin_45290352/article/details/105476009