要求“不执行”
不能用捕获异常
只要sql语法正确就可以,具体的表是否存在没有关系,结果是否能出来也没有关系,只要求能够从语法上看出是否正确

解决方案 »

  1.   

    SQL语言语法本身有检查语句合法性而不执行的命令。可能API里也有相应的方法(具体不知道)
      

  2.   

    http://developer.mimer.se/downloads/index.htm
    有你要的东西
      

  3.   

    那个Mimer SQL 怎么用的??
    忘了说了,只能够只用jdk1.3的包
      

  4.   

    先执行,再rollback就行了,如果出异常就说明有错
      

  5.   

    那如果语句执行时间很长,是不是也会等很久才知道语句是否语法正确??
    其实我用的语句都是用select开始的
      

  6.   

    你可以先把sql语句在数据库中执行一边,没有错误以后再写进程序中。
      

  7.   

    不好意思,忘了说了,可以运用try{}catch Exception{}进行异常捕捉,出现错误就事务回滚就行了。
      

  8.   

    使用  JDO 、 Hibernate 或CMP 就不用关心SQL了
      

  9.   

    sql语句是动态的,事先不知道的,
    如果用try{}catch Exception{}的话,如果sql是正确的,岂不是要等执行完才知道是否正确,
    能够检查应的表和字段当然更好,我先是最基础的要求,只要语法正确,
    oracle在执行sql之前会先对整个语句进行编译,其实我想要的只是编译是否成功,而不想让它执行
      

  10.   

    这个我觉得不同的数据库总是有些不同的
    java不会检查sql语句是否正确,正确与否是在数据库方检验的
    没有意义
      

  11.   

    每个数据库的语法都不太一样,要知道,每个数据库本身自带的sql语法检查都不是很强(比如sqlserver的查询分析器和oracle的pl-sql),你想JAVA可能提供吗?
      

  12.   


       用正则表达式匹配一下就可以了
    使用:
     import  java.util.regex.Matcher
     import  java.util.regex.Patternpublic boolean 检查SQL(String sqlstr){
      Pattern p = Pattern.compile("a*b");  //根据不同数据库写不同的正则表达式
      Matcher m = p.matcher(sqlstr);  //"select * from fsdfdf"
      return m.matches();
    }
      

  13.   

    没办法,系统就设计成这样,
    用正则的话,正确语法的sql的正则该怎么写?好像很麻烦
      

  14.   


    如果自己不写,网上肯定有现成的这个不知道使用什么语言表达的SQL SERVER  SELECT 语法,改成正则吧SELECT [ ALL | DISTINCT ]
        [ TOP n [ PERCENT ] [ WITH TIES ] ]
        < select_list >< select_list > ::=    {    * 
            | { table_name | view_name | table_alias }.*
            |     { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
                [ [ AS ] column_alias ]
            | column_alias = expression
        }    [ ,...n ]
      

  15.   

    用事务控制JTA啊
    try
    {
    transaction.start();
    //执行SQL语句
    //没错,提交
    transaction.commit();
    }
    catch (Exception e)
    {
    //出错,回滚
    transaction.rollback();
    }
      

  16.   

    我是用select语句,不改变数据,这样rollback有错的,况且start()之后要执行时间的吧,我是要立即知道是否编译通过
      

  17.   

    如果你找到了,别忘了顺便发给我一个连接 [email protected] 谢谢拉
      

  18.   

    回:skyjust(饭团猫) ( )我是用select语句,不改变数据,这样rollback有错的正常应该不会有错的。至少我一直在CLOSE CONNECTION前执行一次ROLLBACK操作(因为我所有CONNECTION都是SETAUTOCOMMIT为FALSE的)。
    所以应该有很多SELECT语句都在执行后执行了ROLLBACK,不过都没有错误。刚看了下CONNECTION的API,原来是这样:
    public void rollback()
                  throws SQLExceptionUndoes 
    all changes made in the current transaction and releases any database locks currently held by this Connection object. This method should be used only when auto-commit mode has been disabled. 注意后面一句:This method should be used only when auto-commit mode has been disabled. 希望对你有帮助。另外,凡是SQL语句,都可以在一个SQL工具里面预先执行测试过啊,所以应该不存在
    你这种问题,执行前还要检查其合法性。
    反正我是这么认为,你既然是写出了SQL语句,那么一定要保证正确(即,经过测试),
    到运行时去判断SQL语句的正确与否,意义不大。