使用mysql和java jdbc创建表和插入数据到数据库不能正常工作

时间:2018-04-22 05:04:38

标签: java mysql jdbc

ConnectionClass:

我在这里使用stm.execute,但我没有收到错误。我也使用了executeUpdate,但我也遇到了错误。

package com.company;
import java.sql.*;
class ConnectionClass {
    private static Connection con = null;
    private static Statement stm = null;
    private  static  ConnectionClass connectionClass;
    public void createConnection() {
      try {
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql", "root", "root");
      }
      catch (Exception e) {
        e.printStackTrace();
      }
    }
    public  void createTable() {
      String Table_Name = "BOOK";
      try {
        stm = con.createStatement();
        DatabaseMetaData dbm = con.getMetaData();
        ResultSet rs =  dbm.getTables(null, null, Table_Name, null);
        if (rs.next()) {
          System.out.println("Table" + Table_Name + "Already created");
        } else {
          String sql = "CREATE TABLE" + Table_Name + "(ID VARCHAR(200), title VARCHAR(200),author varchar(100),publisher varchar(100)";
          stm.executeLargeUpdate(sql);
        }
      } catch (Exception ex) {
        ex.printStackTrace();
      }
    }
    public ConnectionClass() {
      createConnection();
      createTable();
    }
}

MainClass:

在这里,我认为主要班级正常运作。

package com.company;

public class Main {
    public static void main(String[] args) throws Exception {
      ConnectionClass connectionClass = new ConnectionClass();
    }
}

ERROR:

enter image description here

2 个答案:

答案 0 :(得分:0)

您的查询中存在语法错误。您当前的SQL查询:

String sql = "CREATE TABLE" + Table_Name + "(ID VARCHAR(200), title VARCHAR(200),author varchar(100),publisher(100)";

更正了SQL查询:

String sql = "CREATE TABLE" + Table_Name + "(ID VARCHAR(200), title VARCHAR(200),author varchar(100),publisher varchar(100)";

(你要求mysql创建一个列publisher,但是数据类型在哪里?只需指定数据类型就可以了。)

编辑:

所以,最后结束这个问题,让我们来看看Ora Docs对此有何看法:

executeLargeUpdate:
default long executeLargeUpdate(String sql) throws SQLException

执行给定的SQL语句,该语句可以是INSERT,UPDATE或DELETE语句,也可以是不返回任何内容的SQL语句,例如SQL DDL语句。 当返回的行数可能超过Integer.MAX_VALUE - A constant holding the maximum value an int can have, 2^31-1时,应使用此方法。

注意:无法在PreparedStatement或CallableStatement上调用此方法。

  

默认实现将抛出UnsupportedOperationException。从JDK 1.8开始引入此方法

还要注意文档中所述的上述观点。默认实现是抛出UnsupportedOperationException。这意味着不同的JDBC驱动程序可以具有Statement类的不同实现。他们可以实现它,也可以不实现它,如果你在第二种情况下调用该方法,该方法将抛出UnsupportedOperationException,如文档中所述。

通过检查此method的oracle文档,您可以获得有关它的更多信息。因此可能是您使用的驱动程序版本不支持此方法,因此请更新此驱动程序的最新版本并进行试用。

答案 1 :(得分:0)

在Java 8 / JDBC 4.2中添加了方法executeLargeUpdate,并通过在您使用的MySQL Connector / J版本中未实现的错误来判断。

解决方案很简单:不要使用API​​中的任何Large方法,而是使用executeUpdate,或者 - 更好地使用DML - execute 。或者,更新到较新版本的MySQL Connector / J,因为executeLargeUpdate在较新版本的MySQL Connector / J中实现(例如5.1.46,但至少为5.1.37(添加了支持的版本))。

您还需要解决语法错误pointed out by Adil