繁体   English   中英

JDBC找不到正确的MySql数据库

[英]JDBC can't find the correct MySql database

当我运行此代码以连接到数据库并添加一个对象时

import java.sql.*;
import java.util.Scanner;

import java.sql.*;
import java.util.Scanner;

public class Driver {
public static void main(String [] args) {
    try {
        //Get connection to DB
        Connection myConn = DriverManager.getConnection("jdbc:mysql://LocalHost:3306/interndata?useSSL=false" , "root" , "Starwars991211");
        //Create a statement 
        Statement myStmt = myConn.createStatement();

        Scanner scan = new Scanner(System.in);

        int entryNum, citNum ;
        String date, score ;
        String keepGoing = "y";

        while (keepGoing.equals("y") || keepGoing.equals("Y")){
            System.out.println("Enter the id");
            entryNum = scan.nextInt(); 
            System.out.println("Enter the date");
            date = scan.next(); 
            System.out.println("Enter the citnum");
            citNum = scan.nextInt(); 
            System.out.println("Enter the score");
            score = scan.next(); 
            String sql = "INSERT INTO employee (EntryNumber, Date, ``CriterionNum, Score)"   + " values (?, ?, ?, ?)";
            PreparedStatement preparedStatement = myConn.prepareStatement(sql);
            preparedStatement.setInt(1, entryNum);
            preparedStatement.setString(2, date);
            preparedStatement.setInt(3,citNum);
            preparedStatement.setString(4, score);
            preparedStatement.executeUpdate(); 
            System.out.print("Another factorial? (y/n) ");
            keepGoing = scan.next();
        }           
        //Execute SQL query
        ResultSet myRs = myStmt.executeQuery("select * from teacherexample");
        //process result set
        while (myRs.next()) {
            System.out.println("ID: " + myRs.getInt("EntryNumber") + " Name: " + myRs.getString("Date") + ", " + myRs.getInt("CriterionNum") + "  " +  myRs.getString("Score"));
        }
    }
    catch (Exception exc) {
        exc.printStackTrace();
    }
}
}

我得到这个错误

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表'interndata.employee'不存在

internexample.employeeinterndata.teacherexample在更改名称之前曾经被调用的名称。

我的问题是,即使认为代码中没有提到它,为什么程序仍然尝试连接到不存在的旧数据库?

为什么程序仍然尝试连接到不存在的旧数据库

JDBC字符串中,您已将数据库名称指定为interndata

jdbc:mysql://LocalHost:3306/interndata

因此,以下任何查询( INSERTSELECT都将在interndata数据库上下文中执行。

因此,当您执行以下查询时

INSERT INTO employee ...

将对interndata数据库中的employee表执行interndata操作。 如果要在不同的数据库上下文中执行上述查询,即internexample 然后,您需要将JDBC字符串更改为

jdbc:mysql://LocalHost:3306/internexample

为什么即使在代码中没有提及它的情况下,程序仍试图连接到不存在的旧数据库?

您提供的任何内容都不支持正在发生的结论。

  • 首先,您已成功连接到MySQL,否则您将获得另一个异常。

  • 其次,异常消息与您提供的代码完全一致。 您的JDBC URL jdbc:mysql://LocalHost:3306/interndata?useSSL=false将数据库指定为“ interndata”,您尝试将INERT INSERT INTO employee ,并且异常消息与此完全一致:

    表'interndata.employee'不存在

相反,问题似乎在于预期的表实际上不在数据库中。 我们没有任何依据可以确定为什么会这样,因此我们只能推测。 由于您提到更改表名,但是您似乎还选择了其他数据库名称,因此可能是您更改了表名,但将其保留在旧数据库中。 另外,也许您在不同的数据库实例上执行了它-也许在不同的机器上,因为使用localhost JDBC URL不会随程序一起移动。 也许更改根本无效,或者删除了整个数据库,等等。

您使用哪个IDE? 月食,Intellij,Netbeans? 我运行了intellij,如果遇到这些问题,我只需按File-> Invalidate caches / restart,然后在10次中有9次起作用。

这样做的原因是因为有时会留下旧的引用,并且会导致错误。 但是,当您删除所有内容并从当前的实际代码中创建它们时,得到的一切都是“真实的”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM