Java 每当我试图从GUI访问sql数据库时,都会出现一个错误

Java 每当我试图从GUI访问sql数据库时,都会出现一个错误,java,mysql,sql,Java,Mysql,Sql,我试图写一个代码,允许用户访问pc部件sql数据库。我感觉我的查询字符串在处理程序中出现了问题,但我不确定。这是我得到的主要错误: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您有一个 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便正确使用“地址、名称、, 地址,'在第1行 包应用; 导入java.sql.DriverManager; 导入java.sql.PreparedStatement; 导入j

我试图写一个代码,允许用户访问pc部件sql数据库。我感觉我的查询字符串在处理程序中出现了问题,但我不确定。这是我得到的主要错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您有一个 SQL语法错误;检查与您的产品相对应的手册 MySQL服务器版本,以便正确使用“地址、名称、, 地址,'在第1行

包应用;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.Insets;
导入javafx.geometry.Pos;
导入javafx.stage.stage;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.CheckBox;
导入javafx.scene.control.Label;
导入javafx.scene.control.TextArea;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.VBox;
公共类主扩展应用程序{
//设置变量供以后使用
字符串查询=”;
编制报表编制报表;
TextArea tf=新TextArea();
TextField位置=新的TextField();
@凌驾
公共无效开始(阶段primaryStage){
BorderPane=新的BorderPane();
VBox复选框=新的VBox(20);
//设置复选框
复选框checkState=新复选框(“状态”);
复选框checkName=新复选框(“名称”);
复选框checkAddress=新复选框(“地址”);
复选框checkCity=新复选框(“城市”);
checkCustID=新复选框(“客户ID”);
复选框checkZip=新复选框(“zip”);
复选框。设置填充(新插图(10,10,10,10));
checkbox.getChildren().addAll(checkState、checkName、,
checkAddress、checkCity、checkCustID、checkZip);
//设置按钮
HBox executeButton=新的HBox(10);
按钮btExecute=新按钮(“执行查询”);
执行按钮设置对齐(位置中心);
setPadding(新的插入(15,15,15,15));
executeButton.getChildren().add(btExecute);
//设置位置框
HBox locationbox=新的HBox(30);
位置框。设置填充(新插图(10,10,10,10));
定位箱设置对齐(位置中心);
标签位置=新标签(“位置”);
位置.setPrefColumnCount(20);
//布景
locationbox.getChildren().addAll(位置、位置);
窗格。设置填充(新插图(10,10,10,10));
窗格。设置左侧(复选框);
窗格。机顶盒(定位盒);
窗格.setBottom(执行按钮);
窗格。设置权限(tf);
场景=新场景(窗格);
primaryStage.setTitle(“PcParts Finder”);
初级阶段。场景(场景);
primaryStage.show();
//根据选中的框更改查询字符串
EventHandler=e->{
if(checkCustID.isSelected())
query=query+“custid”;
if(checkName.isSelected())
query=query+“name”;
if(checkAddress.isSelected())
query=query+“地址”;
if(checkCity.isSelected())
查询=查询+“城市”;
if(checkState.isSelected())
query=query+“state”;
if(checkZip.isSelected())
query=query+“zip”;
};
checkCustID.setOnAction(处理程序);
checkName.setOnAction(处理程序);
checkAddress.setOnAction(处理程序);
checkCity.setOnAction(处理程序);
checkState.setOnAction(处理程序);
checkZip.setOnAction(处理程序);
btExecute.setOnAction(e->{
试一试{
setUpConnection();
}catch(ClassNotFoundException | SQLException e1){
e1.printStackTrace();
}
试一试{
显示();
}捕获(SQLException e1){
e1.printStackTrace();
}
} ) ;
}
public void setUpConnection()引发SQLException,ClassNotFoundException{
//设置与服务器的连接
Class.forName(“com.mysql.jdbc.Driver”);
java.sql.Connection=
getConnection(“jdbc:mysql://localhost/mysql“斯科特”,“老虎”);
字符串queryString=query+position.getText();
preparedStatement=connection.prepareStatement(queryString);
}
私有void display()引发SQLException{
ResultSet results=preparedStatement.executeQuery();
//创建搜索的所有条件的字符串
if(results.next()){
字符串custid=results.getString(“custid”);
字符串名称=results.getString(“名称”);
字符串地址=results.getString(“地址”);
String city=results.getString(“城市”);
字符串状态=results.getString(“状态”);
String zip=results.getString(“zip”);
String String=toString(客户ID)+toString(名称)+toString(地址)+toString(城市)+toString(州)+toString(邮编);
tf.setText(字符串);
}
}
公共静态字符串toString(字符串str){
字符串x=“”;
如果(str!=null){
返回str;
}否则
返回x;
}
公共静态void main(字符串[]args){
发射(args);
}
}

在调试时,您是否尝试打印出您的
查询
,以查看您创建了什么。我猜您的
查询
是错误的,因为在处理程序中,您在
查询
中添加了一个逗号,即
query=query+“custid”,
我更改了它,它很有帮助,但每当我单击其中一个框时,它只打印单词,而不是我试图搜索的内容。SQL是什么?
package application;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;


public class Main extends Application {


    //Set Variables for later use
    String query = " ";
    PreparedStatement preparedStatement;
    TextArea tf = new TextArea ();
    TextField position = new TextField();

    @Override
    public void start(Stage primaryStage) {
        BorderPane pane = new BorderPane();
        VBox checkBoxes = new VBox(20);
    //Set Up check Boxes    
        CheckBox checkState = new CheckBox("state");
        CheckBox checkName = new CheckBox("name");
        CheckBox checkAddress = new CheckBox("address");
        CheckBox checkCity = new CheckBox("city");
        CheckBox checkCustID = new CheckBox("customer ID");
        CheckBox checkZip = new CheckBox("zip");
        checkBoxes.setPadding(new Insets(10,10,10,10));
        checkBoxes.getChildren().addAll ( checkState ,checkName , 
        checkAddress , checkCity ,checkCustID, checkZip );

        //Set up Button     
        HBox executeButton = new HBox(10);
        Button btExecute = new Button("Execute Query");
        executeButton.setAlignment(Pos.CENTER);
        executeButton.setPadding(new Insets(15,15,15,15));
        executeButton.getChildren().add(btExecute);

        //Set up location box       
        HBox locationbox = new HBox(30);
        locationbox.setPadding(new Insets(10,10,10,10));
        locationbox.setAlignment(Pos.CENTER);
        Label location = new Label("location");
        position.setPrefColumnCount(20);
    //Set up scene      
        locationbox.getChildren().addAll(location,position);
        pane.setPadding(new Insets(10,10,10,10));
        pane.setLeft(checkBoxes);
        pane.setTop(locationbox);
        pane.setBottom(executeButton);
        pane.setRight(tf);
        Scene scene = new Scene(pane);
        primaryStage.setTitle("PcParts Finder");
        primaryStage.setScene(scene);
        primaryStage.show();


      //Change the query string depending on what box was checked       
        EventHandler<ActionEvent> handler = e -> {
            if (checkCustID.isSelected ( ) )
                query = query + "custid, ";
            if (checkName.isSelected ( ) )
                query = query + "name, ";
            if (checkAddress.isSelected ( ) )
                query = query + "address, ";
            if (checkCity.isSelected ( ) )
                query = query + "city, ";
            if (checkState.isSelected ( ) )
                query = query + "state, ";
            if (checkZip.isSelected ( ) )
                query = query + "zip, ";
        };



    checkCustID.setOnAction(handler);
    checkName.setOnAction(handler);
    checkAddress.setOnAction(handler);
    checkCity.setOnAction(handler);
    checkState.setOnAction(handler);
    checkZip.setOnAction(handler);


    btExecute.setOnAction ( e -> {
    try {
        setUpConnection() ;
    } catch (ClassNotFoundException | SQLException e1) {
        e1.printStackTrace();
    }
    try {
        display();
    } catch (SQLException e1) {

        e1.printStackTrace();
    }
    } ) ;
}

public void setUpConnection() throws SQLException, ClassNotFoundException {

    //Set up connection with the server
    Class.forName("com.mysql.jdbc.Driver");
    java.sql.Connection connection = 


 DriverManager.getConnection("jdbc:mysql://localhost/mysql","scott","tiger");
    String queryString = query + position.getText();
    preparedStatement = connection.prepareStatement(queryString);

}
private void display() throws SQLException {

    ResultSet results = preparedStatement.executeQuery();
    //make a string of all criteria that was searched   
    if (results.next()) {
        String custid = results.getString("custid");
        String name = results.getString("name");
        String address = results.getString("address");
        String city = results.getString("city");
        String state = results.getString("state");
        String zip = results.getString("zip");
        String string = toString(custid) + toString(name) + toString(address) + toString(city) + toString(state) + toString(zip);
        tf.setText(string);
    }

}


public static String toString(String str){

    String x = " ";
    if(str != null) {
        return str;
    } else 
        return x;
}


public static void main(String[] args) {
    launch(args);
}
}