一、导入mysql的驱动:“com.mysql.jdbc.Driver”, 必须将mysql的驱动 包(jar文件)导入到本工程中。

Class.forName("com.mysql.jdbc.Driver");

二、由DriverManager驱动的管理类对象去获得Connection,在此之前需要先导入mysql的驱动包(或者驱动类)。

Connection conn = DriverManager.getConnection(url, userName, userPassword);

三、由Connection对象,获得执行增删改的sql语句的状态对象Statement

Statement stmt = conn.createStatement();

四、执行增删改查。

主要代码:

1、获得连接对象

/**
	 *
	 * @return:返回获得的连接对象
	 * @throws SQLException
	 * @throws ClassNotFoundException
	 */
	public static Connection getConn(String database, String user,
			String password) throws ClassNotFoundException
	{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conn = null;
		try
		{
			conn = DriverManager.getConnection(url + database, user, password);
			System.out.println("Database changed");
		} catch (SQLException e)
		{
			System.out.println(e.getMessage());
		}
		return conn;
	}

2、执行查询语句返回查询结果

	public static ArrayList<String[]> queryDB(String sql)
			throws ClassNotFoundException
	{
		ArrayList<String[]> list = null;
		try
		{
			list = new ArrayList<String[]>();
			ResultSet result = statement.executeQuery(sql);
			ResultSetMetaData rsd = result.getMetaData();
			num = rsd.getColumnCount();
			String[] columnName = new String[num];
			for (int i = 1; i <= num; i++)
			{
				columnName[i - 1] = rsd.getColumnName(i);
				queryLen[i - 1] = Math.max(queryLen[i - 1],
						columnName[i - 1].length());
			}
			list.add(columnName);
			while (result.next())
			{
				int index = 0;
				String[] string = new String[num];
				for (int i = 1; i <= num; i++)
				{
					string[i - 1] = String.valueOf(result.getObject(i));
					queryLen[index] = Math.max(queryLen[index],
							string[i - 1].length());
					index++;
				}
				list.add(string);
			}
		} catch (SQLException e)
		{
			 System.out.println(e.getMessage());
		}
		return list;
	}

3、格式化输出

public static void main(String[] args) throws SQLException,
			ClassNotFoundException, IOException
	{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		Connection conn = null;
		while (true)
		{
			System.out.print(">");
			String command = br.readLine();
			if (command.equals("mysql -u root -p"))
			{
				System.out.print("Enter password:");
				String password = br.readLine();
				System.out.print("mysql>");
				String database = br.readLine();
				if (database.split(" ")[0].equals("use"))
				{
					conn = getConn(database.split(" ")[1], "root", password);
					if (conn == null)
						continue;
				}
				break;
			}
		}
		statement = conn.createStatement();
		while (true)
		{
			System.out.print("\nmysql>");
			String sql = br.readLine();
			sql = sql.replace(";", "");
			if (sql.trim().equals("quit"))
			{
				break;
			} else if (sql.trim().startsWith("select"))
			{
				ArrayList<String[]> list = queryDB(sql);
				for (int i = 0; i < list.size(); i++)
				{
					if (0 == i || 1 == i)
					{
						System.out.print("|");
						for (int j = 0; j < list.get(i).length; j++)
						{
							for (int a = 0; a < queryLen[j]; a++)
							{
								System.out.print("-");
							}
							System.out.print("|");
						}
						System.out.println();
					}
					for (int j = 0; j < list.get(i).length; j++)
					{
						System.out.print("|" + list.get(i)[j]);
						for (int k = list.get(i)[j].length(); k < queryLen[j]; k++)
						{
							System.out.print(" ");
						}
					}
					System.out.println("|");
					if (i == list.size() - 1)
					{
						System.out.print("|");
						for (int j = 0; j < list.get(i).length; j++)
						{
							for (int a = 0; a < queryLen[j]; a++)
							{
								System.out.print("-");
							}
							System.out.print("|");
						}
						System.out.println();
					}
				}
			} else
			{
				updateDB(sql);
			}
		}
	}

运行测试:

