写在前面

通过自己编写的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 }

最新文章

  1. php json_encode
  2. SQL性能优化常见措施(Lock wait timeout exceeded)
  3. python中的argparse模块学习
  4. [字符编码]Invalid byte 1 of 1-byte UTF-8 sequence终极解决方案
  5. 实体类在Windows程序中的高级应用--------------------》》心境是一种境界。
  6. hdu 2199:Can you solve this equation?(二分搜索)
  7. MySQLdb模块操作
  8. [转] [环境搭建] VS-Visual Studio-IIS Express 支持局域网访问
  9. Mongodb 笔记06 副本集的组成、从应用程序连接副本集、管理
  10. uva 12186
  11. bzoj1927
  12. StartCoroutine/StopCoroutineInvoke
  13. 《Intel汇编第5版》 汇编逆转字符串
  14. Cngigure和BUS实现远端配置
  15. 06-HTML-表格标签
  16. $gopath not set的解决办法
  17. Bugku-CTF之输入密码查看flag
  18. 解决element-ui的el-select组件文字超过宽度时不出现横向滚动条问题
  19. java根据word模板导出word文件
  20. 在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误

热门文章

  1. 类的基础语法阅读【Python3.8官网文档】
  2. Linux与Windows文件同步
  3. Mybatis(三)——全局配置文件
  4. Redis的配置文件redis.conf的解析
  5. MacOS开启PPTP协议
  6. Java日期时间API系列42-----一种高效的中文日期格式化和解析方法
  7. 每日学习——C++习题
  8. COS控制台进阶 - 文件预览和在线编辑
  9. LINUX服务器带宽跑满、负载过高问题排查
  10. CI框架 core