写在前面

通过自己编写的Java代码程序,去模仿实现MySql客服端的简单功能,最终以控制台操作,很像在Dos窗口通过命令操作MySql数据库。

关键问题

在编写过程中遇到的一些小问题和一些值得留心注意的点:

  • 增删改查结果是否成功的获得
  • 查询结果 不定集列数的获得
1  //获取结果集的列数
2 78 ResultSetMetaData rsmd = rs.getMetaData();
3 79 int i = rsmd.getColumnCount();
  • 完整代码
 1 import java.sql.*;
2 import java.util.*;
3
4 public class YouSqlClient {
5
6 private static String name = "";
7 private static String passwor = "";
8 static Connection con;
9 static Statement statement = null;
10 static ResultSet rs;
11 static Scanner input = new Scanner(System.in);
12
13 public static void main(String[] args) {
14
15 System.out.println("userName:");
16 name = input.nextLine();
17 System.out.println("password:");
18 passwor = input.nextLine();
19
20 try {
21
22 String sql = "";
23
24 Class.forName("com.mysql.jdbc.Driver").newInstance();//初始化数据库驱动
25 //指定链接数据库的信息
26 con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydbone?useUnicode=true&characterEncoding=UTF-8",name,passwor);
27 statement = con.createStatement();
28 System.out.println("login succeded!");//上面的语句成功执行,提示登陆成功
29
30 boolean isExit = true;
31
32 while(isExit) {//通过循环不断接收命令
33
34 System.out.println("Please enter the commend>");
35
36 //登陆后的操作
37 sql = input.nextLine();//测试:show databases;
38
39 try {
40 if( sql.indexOf( "use" ) == 0 ) {//换数据库
41 statement.executeQuery( sql );
42 System.out.println("Database changed!");
43 }
44 else if ( ( sql.indexOf( "show" ) == 0 || sql.indexOf( "select" ) == 0) && statement.execute(sql) ) { //查表
45 selectOperate();
46 }
47 else if ( statement.execute(sql) ) {//不是对表内数据的增删该查,不是数据库的切换,不是show table或者 DB
48 //建立新表 + 删除表 + 等等其他操作
49 }
50 else if (sql.equals("exit")) {
51 isExit = false;
52 System.out.println("exit succeded!");
53 }
54 else {
55 System.out.println( "query succedes!" );
56 }
57 } catch (SQLException e) {
58 e.printStackTrace();
59 }
60 }
61 } catch (InstantiationException e) {
62 e.printStackTrace();
63 } catch (IllegalAccessException e) {
64 e.printStackTrace();
65 } catch (ClassNotFoundException e) {
66 e.printStackTrace();
67 } catch (SQLException e) {
68 e.printStackTrace();
69 }
70 }
71
72 //查询
73 static void selectOperate() throws SQLException {
74
75 rs = statement.getResultSet();
76
77 //获取结果集的列数
78 ResultSetMetaData rsmd = rs.getMetaData();
79 int i = rsmd.getColumnCount();
80
81 //列名
82 for( int j = 1; j <= i; j++ ) {
83
84 System.out.print(rsmd.getColumnName(j) + "\t");
85 }
86 System.out.println("\n----------------------------------------------");
87
88 while( rs.next() ) { // 依次获得查询结果,每次执行nest,换一行
89
90 for( int j = 1; j <= i; j++ ) {
91
92 System.out.print(rs.getString(j) + "\t");
93 }
94 System.out.println();
95 }
96 }
97
98 }

