Java

Java使用JDBC(上)

大家都知道JDBC是面向关系型数据库的,全称Java Database Connectivity。可是Java怎么能使用JDBC呢,小编也很好奇,但事实就是这样,大家有什么想法在留言区评论吧!(狗头保命)😏

创建数据库

首先使用Navicat Premium 15 创建一个表,先存进去一点数据方便一会调用。

image 29

运行两个查询语句

insert into user_info (id,name) VALUES ('123','陈泽曈')
insert into user_info (id,name) VALUES ('456','老高')
image 30

可以看到已经添加进来了。

添加依赖

添加mysql-connector-java-5.1.44-bin.jar

选择添加到lib文件夹下

image 31

可以去 文件–项目结构中选择添加依赖

image 32

也可以右键添加为库

image 33

连接数据库

使用JDBC应用程序向表中查询数据记录需要以下步骤:

  • 导入包:需要包含包含数据库编程所需的JDBC类的包。 大多数情况下,使用import java.sql.*就足够了。
  • 注册JDBC驱动程序:需要初始化驱动程序,以便可以程序中打开数据库的通信通道。
  • 打开连接:需要使用DriverManager.getConnection()方法来创建一个Connection对象,它表示与数据库服务器的物理连接。
  • 执行查询:需要使用类型为Statement的对象来构建和提交SQL语句,以在选择的数据库的表中查询数据记录。
  • 提取数据:执行SQL查询后,可以从表中获取记录。
  • 释放资源:关闭Statement和connection

数据库的查询

package Test;

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

public class Test {
    public static void main(String[] args) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://127.0.0.1:3306/test";
            Connection connection= DriverManager.getConnection(url,"root","1qazxsw2");
            System.out.println("连接成功!");
            Statement search=connection.createStatement();
            String sql="SELECT * FROM user_info";
            ResultSet rs = search.executeQuery(sql);
            while(rs.next()){
                System.out.println(rs.getString("id"));
                System.out.println(rs.getString("name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意导入sql包,这里捕获异常直接用通用的Exception,不然要使用两个try/catch捕获异常。一个为forName,一个为getConnection抛出。

  • Statement 用于执行静态SQL语句并返回其生成的结果的对象
  • ResultSet 对象保持一个光标指向其当前的数据行

输出为:

image 34

数据库的修改

几个操作语法很相似,就直接给出例子了。

executeUpdate:执行给定的SQL语句,这可能是INSERT , UPDATE ,或DELETE语句,或者不返回任何内容,如SQL DDL语句的SQL语句。

删除数据

先插入一个id=0的数据

image 36
 int result = search.executeUpdate("delete from user_info where id=0");
            if(result >0){
                System.out.println("ok");
            }

使用这句话删除id为0的数据行

image 37

出现了OK,数据库中也删除成功。

image 38

添加数据

int result1 = search.executeUpdate("insert into user_info (id,name)values('789','hello')");
            if (result1 > 0) {
                System.out.println("添加成功");
            }

执行结果

image 39

更新数据

这次把数据库连接语句做了封装,写进了一个类。使用时传递语句就好。

image 42
image 41

JDBC类

package Test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class JDBC {
    boolean UpdateSql(String sql){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/test";
            Connection connection = DriverManager.getConnection(url, "root", "1qazxsw2");
            Statement exe=connection.createStatement();
            int result=exe.executeUpdate(sql);
            return result>0;
        } catch (Exception e) {
            e.printStackTrace();
        }
    return  false;
    }
}

释放资源

使用完Statement和connection后,要进行资源的释放,那么问题来了,应该怎样设置释放的逻辑呢。

image 43

如果将close添加到这里,当sql语句出错时,会跳转到catch语句,无法释放。所以要添加到finally里。

image 45

当exe或者connection中为null时,不用关闭,因为本来就没有创建成功,当为null时关闭。注意不能写到一个if中一起关闭,因为有可能statement创建失败,而在一个if中时则无法关闭connection。

注:查询也可以封装到方法里

boolean SelectSql(String sql){
        Connection connection=null;
        Statement search=null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:3306/test";
            connection = DriverManager.getConnection(url, "root", "1qazxsw2");
            search=connection.createStatement();
            rs = search.executeQuery(sql);
            while(rs.next()){
                System.out.println(rs.getString("id"));
                System.out.println(rs.getString("name"));
            }
        } catch (Exception throwables) {
            throwables.printStackTrace();
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(search!=null){
                try {
                    search.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

Java使用JDBC(中)

发表评论