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