簡體   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