3

私は UCanAccess を初めて使用し、Microsoft Office を 32 ビットから 64 ビットに、または Netbeans 8.0.2 を 64 ビットから 32 ビットに再インストールする代わりに使用しています。

小さなデータベースに接続してその結果を表示する簡単なプログラムを実行しています。ただし、 Googleで検索すると 5 件の結果しか表示されないというエラーが発生しました。

これが私のDBクラス全体です:

package highscoresproj;

import java.io.File;
import java.sql.*;

public class DB
{

    private Connection connection;
    private PreparedStatement statement;
    private ResultSet resultSet;

    public DB()
    {
        //load driver

        try
        {
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
            System.out.println("Driver successfully loaded");
        } catch (ClassNotFoundException c)
        {
            System.out.println("Unable to load driver\n" + c);
        }

        //connect to database
        try
        {
            connection = DriverManager.getConnection("jdbc:ucanaccess://"+ getDatabaseLocation("HighScores.accdb")+ ";showschema=true");
            System.out.println("Connection successful");
        } catch (SQLException e)
        {
            System.out.println("Unable to connect\n" + e);
        }
    }

    public ResultSet query(String stmt) throws SQLException
    {
        statement = connection.prepareStatement(stmt);
        resultSet = statement.executeQuery();
        return resultSet;
    }

    public void update(String update) throws SQLException
    {
        statement = connection.prepareStatement(update);
        statement.executeUpdate();
        statement.close();
    }

    public static String getDatabaseLocation(String relativePath)
    {

        File dbFile = new File(relativePath);
        String path = dbFile.getAbsolutePath();
        path = path.replaceAll("\\\\", "/");
        System.out.println("DB Full path:\t" + path);
        return path;
    }
}

そして、ボタンを押して上位スコアを表示するときに実行されるメソッドは次のとおりです。

private void btnDisplayMaxActionPerformed(java.awt.event.ActionEvent evt)                                              
{                                                  
    try
    {
        res = db.query("SELECT TOP Username, Score FROM tblUser INNER JOIN tblScores ON UserID = ID");
    } 
    catch (SQLException ex)
    {
        System.out.println("An error occured. Error Message:\n" + ex);
    }
}

プログラムを実行してボタンを押すと、次の出力が得られます。

run:
Driver successfully loaded
DB Full path:   C:/Users/Aaron/Documents/Somerset College/IT/Java Book/Excersises/P148 Ex5/HighScoresProj/HighScores.accdb
Connection successful
An error occured. Error Message:
net.ucanaccess.jdbc.UcanaccessSQLException: incompatible data type in operation: ; in LIMIT, OFFSET or FETCH
BUILD SUCCESSFUL (total time: 11 seconds)

これが非常に単純なエラーである場合はご容赦ください。具体的に言及している場所が見つかりませんでした。ありがとうございました!

4

1 に答える 1

2

SQL 構文が無効です。SELECT TOP返される行数が通知されることを期待しています。1行だけを返したい場合は、次を使用します

SELECT TOP 1 Username, ...
于 2015-04-20T21:41:29.207 に答える