编程模仿MySql客服端的更多相关文章

  1. python socket 客服端服务端编程

    客服端编程 import socket try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error a ...

  2. Python网络编程UDP服务器与客服端简单例子

    [转载] https://blog.csdn.net/hu330459076/article/details/7868028 UDP服务器代码: #!/usr/bin/env python # -*- ...

  3. 浏览器与服务器间的交互(客服端 <---> 服务器)

    浏览器与服务器间的交互(客服端 <---> 服务器) 请求--->处理--->响应 对类HttpContext 内部成员的使用 例如 :Request .Response .  ...

  4. android客服端+eps8266+单片机+路由器之远程控制系统

    用android客服端+eps8266+单片机+路由器做了一个远程控制的系统,因为自己是在实验室里,所以把实验室的门,灯做成了远程控制的. 控制距离有多远------只能说很远很远,只要你手机能上网的 ...

  5. python服务器端、客户端的模型,客服端发送请求,服务端进行响应(web.py)

    服务器端.客户端的模型,客服端发送的请求,服务端的响应 相当于启动了一个web server install web.py 接口框架用到的包 http://webpy.org/tutorial3.zh ...

  6. cas 服务端、客服端详细配置

    一.准备 1.下载官方源码 CAS-Server下载地址:https://www.apereo.org/projects/cas/download-cas CAS-Client下载地址:http:// ...

  7. 客服端JavaScript线程模型

    JavaScript语言核心并不包含任何线程机制,并且客服端JavaScript传统上没有定义任何线程机制.HTML5定义了一种作为后台线程的“WebWorker",但是客服端JavaScr ...

  8. 使用Mosquitto实现MQTT客服端C语言

      上一篇文章已经将mosquitto移植到了arm平台上,现在将使用mosquitto完成mqtt客服端的demo,了解过mqtt协议的小伙伴都知道,mqtt主要分为代理服务器.发布者.订阅者三部分 ...

  9. TCP服务器端和客服端(一)

    就是一个客服端(Socket)和服务器(ServerSocket)端的链接间.我的理解是一个服务端可以链接多个客服端. 在客服端有输入流outPutStream. 用于发送数据 在服务器端有输出流.i ...

随机推荐

  1. 「萌新指南」SOA vs. 微服务:What’s the Difference?

    实话实说,在我还没有实习之前,我是连 SOA 是啥都不知道的,只听说过微服务,毕竟微服务实在太火了,想不知道都难,我觉得实习的时候肯定也是微服务,进组之后发现是 SOA 架构,当时都懵了,看了很多文档 ...

  2. CSS3 animaion 和 transition 比较

    animation是CSS3的动画属性,可以设置以下六种属性. transition是CSS3的过度属性,可以设置以下四种属性. 从属性上分析,animation可以设定循环次数. 其次,两者的触发条 ...

  3. 前后端数据交互(三)——ajax 封装及调用

    有很多框架已经将 ajax 封装,需要的时候只需要调用就好,比如 jquery 是最常用的.我们为什么还需要学习 ajax 的封装呢?首先加强我们对ajax的认识,其次如果只是因为ajax请求需要引入 ...

  4. 云效x钉钉:让研发工作更简单

    云效x钉钉:让研发工作更简单,奔走相告,云效&钉钉集成实现组织架构.成员同步以及消息通知啦! 我们知道云效致力于智能化.安全可追溯.高效.简单.灵活,「云效新一代企业级DevOps平台」阿里云 ...

  5. 计算机网络-TCP篇

    TCP篇 之前的总结文章:TCP简单版本介绍-三次握手等 基本认识 TCP 是⾯向连接的(⼀定是「⼀对⼀」才能连接).可靠的.基于字节流的传输层通信协议. RFC 793 是如何定义「连接」的:⽤于保 ...

  6. linux下分卷压缩,合并解压的3种方法

    我们上传东西的时候,由于文件过大而不能上传,或者不给上传,最明显的就是发邮件了,附件最大5M,有的10M.如果超过了就郁闷了.这个时候,如果能把压缩的东西,分割开来就比较爽了,windows下面我想大 ...

  7. PHP的DBA扩展学习

    今天我们讲的 DBA 并不是传统的数据库管理员那个 DBA ,而是一个 PHP 中的巴克利风格数据库的扩展.巴克利风格数据库其实就是我们常说的键值对形式的 K/V 数据库.就像我们平常用得非常多的 m ...

  8. ssh 执行 shell脚本执行jps时:-bash: jps: command not found

    转至: https://www.codeleading.com/article/67592908468/ 我构建了hadoop集群.我们一定会写一个shell脚本去每一个节点上去jps,查看每个节点的 ...

  9. C博客作业00--顺序分支结构

    这个作业属于哪个班级 C语言--网络2011/2012 这个作业的地址 C博客作业00--顺序分支结构 这个作业的目标 初步认识C语法,掌握数据表达.printf.scanf语法及分支结构内容 0.展 ...

  10. Docker DevOps实战:GitLab+Jenkins(2)- CI/CD相关配置

    Jenkins关联GitLab Gitlab仓库配置Webhooks 上传项目到GitLab,Jenkins构建