你这个是在数据库中代码可以,但是放在java中那又是什么意思,
DROP DATABASE IF EXISTS `guocui`;
    CREATE DATABASE `guocui`;
   USE `guocui`;
   CREATE TABLE  `message` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` char(10) NOT NULL,
  `msg` text NOT NULL,
  `email` char(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;
java怎么识别你这个代码,同志不要把java当数据库使用。

解决方案 »

  1.   

    意思是在一些mysql的软件里比如sql-front或者phpmyadmin可以运行sql语句
      

  2.   


    完全可以的,因为他可以执行sql,就这样!!!
      

  3.   

    statment,PreparedStatement执行的都是查询或者DMLDDL是不能执行的。但是JAVA是可以通过编程实现你文中大部分需求的。
      

  4.   

    你的sql语句完全正确并且可以在java中执行的。。谁说一定要在数据库软件中的
      

  5.   

    sql语句是完全正确,可我在java写为一个字符串一次执行就报错。
    package guocui;
    import java.io.*;
    import java.sql.*;
    import com.sun.rowset.*;
    import java.util.Properties;
    import java.io.*;public class Sqls
    {
    public static void main(String []args)
    {
    try
    {

    Class.forName("com.mysql.jdbc.Driver");
    String uri = "jdbc:mysql://"+"localhost"+":3306/"+"guocui";
    Connection con;
    PreparedStatement sql;

    //多行语句
    String manySql = "";

    //sql语句,以String数组保存
    String [] singleSql =
    {
    "DROP DATABASE IF EXISTS `guocui`;",//singleSql[0]
    "CREATE DATABASE guocui ;",//singleSql[1]
    "USE guocui;",//singleSql[2]
    "CREATE TABLE  `message` ("+
        "`id` int(10) unsigned NOT NULL auto_increment,"+
        "`name` char(10) NOT NULL,"+
        "`msg` text NOT NULL,"+
        "`email` char(50) NOT NULL,"+
        "PRIMARY KEY  (`id`)"+
     ") ENGINE=InnoDB  DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci;",//singleSql[3]
    };

    //用户名密码
    con = DriverManager.getConnection(uri,"lpx","111111");

    //逐个执行sql语句结果正确
    //如果把多行语句加在一起,结果就错误。
    for(int i=0;i<4;i++)
    {
    manySql += singleSql[i];                      /****error****/
    //sql = con.prepareStatement(singleSql[i]);   /****right****/
    //sql.execute();                              /****right****/
    }
    sql = con.prepareStatement(manySql);               /****error****/
    sql.execute();                                     /****error****/
    System.out.println("ok");
    }
    catch(Exception e)
    {
    System.out.println("fail");
    e.printStackTrace();
    }
    }
    }
    /****error****/标注是出错的语句
    /****right****/标注是正常的语句
    若要调试请屏蔽错误的,或者错误的。
    正确的就输出ok
    错误的就输出fail错误信息如下:
    fail
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in
    your SQL syntax; check the manual that corresponds to your MySQL server version
    for the right syntax to use near ';CREATE DATABASE guocui ;USE guocui;CREATE TAB
    LE  `message` (`id` int(10) unsign' at line 1
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
    orAccessorImpl.java:39)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
    onstructorAccessorImpl.java:27)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
            at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
            at com.mysql.jdbc.Util.getInstance(Util.java:381)
            at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1031)
            at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
            at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
            at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
            at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
            at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
            at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2543)
            at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.ja
    va:1737)
            at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:998)
            at guocui.Sqls.main(Sqls.java:50)
    Press any key to continue...
      

  6.   

    我的环境是jdk1.6 mysql5.0数据库 驱动mysql-connector-java-5.1.5-bin.jar 
      

  7.   


    我用插入的语句测试了能添加数据 ,应该是DDL语句不能执行
    呵呵,不知道说清楚没,总感觉在execute的时候 一般会写成executeQuery(selectSQL) 或者executeUpdate(updateSQL);
    DDL的么,呵呵不知道了!但记得老师说过 DLL这样不行
      

  8.   

    实在不行你写成存储过程用java去调用啦...不过我纯粹瞎说而已~对用jdbc建表没干过.
    另外你的preparedstatement那么写基本白用了啊..
    你也得弄点?号出来,然后给?号的地方赋值这样比较不容易出格式上的问题啊.
      

  9.   

    把你组合出来的manySql值放到查询分析器中执行一下看看是否可以?
      

  10.   

    晕,你这个叫批处理嘛?stmt = con.createStatement(); 
    for(int i=0;i<4;i++)
                {
                   stmt.addBatch(singleSql[i]);                     
                             
                }
                stmt.executeBatch();  
                System.out.println("ok");
      

  11.   

    DROP DATABASE IF EXISTS `guocui`; 
        CREATE DATABASE `guocui`; 
      USE `guocui`; 
      CREATE TABLE  `message` ( 
      `id` int(10) unsigned NOT NULL auto_increment, 
      `name` char(10) NOT NULL, 
      `msg` text NOT NULL, 
      `email` char(50) NOT NULL, 
      PRIMARY KEY  (`id`) 
    ) ENGINE=InnoDB  DEFAULT CHARACTER SET gb2312 COLLATE gb2312_chinese_ci; 

    DROP,CREATE这些是DDL语句,不能在JAVA中执行,存储过程中也是一样不能执行。
    只有DML如insert,delete,update,select才能执行。
    见意楼主先搞清楚SQL语言分类:
    SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML, 
    数据定义语言DDL,数据控制语言DCL
    数据查询语言DQL Q = Query 
    数据操纵语言DML M = Manipulation 
    事务控制语言TCL C = Control
    数据定义语言DDL D = Definition
    数据控制语言DCL(自动提交事务) 
      

  12.   

    给我个不可以的理由,只是接口不一样罢了,CallableStatement这个就是执行存储过程的
      

  13.   

    楼主还是一个一个调用吧,DDL不是批处理的范畴。 呵呵!
      

  14.   

    基本上明白了,就是DDl语言只能逐个调用。
    DMl却可以批处理。
    这个解释对吗?
      

  15.   

    好像在于mysql驱动的差别的,稍微有点懂了,以后遇到这样的问题也能解决。
    但最底层的东西还是不懂,故此,先结贴了。