首页 > 解决方案 > 为什么我会收到错误消息 java.lang.RuntimeException: java.sql.SQLException: No database selected in my java code(linking with mysql database)

问题描述

    package persistentie;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import domein.Speler;

public class SpelerMapper {
    
    private List<Speler> spelers = new ArrayList<>();
    private List<Integer> scoreSpeler = new ArrayList<>();
    private static final String UPDATE_SCORE = "insert into ID343589_g52.scoreSpeler(spelerNr,score) values(?,?)";
    
    public SpelerMapper() {
        try (Connection conn = DriverManager.getConnection(Connectie.JDBC_URL);
                PreparedStatement query = conn.prepareStatement("SELECT * FROM ID343589_g52.speler");
                ResultSet rs = query.executeQuery()) {
            while (rs.next()) {
                String gebruikersnaam = rs.getString("gebruikersNaam");    
                String wachtwoord = rs.getString("wachtwoord");
                spelers.add(new Speler(gebruikersnaam, wachtwoord));
            }
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }
    
    public boolean correcteGegevens(Speler nieuweSpeler) {
            
            return spelers.contains(nieuweSpeler);
            
    }
    
    public List<Integer> geefscoreSpeler(String naam) {
        scoreSpeler.clear();

        try (Connection conn = DriverManager.getConnection(Connectie.JDBC_URL);
                PreparedStatement query = conn.prepareStatement(String.format("SELECT sc.score FROM ID343589_g52.scoreSpeler sc join speler s on s.spelernr = sc.spelerNr where s.gebruikersNaam = '%s'", naam));
                ResultSet rs = query.executeQuery()) {

            while (rs.next()) {
                int score  = rs.getInt("score");
                scoreSpeler.add(score);
            }
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }

        return scoreSpeler;
    }
    
    public void slaScoreOp(int score, String naam) {
         try (Connection conn = DriverManager.getConnection(Connectie.JDBC_URL);
                 PreparedStatement query = conn.prepareStatement(String.format("SELECT sc.score FROM ID343589_g52.scoreSpeler sc join speler s on s.spelernr = sc.spelerNr where s.gebruikersNaam = '%s'", naam));
                 ResultSet rs = query.executeQuery()) {
             int id = 0;
             while (rs.next()) {
                 id  = rs.getInt("score");
             }
             PreparedStatement update = conn.prepareStatement(UPDATE_SCORE);
             update.setInt(1, id);
             update.setInt(2, score);
             update.executeUpdate();
             
         } catch (SQLException ex) {
             throw new RuntimeException(ex);
         }
    }
    
}

我在这里做的任何愚蠢的事情真的不是它的工作原理吗?我对将数据库与我的 java 项目连接起来真的很陌生?我在方法 geefScoreSpeler() 中尝试做的事情是获取个人玩家的分数。在方法 slaScoreOp() 我试图在表中插入一个新列(也试图通过一个内连接的表来获取用户名的 ID)

标签: javamysqlmysql-connector

解决方案


嘿,我制作了一个用户管理系统,这是我的 DAO(数据库连接类),我在其中使用了准备好的语句,看看它是否有帮助。


import java.sql.Connection; 
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;

import com.ums.beans.ems.Employee;

public class EmployeeDao {
    Connection connection;
    Statement statement;

    public EmployeeDao() throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_1", "root", "apaar121");
    }

    public int saveEmployee(Employee employee) throws SQLException {        
        String query = "INSERT INTO user_1.employee ('name','dob','address','phone','email','education','designation','salary')VALUES (?,?,?,?,?,?,?,?);";
        PreparedStatement preparedStatement = connection.prepareStatement(query);
        preparedStatement.setString(1,employee.getName());
        preparedStatement.setString(2,employee.getAddress());
        preparedStatement.setString(3,employee.getDesignation());
        preparedStatement.setString(4,employee.getDob());
        preparedStatement.setString(5,employee.getEducation());
        preparedStatement.setString(6,employee.getEmail());
        preparedStatement.setString(7,employee.getPhone());
        preparedStatement.setFloat(8,employee.getSalary());
        return preparedStatement.executeUpdate();       
    }
}

推荐阅读