在mysql和javajdbc中创建表并将数据插入数据库的操作不正常

ubbxdtey  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(385)

连接类:

我用过这里 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();
    }
}

主要等级:

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

package com.company;

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

错误:

biswetbf

biswetbf1#

查询中有语法错误。当前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语句,例如SQLDDL语句。当返回的行计数可能超过integer.max\u值- A constant holding the maximum value an int can have, 2^31-1 .
note:this method 不能对preparedstatement或callablestatement调用。
默认实现将抛出unsupportedoperationexception。这种方法是从jdk1.8开始引入的
请注意上述文件中所述的要点。默认实现是抛出unsupportedoperationexception。这意味着不同的jdbc驱动程序可以有不同的 Statement 班级。它们可以实现它,也可以不实现它,如果在第二种情况下调用该方法,该方法将抛出 UnsupportedOperationException ,如文件所述。
通过检查oracle文档中的此方法,您可以获得有关它的更多信息。因此,可能是您使用的驱动程序版本不支持此方法,因此请更新到此驱动程序的最新版本并试用。

x7yiwoj4

x7yiwoj42#

方法 executeLargeUpdate 是在Java8/JDBC4.2中添加的,从错误来看,它没有在您使用的mysql connector/j版本中实现。
解决方法很简单:不要使用任何 Large 方法,而不是使用 executeUpdate ,或者-在dml的情况下更好- execute . 或者,更新到mysql connector/j的更新版本,如下所示 executeLargeUpdate 在较新版本的mysql connector/j中实现(例如5.1.46,但至少是5.1.37(添加了支持的版本))。
您还需要解决adil指出的语法错误。

相关问题