java连接SQL server2012验证用户信息程序终于运行成功。特别感谢一位博主的分享(http://www.cnblogs.com/zeroingToOne/p/7944300.html)
注释掉关闭数据库资源的代码是因为运行后控制台会报错,但交互面板显示的结果还是对的。
练习总结:1. java变量在SQL语句中表示为‘“+变量名+”’(一对单引号包裹一对双引号,双引号里面有一对加号,加号包裹变量名)。java变量在SQL语句中还有另一种表达,具体点击上面的连接,查看例子。2. 多次用到PreparedStatement和ResultSet的时候不要把它们设为全局变量,否则会运行出错,我的例子因为两次用到查询语句,一开始也是在这个问题上卡了很久。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.geometry.Pos;
public class Console extends Application {
private TextField t1 = new TextField();//给用户填写用户名
private TextField t2 = new TextField();//给用户输入密码
private TextField t3 = new TextField();//输出用户信息验证结果
public static void main(String [] args){
Application.launch(args);
}
//创建一个方法连接sql server2012
private Connection initializeDB() {
Connection conn = null;
try {
String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL="jdbc:sqlserver://localhost:1433;DatabaseName=University";
String userName="<数据库的登录名>";
String userPwd="<数据库登录密码>";
Class.forName(driverName);
conn=DriverManager.getConnection(dbURL,userName,userPwd);
System.out.println("Database connected");
} catch (Exception ex) {
ex.printStackTrace();
}
return conn;
}
public void start(Stage primaryStage) {
Connection conn = initializeDB();
//设置输入框格式
t1.setAlignment(Pos.BOTTOM_CENTER);
t2.setAlignment(Pos.BOTTOM_CENTER);
t3.setAlignment(Pos.BOTTOM_CENTER);
t1.setPrefColumnCount(6);
t2.setPrefColumnCount(6);
t3.setPrefColumnCount(20);
//创建一个GridPane存放登录提示信息和输入框
GridPane gpane = new GridPane();
gpane.setAlignment(Pos.CENTER);
gpane.setHgap(5);
gpane.setVgap(5);
gpane.add(new Label("UserName:"), 0, 0);
gpane.add(new Label("Password:"), 0, 1);
gpane.add(t1, 1, 0);
gpane.add(t2, 1, 1);
Button rbn=new Button("Reset");//点击之后清除文本框所有内容
Button sbn=new Button("Submit");//点击之后验证用户登录信息是否正确,并输出结果
rbn.setOnAction(e->{
t1.setText("");
t2.setText("");
t3.setText("");
});
sbn.setOnAction(e->{
try
{
//验证过程:先根据用户输入的用户名去数据库匹配有没有该用户名,有点话根据该用户名去数据库匹配相应的密码,密码再与用户输入的密码比较,如果匹配,则在t3输出"Welcome xxx!",否则提示登录失败。
String uname=t1.getText();
String psw=t2.getText();
String sql1="select name from student where name='"+uname+"'";
PreparedStatement preparedStatement=conn.prepareStatement(sql1);
ResultSet rs=preparedStatement.executeQuery();
if(rs.next()) {
String sql2="select ID from student where name='"+uname+"'";
PreparedStatement stmt2=conn.prepareStatement(sql2);
ResultSet rs2=stmt2.executeQuery();
while(rs2.next()) {
if(rs2.getString(1).equals(psw)) {
t3.setText("Welcome "+uname+"!");
//stmt2.close();
//rs2.close();
}else {
t3.setText("Fail to log in!");
//stmt2.close();
//rs2.close();
}
}
//preparedStatement.close();
//rs.close();
}else {
t3.setText("Fail to log in!");
//preparedStatement.close();
//rs.close();
}
}
catch(Exception e1)
{
e1.printStackTrace();
System.out.print("连接失败");
}
});
//创建一个HBox存放按钮
HBox hb=new HBox();
hb.setAlignment(Pos.BOTTOM_CENTER);
hb.setSpacing(10);
hb.getChildren().addAll(rbn,sbn);
//创建一个VBox存放GridPane和HBox
VBox vb=new VBox();
vb.getChildren().addAll(gpane,t3,hb);
//创建一个舞台并把VBox放在舞台
Scene scene = new Scene(vb,300,200);
primaryStage.setTitle("LoginWindow");
primaryStage.setScene(scene);
primaryStage.show();
}
}
程序运行结果如下(截图太丑,手动捂脸):