weixin_42298593 2009-10-24 17:41
浏览 206
已采纳

java 模拟SQL语句的问题。

怎么在键盘输入
create table user(
name char,
number long ,
);
以分结束
获取表明user,写入文件
name number
张三 1234
主要是解析字符串,请给予指导,谢谢了。
[b]问题补充:[/b]
我想在屏幕处键盘输入命令,想SQLplus那样,输入;号结束。
怎么实现啊。

  • 写回答

1条回答 默认 最新

  • 成尚謙 2009-10-24 19:09
    关注

    [code="java"]
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class ConsoleSqlDDL {

    /**
     * 测试
     * @param args
     */
    public static void main(String[] args) {
        String str = "create table user (name char,number long);CREATE Table school (address varchar,zipcode long)";
        formatSQL(str);
    }
    
    /**
     * 解析SQL的DDL语句获取表明和字段名
     * @param str
     */
    public static void formatSQL(String str)
    {
        String[] arr = str.trim().split(";");
        String tbReg = "\\s*create\\s+table\\s+(.+)\\s+\\(";
        for(int i = 0; i < arr.length; i++)
        {
            String sql = arr[i];
    
            /*获取表名*/
            Pattern p =Pattern.compile(tbReg,Pattern.CASE_INSENSITIVE);  
            Matcher m = p.matcher(sql);
            String table = "";
            String[] tables = p.split(sql);  
             if(tables.length > 0)  
             {  
                 int count = 0;  
                 while(count < tables.length)  
                 {  
                     if(m.find())  
                     {  
                         table = m.group(1);
                         System.out.println("table=====>"+table);
                     }  
                     count++;  
                 }  
             }
    
             /*获取表的字段名*/
             String columns = "";
             String colReg = "\\((.+)\\)";
             Pattern pc =Pattern.compile(colReg,Pattern.CASE_INSENSITIVE);  
             Matcher mc = pc.matcher(sql);
             String[] cols = pc.split(sql);
             if(cols.length > 0)  
             {  
                 int count = 0;  
                 while(count < cols.length)  
                 {  
                     if(mc.find())  
                     {  
                         columns = mc.group(1);
                         String[] column = columns.split(",");
                         for(int c = 0; c < column.length; c++)
                         {
                             String columnReg = "\\s+";
                             Pattern pcm =Pattern.compile(columnReg,Pattern.CASE_INSENSITIVE);  
                             String[] col = pcm.split(column[c]);
                             String tbColumnn = col[0];
                             System.out.println("columnn[" + c + "] =====>" + tbColumnn);
                         }
                     }  
                     count++;  
                 }  
             }
    
             System.out.println("\n\n");
        }
    }
    

    }

    [/code]

    运行输出的结果:
    [code="java"]
    table=====>user
    columnn[0] =====>name
    columnn[1] =====>number

    table=====>school
    columnn[0] =====>address
    columnn[1] =====>zipcode
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现