利用JavaFX访问MySQL数据库

1. 创建数据库表


create table Course(
courseId char(5),
subjectId char(4) not null,
courseNumber integer,
title varchar(50) not null,
numOfCredits integer,
primary key (courseId)
);

create table Student(
ssn char(9),
firstName varchar(25),
mi char(1),
lastName varchar(25),
birthDate date,
street varchar(25),
phone char(11),
zipCode char(5),
deptId char(4),
primary key (ssn)
);

create table Enrollment(
ssn char(9),
courseId char(15),
dateRegistered date,
grade char(1),
primary key (ssn, courseId),
foreign key (ssn) references Student(ssn),
foreign key (courseId) references Course(courseId)
);

 

2. 创建JavaFX项目

package application;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {
    private Statement stmt;
    private TextField tfSSN = new TextField();
    private TextField tfCourseId = new TextField();
    private Label lblStatus = new Label();// 存放查询结果

    @Override
    public void start(Stage primaryStage) {
        try {
            initializeDB();

            Button bsShowGrade = new Button("Show Grade");
            HBox hBox = new HBox(5);
            hBox.getChildren().addAll(new Label("SSN"), tfSSN, new Label("Course Id"), tfCourseId, bsShowGrade);

            VBox vBox = new VBox(10);
            vBox.getChildren().addAll(hBox, lblStatus);

            tfSSN.setPrefColumnCount(6);
            tfCourseId.setPrefColumnCount(6);
            bsShowGrade.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent arg0) {
                    // TODO Auto-generated method stub
                    String ssn = tfSSN.getText();// 获取输入的SSN
                    String courseId = tfCourseId.getText();
                    try {
                        String queryString ="select firstName, mi, lastName, title, grade from Student, Enrollment, Course" +
                                   " where Student.ssn = ‘"+ssn+"‘ and Enrollment.courseId "
                                           + "= ‘"+courseId+"‘ and Enrollment.courseId = Course.courseId"
                                           + " and Enrollment.ssn = Student.ssn";
                        String queryStrin = "select firstName, mi, lastName, grade from student, Enrollment where Student.ssn = ‘11‘ and Enrollment.ssn = Student.ssn";
                        ResultSet rSet = stmt.executeQuery(queryString);// 查询数据库,并返回查询结果

                if (rSet.next()) {// 显示查询结果
                            String firstName = rSet.getString(1);
                            String mi = rSet.getString(2);
                            String lastName = rSet.getString(3);
                            String title = rSet.getString(4);
                            String grade = rSet.getString(5);

                            lblStatus.setText(firstName + " " + mi + " " + lastName + " " + title + " " + grade);
                        } else {
                            lblStatus.setText("Not found");
                        }
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
            });

            Scene scene = new Scene(vBox, 420, 80);
            primaryStage.setTitle("FindGrade");
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

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

    private void initializeDB() {
        try {
            Class.forName("com.mysql.jdbc.Driver");

            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/dbname", "user", "password");

            stmt = conn.createStatement();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

}

运行结果:输入SSN和courseID,显示查询结果,如图。

另1:在eclipse中安装JavaFX

点击eclipse中的Help->Install New Software,在弹出的窗口中设置如下:

点击Work with框后的Add,在弹出的窗口中,设置如下:Name: ex(fx)lipse,Location:http://download.eclipse.org/efxclipse/updates-released/2.3.0/site/ ,点击OK。上述设置好后,会发现两个插件的复选框:e(fx)clipse – install 安装和e(fx)clipse – single components,选中这两个复选框,完成安装。

另2:开始程序一直报错:Not unique table/alias: ‘student‘,网上查询是因为跟MySQL关键字重名,但并没有重名的字段,最后发现是SQL语句在换行时少了一个空格,因此要注意SQL语句在换行时的空格情况。

3. 利用PreparedStatement创建参数和的SQL语句

package application;

import java.sql.*;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class FindGradeUsingPreparedStatement extends Application{

    private PreparedStatement preparedStatement;
    private Statement stmt;
    private TextField tfSSN = new TextField();
    private TextField tfCourseId = new TextField();
    private Label lblStatus = new Label();// 存放查询结果

    @Override
    public void start(Stage primaryStage) {
        try {
            Connection conn = initializeDB();

            Button bsShowGrade = new Button("Show Grade");
            HBox hBox = new HBox(5);
            hBox.getChildren().addAll(new Label("SSN"), tfSSN, new Label("Course Id"), tfCourseId, bsShowGrade);

            VBox vBox = new VBox(10);
            vBox.getChildren().addAll(hBox, lblStatus);

            tfSSN.setPrefColumnCount(6);
            tfCourseId.setPrefColumnCount(6);
            bsShowGrade.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent arg0) {
                    // TODO Auto-generated method stub
                    String ssn = tfSSN.getText();
                    String courseId = tfCourseId.getText();
                    try {
                        String queryString ="select firstName, mi, lastName, title, grade from Student, Enrollment, Course" +
                                   " where Student.ssn = ? and Enrollment.courseId "
                                           + "= ? and Enrollment.courseId = Course.courseId"
                                           + " and Enrollment.ssn = Student.ssn";//问号作为参数的占位符
                        preparedStatement = conn.prepareStatement(queryString);

                        preparedStatement.setString(1, ssn);//设置占位符处的参数值
                        preparedStatement.setString(2, courseId);
                        ResultSet rSet = preparedStatement.executeQuery();//执行查询语句

                if (rSet.next()) {// 显示查询结果
                            String firstName = rSet.getString(1);
                            String mi = rSet.getString(2);
                            String lastName = rSet.getString(3);
                            String title = rSet.getString(4);
                            String grade = rSet.getString(5);

                            lblStatus.setText(firstName + " " + mi + " " + lastName + "‘s grade on course " + title + " is " + grade);
                        } else {
                            lblStatus.setText("Not found");
                        }
                    } catch (SQLException ex) {
                        ex.printStackTrace();
                    }
                }
            });

            Scene scene = new Scene(vBox, 420, 80);
            primaryStage.setTitle("FindGrade");
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        launch(args);
    }
    private Connection initializeDB() {
        Connection conn = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");

            conn = DriverManager.getConnection("jdbc:mysql://localhost/dbname", "user", "password");
            System.out.println("Database connected");

        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return conn;
    }

}

参考资料:Java语言程序设计 进阶版

时间: 2024-10-04 02:09:45

利用JavaFX访问MySQL数据库的相关文章

关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作

PHP访问MySql数据库 <?php //造连接对象$db = new MySQLi("localhost","root","","0710_test"); //写SQL语句$sql = "select * from student";//检测连接数据库是否成功,失败返回"连接失败",并退出程序 if(mysqli_connect_error()){    die("连

利用Python访问Mysql数据库

首先要明确一点,我们在Python中需要通过第三方库才能访问Mysql. 有这样几种方式:Mysql-python(即MySQLdb).pymysql.mysql-connector.Mysql-python是用C写的,速度最快,而后两者是用纯python写的,相对来说速度慢一点.可惜的是Mysql-python只支持到python 2.7,对python 3.X都没有支持.如果你用的是python3,就用不了Mysql-python了.本文章使用的是python 3.4,用的第三方库是pymy

利用oneproxy部署mysql数据库的读写分离

实验系统:CentOS 6.6_x86_64 实验前提:防火墙和selinux都关闭 实验说明:本实验共有4台主机,IP分配如拓扑 实验软件:mariadb-10.0.20 oneproxy-rhel5-linux64-v5.6-ga 下载地址:http://pan.baidu.com/s/1jGpL2o2 实验拓扑: 注意:本实验是之前mysql-proxy实验的拓展,因此大部分环境及设定是相同的,其中一.二步这里不再重复,具体请参考:利用mysql-proxy进行mysql数据库的读写分离

利用Xtrabackup进行mysql数据库的备份

利用Xtrabackup来实现数据库的备份 Xtrabackup是有percona公司开发的一款开源备份工具,它与ibbackup这个备份工具不同的是.ibbackup是一个收费的备份工具,而且在其备份性能上,ibbackup不如Xtrabackup.ibbackup和Xtrabackup都对Innodb存储引擎支持在线物理完全备份和在线物理增量备份,对MyISAM存储引擎来说,只支持温备份而已.更对关于两者的特性比较,请参考http://www.percona.com/software/per

[JavaWeb基础] 003.JAVA访问Mysql数据库

上面两篇讲解了简单的JSP + Servlet的搭建和请求,那么后面我们肯定要用到数据交互,也就是操纵数据库的数据,包括对数字的增加,删除,修改,查询.我们就用简单的MySql来做例子 我们需要引入驱动包mysql-connector-java.jar,自行去网上下载,有很多. 下面我跟着代码看看怎么进行增删改查 1.打开数据库 // 驱动程序名 private String driver = "com.mysql.jdbc.Driver"; // URL指向要访问的数据库名scutc

Python访问MySQL数据库

#encoding: utf-8 import mysql.connector __author__ = 'Administrator' config={'host':'127.0.0.1',#默认127.0.0.1 'user':'root', 'password':'root', 'port':3306 ,#默认即为3306 'database':'test', 'charset':'utf8'#默认即为utf8 } if __name__=="__main__": print(c

mysql的安装、C++访问mysql数据库、编码设置问题

一.mysql的安装,这个相对简单,直接去官网下载mysql安装程序,就可以完成安装过程,网上有很多安装教程,这个没什么注意事项. 二.C++访问mysql,主要是用到mysql定义的头文件,内部定义了各种数据结构和函数,比如MYSQL,MYSQL_RES,MYSQL_ROW,mysql_real_connect等等一系列的结构和函数.这里要注意的就是将头文件及lib文件以及dll文件配置到当前开发环境来进行访问mysql数据库. 以最新的vs2013作为示例说一下配置过程.为了写的清晰点,在网

PHP访问MySQL数据库

第9章 PHP访问MySQL数据库 1.  PHP访问MySQL数据库服务器的流程 之前学习mysql的时候,采用的是"客户机/服务器"的体系结构 mysql>select * from a;    -------->MySQL数据库服务器 < --------- PHP访问MySQL数据库的时候,我们的PHP则充当了客户机的角色 PHP充当了客户机的角色----------->MySQL数据库服务器 <----------- 接下来我们可以通过phpin

c#访问mysql数据库

1.需求 使用c#访问mysql数据库,实现curd 2.安装和类库引用 http://www.tuicool.com/articles/rAbuee 包的下载地址在百度云盘上,也可以通过官方下载 3.数据库操作 读取 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using