IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 实验报告——RMI+JDBC远端数据库的访问 -> 正文阅读

[大数据]实验报告——RMI+JDBC远端数据库的访问

前期准备

(1) 确保JDK已经安装,并将其bin路径配置到环境变量path中

(2) 创建MySQL数据库,数据库名为rmidb

1. 编写DBmanager类,访问mysql数据库,实现创建表,录入成绩,查询成绩等操作。

建立Java工程RMIServer,创建包com.rmiDB,新建类DBmanager,添加mysql-connector-java-5[1].0.8.zip驱动包

package com.rmiDB;

import java.io.Serializable;

import java.sql.*;

public class DBManager {

??? private static final String userName = "root";

??? private static final String password = "";

??? private static final String private static final String dburl="jdbc:mysql://localhost:3306/rmiDB?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC";???

private static final String driver="com.mysql.jdbc.Driver";

??? private static Connection conn = null;

??? private static ResultSet rs = null;

private static Statement stmt = null;

??? public static Connection getConn(){

??????? try{

??????????? Class.forName(driver);

??????????? conn = DriverManager.getConnection(dburl,userName,password);

??????? }catch(ClassNotFoundException e){

??????????? System.out.println("没有找到数据库驱动程序");

??????? }catch(SQLException e){

???????? System.out.println("数据库连接时出现异常,可能由于数据库服务未启动造成,请先启动数据库服务");

??????? }

??????? return conn;

}

??? public static void createTable(){

??????? String sql = "create table stu(stuNo varchar(10),stuName varchar(10),grade float);";

??? ????conn = getConn();

??????? try{

??????????? stmt = conn.createStatement();

??????????? stmt.execute(sql);

??????????? stmt.close();

??????????? conn.close();

??????? }catch(SQLException e){

??????????? e.printStackTrace();

??????? }

}

??? public static void insert(Student stu){

??????? String sql = "insert into stu values('"+stu.getStuNo()+"','"+stu.getStuName()+"',"+stu.getGrade()+")";

??????? conn = getConn();

??????? try{

??????????? stmt = conn.createStatement();

??????????? stmt.executeUpdate(sql);

??? ????????stmt.close();

??????????? conn.close();

??????? }catch(SQLException e){

??????????? e.printStackTrace();

??????? }

}

??? public static Student getStu(String stuNo){

??????? String sql = "select * from stu where stuNo = "+stuNo;

??????? conn = getConn();

??????? Student stu = new Student();

??????? try{

??????????? stmt = conn.createStatement();

??????????? rs = stmt.executeQuery(sql);

??????????? if(rs.next()){

??????????????? stu.setStuNo(rs.getString(1));

??????????????? stu.setStuName(rs.getString(2));

??????????????? stu.setGrade(rs.getFloat(3));

??????????? }

??????????? stmt.close();

??????????? conn.close();

??????? }catch(SQLException e){

??????????? e.printStackTrace();

??????? }

??????? return stu;

}

??? public static class Student implements Serializable{

??????? private String stuNo="";

??????? private String stuName="";

??????? private float grade=0.0f;

??????? public Student(){}

??????? public String getStuNo() {

??????????? return stuNo;

??????? }

??????? public void setStuNo(String stuNo) {

??????????? this.stuNo = stuNo;

??????? }

??????? public String getStuName() {

??????????? return stuName;

??????? }

??????? public void setStuName(String stuName) {

??????????? this.stuName = stuName;

??????? }

??????? public float getGrade() {

??? ????????return grade;

??????? }

??????? public void setGrade(float grade) {

??????????? this.grade = grade;

??????? }

??? }

}

2.? ??定义服务接口DataService。提供创建表,录入成绩,查询成绩等操作(尽量与DBmanager类中的操作定义成同样的形式)

新建接口DataService,内容如下:

package com.rmiDB;

import java.rmi.Remote;

import java.rmi.RemoteException;

import com.rmiDB.DBManager.Student;

public interface DBServer extends Remote{

??? public void createTable() throws RemoteException;

??? public void insert(Student stu)throws RemoteException;

??? public Student getStu(String stuNo)throws RemoteException;

}

3.? ? ??实现服务DataServiceImpl。对实现创建表,录入成绩,查询成绩等操作。实现过程中可直接使用DBmanager类。

package com.rmiDB;

import java.rmi.server.*;

import java.rmi.*;

import com.rmiDB.DBManager.Student;

public class DBServerImpl extends UnicastRemoteObject implements DBServer{

??? private static final long serialVersionUID = -7777277221L;

??? public DBServerImpl() throws RemoteException{

??????? super();

??? }

??? @Override

??? public void createTable() throws RemoteException{

??????? DBManager.createTable();

??? }

??? @Override

??? public Student getStu(String stuNo) throws RemoteException{

??????? return DBManager.getStu(stuNo);

? ??}

??? @Override

??? public void insert(Student stu) throws RemoteException{

??????? DBManager.insert(stu);

??? }

}

4.编写部署类DeployServer

package com.rmiDB;

import java.rmi.*;

import java.rmi.registry.LocateRegistry;

public class DeployServer{

??? public DeployServer(){

}

??? public static void main(String[] args) {

??????? try{

??????????? DBServer ds = new DBServerImpl();

??????????? LocateRegistry.createRegistry(1111);

??????????? Naming.rebind("//localhost:1111/ds",ds);

??????????? System.out.println("RMI服务器正在运行...");

??????? }catch(Exception e){

??????????? e.printStackTrace();

??????? }

??? }

}

5.? ??使用DataService接口,实现客户端 RmiHelloClient.java。

建立Java工程RMIClient,创建包com.rmiClient,新建类RmiHelloClient,内容如下:

package com.rmiClient;

import java.rmi.*;

import com.rmiDB.*;

import com.rmiDB.DBManager.Student;

public class RmiHelloClient{

??? public static void main(String[] args) {

??????? try{

??????????? DBServer ds = (DBServer)Naming.lookup("//172.29.19.57:1111/ds");? //本机ip地址

??????????? ds.createTable();

??????????? Student stu = new Student();

??????????? stu.setStuNo("*******");

??????????? stu.setStuName("Jerry");

??????????? stu.setGrade(99.9f);

??????????? ds.insert(stu);

??????????? Student stu1 = new Student();

??????????? stu1.setStuNo("2018001");

????????? ??stu1.setStuName("****");

??????????? stu1.setGrade(89f);

??????????? ds.insert(stu1);

??????????? Student stu2 = ds.getStu("***********");

??????????? System.out.println("学号: "+stu2.getStuNo());

??????????? System.out.println("姓名: "+stu2.getStuName());

?? ?????????System.out.println("成绩: "+stu2.getGrade());

??????????? Student stu3 = ds.getStu("2018001");

??????????? System.out.println("学号: "+stu3.getStuNo());

??????????? System.out.println("姓名: "+stu3.getStuName());

??????????? System.out.println("成绩: "+stu3.getGrade());

??????? }catch(Exception e){

??????????? e.printStackTrace();

??????? }

??? }

}

工程目录结构为:

6.测试运行

运行DeployServer.java启动服务器

运行RmiHelloClient.java启动客户端

客户端会将客户端的数据传给服务器并保存到数据库中,客户端再从数据库中读取出来。

数据库显示:

客户端显示:

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:16:31  更:2021-10-26 12:17:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:38:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码