Java利用套接字实现应用程序对数据库的访问

Java利用套接字实现应用程序对数据库的访问,需要经过以下步骤:

  1. 配置数据库信息:在Java应用程序中,我们可以通过配置文件比如Property文件来存储数据库信息,比如数据库名称、用户名、密码、地址、端口等等。

  2. 建立连接:使用Java JDBC API中的该库驱动连接数据库。

  3. 字段验证:避免SQL注入攻击,对输入的字段进行验证和过滤。

  4. 构建SQL语句:使用Java JDBC API中的SQL语句构建模块,构建所需的SQL查询/修改语句。

  5. 执行操作:向数据库发送SQL语句并执行,如果需要则从结果集中提取结果。

示例1:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

// 服务器端线程,用于处理客户端请求
public class ServerThread implements Runnable {

    private Socket socket;
    // 定义客户端请求常量
    private final String REQUEST_IP = "query_by_ip";
    private final String REQUEST_NAME = "query_by_name";
    private final String REQUEST_EXIT = "exit";
    private final String RESPONSE_SUCCESS = "success";
    private final String RESPONSE_FAIL = "fail";

    public ServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            // 获取客户端请求类型
            ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
            String requestType = (String) in.readObject();
            // 获取请求参数
            String requestParam = (String) in.readObject();
            // 执行数据库操作
            Connection conn = getConnection();
            Statement stmt = conn.createStatement();
            ResultSet rs;
            if (REQUEST_IP.equals(requestType)) {
                rs = stmt.executeQuery("SELECT * FROM userinfo WHERE ip='" + requestParam + "'");
            } else {
                rs = stmt.executeQuery("SELECT * FROM userinfo WHERE name='" + requestParam + "'");
            }
            // 构建返回结果
            ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
            if (rs.next()) {
                String result = rs.getString("name") + " " + rs.getString("ip") + " " + rs.getString("phone");
                out.writeObject(result);
                out.writeObject(RESPONSE_SUCCESS);
            } else {
                out.writeObject(null);
                out.writeObject(RESPONSE_FAIL);
            }
            // 关闭连接
            rs.close();
            stmt.close();
            conn.close();
            in.close();
            out.close();
            socket.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private Connection getConnection() {
        try {
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

示例2:

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

// 服务器端线程,用于处理客户端请求
public class ServerThread implements Runnable {

    private Socket socket;
    // 定义客户端请求常量
    private final String REQUEST_INSERT = "insert";
    private final String REQUEST_DELETE = "delete";
    private final String RESPONSE_SUCCESS = "success";
    private final String RESPONSE_FAIL = "fail";

    public ServerThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try {
            // 获取客户端请求类型
            ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
            String requestType = (String) in.readObject();
            // 执行数据库操作
            Connection conn = getConnection();
            PreparedStatement stmt = null;
            if (REQUEST_INSERT.equals(requestType)) {
                // 获取请求参数
                String name = (String) in.readObject();
                String ip = (String) in.readObject();
                String phone = (String) in.readObject();
                stmt = conn.prepareStatement("INSERT INTO userinfo (name, ip, phone) VALUES (?, ?, ?)");
                stmt.setString(1, name);
                stmt.setString(2, ip);
                stmt.setString(3, phone);
                int rows = stmt.executeUpdate();
                // 构建返回结果
                ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
                if (rows > 0) {
                    out.writeObject(RESPONSE_SUCCESS);
                } else {
                    out.writeObject(RESPONSE_FAIL);
                }
                out.close();
            } else {
                // 获取请求参数
                int id = (int) in.readObject();
                stmt = conn.prepareStatement("DELETE FROM userinfo WHERE id = ?");
                stmt.setInt(1, id);
                int rows = stmt.executeUpdate();
                // 构建返回结果
                ObjectOutputStream out = new ObjectOutputStream(socket.getOutputStream());
                if (rows > 0) {
                    out.writeObject(RESPONSE_SUCCESS);
                } else {
                    out.writeObject(RESPONSE_FAIL);
                }
                out.close();
            }
            // 关闭连接
            stmt.close();
            conn.close();
            in.close();
            socket.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    private Connection getConnection() {
        try {
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection(url, user, password);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java利用套接字实现应用程序对数据库的访问 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • RSA加密算法java简单实现方法(必看)

    当然,下面我将为您详细讲解“RSA加密算法java简单实现方法(必看)”的完整攻略。 RSA加密算法java简单实现方法(必看) 简介 RSA加密算法是一种非对称加密算法,广泛运用于网络通信与安全领域。RSA算法通常需要进行非常复杂的数学运算,但我们完全可以利用Java的BigInteger类来实现RSA算法。 实现步骤 生成公私钥对 首先,我们需要通过Ja…

    Java 2023年5月19日
    00
  • 详解用maven将dubbo工程打成jar包运行

    下面是详解用 Maven 将 Dubbo 工程打成 Jar 包运行的完整攻略。 1. 确认dubbo工程已经创建并可正常运行 首先,需要确认 Dubbo 工程已经创建并且能够正常运行。其中,建议使用 Java 8 或更高版本。 2. 在 pom.xml 文 件 中 增 加 打 包 插 件 配 置 在工程的 pom.xml 文件中,需要增加打包插件配置,以生成…

    Java 2023年5月20日
    00
  • 详解Tomcat双击startup.bat闪退的解决方法

    下面是“详解Tomcat双击startup.bat闪退的解决方法”的完整攻略。 问题背景 当我们在Windows系统上双击Tomcat的startup.bat启动脚本时,有时会出现闪退的情况。这可能是由于某些配置或系统环境问题导致的。下面我们将详解解决这一问题的方法。 解决方法 方法一:修改startup.bat文件 步骤如下: 打开Tomcat的安装目录,…

    Java 2023年5月19日
    00
  • Java基于控制台界面实现ATM系统

    要实现“Java基于控制台界面实现ATM系统”,可以遵循以下步骤: 1. 设计功能模块 首先,需要明确ATM系统需要的功能模块,包括登录、查询余额、取款、转账、修改密码、退出等模块。可以用流程图或伪代码来描述这些功能模块的实现逻辑。 2. 实现代码 接下来,需要编写Java代码,来实现这些功能模块。可以先搭建好基本框架,然后以模块化的方式,逐步实现各个功能模…

    Java 2023年5月24日
    00
  • java中DateUtils时间工具类详解

    Java中DateUtils时间工具类详解 介绍 Java中的Date类是处理日期和时间的基本工具类,常用方法比较有限。而DateUtils时间工具类则提供了更丰富的时间处理方法,方便对日期和时间进行各种操作。 在Java中使用DateUtils需要导入Apache的commons-lang3jar包。commons-lang3提供了很多常用的工具类,除了日…

    Java 2023年5月20日
    00
  • java安全编码指南之:对象构建操作

    Java安全编码指南之对象构建操作 在Java编程中,对象构建操作是非常常见的操作,但如果不正确处理这些操作,就容易出现安全风险。这里我们将介绍一些关于对象构建操作的安全编码指南。 避免使用反射 API 的 newInstance 方法 反射 API 的 newInstance 方法可以通过 Class 对象动态实例化对象,但是存在一些安全风险。例如,如果创…

    Java 2023年5月20日
    00
  • 超级全面的PHP面试题整理集合第1/2页

    下面是详细的攻略: 第1/2页页面介绍 这是一篇关于PHP面试题的文章,分成1/2页展示,第一页包含了50道PHP面试题,第二页包含了另外50道PHP面试题。对于准备面试的PHP开发人员来说是一份不错的复习资料。该页面的排版清晰简洁,每个问题答案都有详细的解释,更新时间较新,适合PHP初级和高级开发人员进行参考。 页面内容分析 该页面的内容主要由50道PHP…

    Java 2023年6月15日
    00
  • 通过实践了解如何处理Java异常

    处理 Java 异常的攻略如下: 异常概述 Java 异常能够帮助我们处理程序运行时的错误或者问题,同时在出现异常情况下,也可以给用户展示错误信息,方便问题的排查与解决。Java 中的异常主要分为两类:已检查异常(Checked Exception)和运行时异常(Runtime Exception)。已检查异常通常是在方法声明中显式申明的,需要在方法调用处进…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部