JDBC无法找到正确的MySql数据库

时间:2018-02-08 19:22:26

标签: java mysql jdbc

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

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.employee是我在更改名称之前调用的interndata.teacherexample

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

3 个答案:

答案 0 :(得分:1)

  

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

vector<char>字符串中,您已将数据库名称指定为JDBC

interndata

因此,jdbc:mysql://LocalHost:3306/interndata INSERT中的任何一个查询都将在SELECT数据库上下文中执行。

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

interndata

将在INSERT INTO employee ... 数据库中为employee表执行。如果要在不同的数据库上下文中执行上述查询,即interndata。然后,您需要将internexample sting更改为

JDBC

答案 1 :(得分:1)

  

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

您所提供的任何内容都不支持这样的结论。

  • 首先,您成功连接到MySQL,否则您将获得不同的例外。

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

      

    表&#39; interndata.employee&#39;不存在

相反,问题似乎是预期的表实际上并不存在于数据库中。我们没有任何依据可以确定原因,因此我们只能推测。由于您提到更改表名,但您似乎也选择了不同的数据库名称,可能是您更改了表名但将其保留在旧数据库中。或者,也许您在不同的数据库实例上执行它 - 可能在不同的计算机上,因为使用localhost JDBC URL时,程序不会随之移动。或者改变根本没有效果,或者整个数据库都被擦除了,等等。

答案 2 :(得分:-1)

你使用哪个IDE? eclipse,intellij,netbeans?我运行intellij,如果我遇到这些问题,我只需按文件 - &gt;无效的缓存/重启和它有效的十次中的9次。

之所以这样做是因为有时旧的引用会被遗忘,并且会导致错误。但是当你删除所有并从你现在拥有的实际代码创建它们时,你得到的一切都是&#34; true&#34;。