在mysql中建立表格,表名稱和列的定義都使用鍵盤輸入,用戶數據也要通過鍵盤輸入。

此程序來源於《java 開發實戰經典》第17章

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Statement;
//下面是數據輸入類
class InputData {
private BufferedReader buf = null;


public InputData() {
this.buf = new BufferedReader(new InputStreamReader(System.in));
}


public String getString(String info) {//輸入字符串
String temp = null;
System.out.print(info);
try {
temp = buf.readLine();
} catch (IOException ee) {
ee.printStackTrace();
}
return temp;
}


public String getTableString(String info, String err) {//輸入列的名稱及類型
String temp = null;
boolean flag = false;
while (flag == false) {
System.out.println("類型有:INT,VARCHAR(M),FLOAT,描述有:AUTO_INCREMENT,NOT NULL,DEFAULT'男',PRIMARY KEY已經有不用.");
temp = new InputData().getString(info);
String s[] = temp.split(" ");
if (s.length > 1) {
flag = true;
} else {
System.out.println(err);
}
}
return temp;
}
//下面方法判斷輸入的字符串是否符合:(姓名 性別 年齡 語文分數 數學分數 英語分數)的格式 
public boolean infoString(String infor) {
int n = 0;
String ss[]=infor.split(" ");//如果輸入的信息空格太少會導致對象數組個數少於6,不存在的對象會導致程序異常。
String s[] = new String[6];
for(int i=0;i<6;i++) {
if(i>ss.length-1) {//如果s序號大於ss最後一個序號。
s[i]="";
}else {
s[i]=ss[i];
}
}
if ((s[1].equals("男")==false) && (s[1].equals("女")==false)) {
n++;
if (n == 1) {
System.out.print("輸入的性別");


}
}


if (s[2].matches("^\\d+$")) {
if (Integer.parseInt(s[2]) < 0 || Integer.parseInt(s[2]) > 200) {
n++;
if (n == 1) {
System.out.print("輸入的年齡");
}
System.out.print(",年齡");
}
} else {
n++;
if (n == 1) {
System.out.print("輸入的年齡");
}
System.out.print(",年齡");
}
if (s[3].matches("^\\d{1,3}.?\\d?$")) {
if (Float.parseFloat(s[3]) < 0 || Float.parseFloat(s[3]) > 100) {
n++;
if (n == 1) {
System.out.print("輸入的語文分數");
}
System.out.print(",語文分數");
}
} else {
n++;
if (n == 1) {
System.out.print("輸入的語文分數");
}
System.out.print(",語文分數");
}
if (s[4].matches("^\\d{1,3}.?\\d?$")) {
if (Float.parseFloat(s[4]) < 0 || Float.parseFloat(s[4]) > 100) {
n++;
if (n == 1) {
System.out.print("輸入的數學分數");
}
System.out.print(",數學分數");
}
} else {
n++;
if (n == 1) {
System.out.print("輸入的語文分數");
}
System.out.print(",語文分數");
}


if (s[5].matches("^\\d{1,3}.?\\d?$")) {
if (Float.parseFloat(s[5]) < 0 || Float.parseFloat(s[5]) > 100) {
n++;
if (n == 1) {
System.out.print("輸入的語文分數");
}
System.out.print(",英語分數");
}
} else {
n++;
if (n == 1) {
System.out.print("輸入的語文分數");
}
System.out.print(",英語分數");
}
if (n > 0) {
System.out.print("不正確");
return false;
} else {
return true;
}
}
}


public class AndrewK17_161 {
public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://localhost:3306/andrew?useUnicode=true&characterEncoding=utf-8&useSSL=false";
public static final String DBUSER = "root";
public static final String DBPASS = "3269";
    public static String sql2=null;
public static void main(String[] args)throws Exception {
Connection conn = null;
Class.forName(DBDRIVER);
conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
settable(conn);//創建表格
setInformation(conn,sql2);//插入信息
conn.close();
}
//創建數據庫表格方法。
public static void settable(Connection conn1)throws Exception {
Statement stmt = null;
String name = new InputData().getString("請輸入數據庫名稱:");
String idcolumn = new InputData().getTableString("請輸入id列字段名稱,類型及描述(中間以空格隔開):", "輸入錯誤,請重新輸入!");
String namecolumn = new InputData().getTableString("請輸入姓名列字段名稱,類型及描述(中間以空格隔開):", "輸入錯誤,請重新輸入!");
String sexcolumn = new InputData().getTableString("請輸入性別列字段名稱,類型及描述(中間以空格隔開):", "輸入錯誤,請重新輸入!");
String agecolumn = new InputData().getTableString("請輸入年齡列字段名稱,類型及描述(中間以空格隔開):", "輸入錯誤,請重新輸入!");
String chicolumn = new InputData().getTableString("請輸入中文列字段名稱,類型及描述(中間以空格隔開):", "輸入錯誤,請重新輸入!");
String mathcolumn = new InputData().getTableString("請輸入數學列字段名稱,類型及描述(中間以空格隔開):", "輸入錯誤,請重新輸入!");
String engcolumn = new InputData().getTableString("請輸入英語列字段名稱,類型及描述(中間以空格隔開):", "輸入錯誤,請重新輸入!");
String sql0 = "DROP TABLE IF EXISTS " + name;// sql0和sql這兩條命令爲什麼不能整在一起?
String sql = "create table " + name + "(" + idcolumn + " primary key," + namecolumn + "," + sexcolumn + ","
+ agecolumn + "," + chicolumn + "," + mathcolumn + "," + engcolumn + ")";

       String namecolumns[]=namecolumn.split(" ");
       String sexcolumns[]=sexcolumn.split(" ");
       String agecolumns[]=agecolumn.split(" ");
       String chicolumns[]=chicolumn.split(" ");
       String mathcolumns[]=mathcolumn.split(" ");
       String engcolumns[]=engcolumn.split(" ");
       sql2 = "INSERT INTO " + name + "(" + namecolumns[0] + "," + sexcolumns[0] + "," + agecolumns[0] + "," + chicolumns[0]
+ "," + mathcolumns[0] + "," + engcolumns[0] + ")VALUES(?,?,?,?,?,?)";
       System.out.println(sql2);
stmt = conn1.createStatement();
stmt.executeUpdate(sql0);
stmt.executeUpdate(sql);
stmt.close();
}
//插入信息方法。
public static void setInformation(Connection conn1, String sql)throws Exception {// 主類中的方法要static;
PreparedStatement pstmt = null;
String ss = sql;
boolean flag = false;
while (flag == false) {
String stin = new InputData()
.getString("學生信息的格式爲:姓名 性別 年齡 語文成績 數學成績 英語成績(按順序輸出,中間以空格隔開),如果輸入0,結束信息輸入並退出。\r\n請輸入學生信息:");
String s[] = stin.split(" ");
if (stin.equals("0")) {
break;
}


if (new InputData().infoString(stin) == true) {
pstmt = conn1.prepareStatement(ss);// 實例化PreparedStatement.
pstmt.setString(1, s[0]);//設置姓名
pstmt.setString(2, s[1]);//設置性別
pstmt.setInt(3, Integer.parseInt(s[2]));//設置年齡
pstmt.setFloat(4, Float.parseFloat(s[3]));//設置語文分數
pstmt.setFloat(5, Float.parseFloat(s[4]));//設置數學分數
pstmt.setFloat(6, Float.parseFloat(s[5]));//設置英語分數
pstmt.executeUpdate();


} else {
System.out.println("請重新輸入!");
}


}


}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章