写在前面
通过自己编写的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或者 DB48 //建立新表 + 删除表 + 等等其他操作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 }