在Java控制台模拟dos命令下操作MySQL的更多相关文章

  1. DOS命令行操作MySQL数据库中文乱码问题解决

    我们在 dos 命令行操作中文时,会报错 ’); ERROR (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 原因:因为 ...

  2. DOS命令行操作MySQL常用命令

    平时用可视化界面用惯了,如果紧急排查问题,没有安装可视化工具的话,只能通过命令来看了. 以备不时之需,我们要熟悉一下命令行操作MySQL. 打开DOS命令窗口:WIN + R 输入cmd,回车 然后输 ...

  3. Java在DOS命令下的运行及其API文档制作过程

    该文档主要描述java程序在DOS命令下的运行,以及一些常用的命令 常用DOS命令: d: 回车 盘符切换 dir(directory):列出当前目录下的文件以及文件夹 md (make direct ...

  4. DOS命令下输入:java Hello 出现以下几种结果可能的原因:

    DOS命令下输入:java Hello 出现以下结果:Bad command or the file name 没有这个命令或文件名 原因可能是没有成功安装jdk或者没有配置好jdk 的环境变量,或者 ...

  5. Dos命令下目录操作

    Dos命令下目录操作 1.cd 操作 显示当前目录名或改变当前目录 cd [盘符][路径]                      进入指定盘符下的目录 cd [..]               ...

  6. Java程序设计的DOS命令基础

    Java程序设计的DOS命令基础 用户使用操作系统和软件有两种方式:命令行界面(Command Line Interface,CLI)和图形界面(Graphical User Interface,GU ...

  7. 安装Oracle之后在DOS命令下不能使用sqlplus命令启动Oracle?

    就像完成安装JDK后需要给系统配置环境变量JAVA_HOME和PATH,以便让系统认识在JDK里面的Javac命令.同样的,安装Oracle也需要这么一个过程.在正常情况下安装Oracle时系统安装程 ...

  8. Java预科:DOS命令及电脑快捷键

    Java预科:DOS命令及电脑快捷键 1.快捷键 常用快捷键 a/t +f4关闭窗口 cmd窗口打开快捷方式 1.开始+系统+命令提示符 2.win+r 输入cmd 3.在任意文件夹下面,按住shif ...

  9. [转载]java调用本地dos命令

    在社区看到java调用本地dos命令的代码,特贴出来 String command = "ipconfig"; Runtime run = Runtime.getRuntime() ...

随机推荐

  1. python 大文件以行为单位读取方式比对

    http://www.cnblogs.com/aicro/p/3371986.html 先前需要做一个使用python读取大文件(大于1G),并逐条存入内存进行处理的工作.做了很多的尝试,最终看到了如 ...

  2. 【HDU2825】Wireless Password (AC自动机+状压DP)

    Wireless Password Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u De ...

  3. js页面传参数时,参数值包含特殊字符的处理

    js页面传参数时,参数值包含特殊字符应该怎么处理,解决方法就是利用js的escape函数,这个函数在解决中文乱码等方面应用的比较广泛.推荐使用. 工作中遇到的小问题,一个页面中通过window.sho ...

  4. input text的outline属性

    普通的text选中编辑时会出现蓝色的边框,感觉不太美观,怎么去掉呢? 可以在text对应的样式里加入:outline: 0;

  5. 解除網頁無法選取文字、鎖右鍵限制:Enable Copy(Chrome 擴充套件)

    有些网页因会因为某些因素而禁止浏览者直接复制网页上的内容,虽然我们了解站方的意思,不过有些时候会造成一些不必要的困扰. Enable Copy 这款Chrome 扩充套件可以帮你一键解除封锁右键和选取 ...

  6. IP分片和TCP分片 MTU和MSS(转)

    IP分片和TCP分片 MTU和MSS(转) 访问原文:http://blog.csdn.net/keyouan2008/article/details/5843388 1,MTU(Maximum Tr ...

  7. nginx+tomcat配置https

    nginx代理https后,应用redirect https变成http,很多页面报404.情况类似http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.ht ...

  8. WebSorcket学习

    传统 Web 模式在处理高并发及实时性需求的时候经常采用以下方案: 1.轮询,原理简单易懂,就是客户端通过一定的时间间隔以频繁请求的方式向服务器发送请求,来保持客户端和服务器端的数据同步.问题很明显, ...

  9. Android应用连接代理服务器状况监测解决

    最近项目里面有这样一个需求,由于项目涉密需要连接VPN通过网址映射去登录内部服务器,而且要通知客户vpn的连接状态.网上有许多类似的连接VPN的解决方案,我也尝试了很多种,下面先列出一种比较靠谱的方式 ...

  10. 关于android屏幕适配

    好吧 我承认被美工虐的够呛,而且美工他么是个男的!一点也不美, 废话不多说 急着赶路, 之前不怎么重视 直到遇见这个美工给我一套1080x1920的 图,没错 就一套 1dp=3px没错的啊 问题是就 ...