JDBC增刪改查

前提須在MySQL中創(chuàng)建一個(gè)名為"teach"的數(shù)據(jù)庫(kù)抑钟,且在其中創(chuàng)建一個(gè)名為"雇員"的表

CREATE DATABASE teach;
USE teach;
CREATE TABLE 雇員(
  id   INT(4)  PRIMARY KEY,
name VARCHAR(255)  NOT NULL,
work VARCHAR(255)  ,
date  DATETIME,
salary INT(11),
dname VARCHAR(255)
);
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class JDBC {
    //定義MySQL的數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
    private static final String DBDRIVER = "com.mysql.jdbc.Driver";
    //定義MySQL的數(shù)據(jù)庫(kù)的連接地址
    private static final String DBURL = "jdbc:mysql://localhost:3306/teach";
    //MySQL數(shù)據(jù)庫(kù)的連接用戶名
    private static final String DBUSER = "root";
    //MySQL數(shù)據(jù)庫(kù)的連接密碼
    private static final String DBPASS = "mysqladmin";
public static void main(String[] args) throws Exception {
        //數(shù)據(jù)庫(kù)連接
        Connection conn = null;
        //加載驅(qū)動(dòng)程序
        Class.forName(DBDRIVER);
        //使用用戶名和密碼連接數(shù)據(jù)庫(kù)
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        
        //數(shù)據(jù)庫(kù)操作
        PreparedStatement pstmt = null;
        //進(jìn)行功能判斷
        System.out.print("請(qǐng)選擇功能:I,U,D,S: ");
        Scanner in = new Scanner(System.in);
        String getapp = in.next();
        char apply = getapp.charAt(0);
        while (apply == 'I' || apply == 'D' || apply == 'S' || apply == 'U') {
           
 //插入數(shù)據(jù)庫(kù)信息
            if (apply == 'I') {
                //編寫(xiě)預(yù)處理sql
                String sql = "INSERT INTO 雇員(id,name,work,date,salary,dname) VALUES(?,?,?,?,?,?)";
                //實(shí)例化prepareStatement對(duì)象
                pstmt = conn.prepareStatement(sql);
                //判斷多次是否多次插入
                char apply2 = 'y';
                int num = 0;
                while (apply2 == 'y' || apply2 == 'Y') {
                    //依次輸入需插入的列表項(xiàng)
                    num++;
                    System.out.println("請(qǐng)輸入第" + num + "條數(shù)據(jù): ");
                    Scanner in2 = new Scanner(System.in);
                    int id = in2.nextInt();
                    String name = in2.next();
                    String work = in2.next();
                    String str = in2.next();
                    //字符串與java.util.Date與java.sql.Date之間的轉(zhuǎn)換
                    java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd").parse(str);
                    java.sql.Date date = new java.sql.Date(temp.getTime());
                    int salary = in2.nextInt();
                    String dname = in2.next();
                    //設(shè)置預(yù)處理sql語(yǔ)句中"?"的內(nèi)容
                    pstmt.setInt(1, id);
                    pstmt.setString(2, name);
                    pstmt.setString(3, work);
                    pstmt.setDate(4, date);
                    pstmt.setInt(5, salary);
                    pstmt.setString(6, dname);
                    //加入批處理等待執(zhí)行
                    pstmt.addBatch();
                    System.out.print("第" + num + "條信息輸入完畢,是否繼續(xù):y or n拯坟?");
                    Scanner in3 = new Scanner(System.in);
                    String getapp2 = in3.next();
                    apply2 = getapp2.charAt(0);
                }
                try {
                    //批量執(zhí)行
                    int temp[] = pstmt.executeBatch();
                    //提交事務(wù)
                    conn.commit();
                } catch (Exception e) {
                    try {
                        //如果出現(xiàn)異常,則之前輸入的sql將不執(zhí)行磅叛,事務(wù)回滾
                        conn.rollback();
                    } catch (Exception ex) {
                    }
                    pstmt.close();
                }
                //結(jié)束操作
                pstmt.close();
            }
           
 //更新數(shù)據(jù)庫(kù)信息
            if (apply == 'U') {
                //結(jié)果集對(duì)象
                ResultSet rs1 = null;
                //預(yù)處理sql語(yǔ)句
                String sql = "SELECT id,name,work,date,salary,dname FROM 雇員 WHERE id=?";
                //實(shí)例化對(duì)象
                pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
                //進(jìn)行重判斷是否再次執(zhí)行更新其他行
                char apply2 = 'y';
                while (apply2 == 'y' || apply == 'Y') {
                    //輸入更新的id
                    System.out.print("請(qǐng)輸入想要更新的id: ");
                    Scanner in2 = new Scanner(System.in);
                    int id = in2.nextInt();
                    //設(shè)置"?"內(nèi)容
                    pstmt.setInt(1, id);
                    //實(shí)例化ResultSet對(duì)象
                    rs1 = pstmt.executeQuery();
                    //移動(dòng)到最后一行
                    rs1.last();
                    //進(jìn)行重判斷是否再次執(zhí)行更新其他列
                    char apply3 = 'y';
                    while (apply3 == 'y' || apply3 == 'Y') {
                        System.out.print("請(qǐng)輸入想要更新的列名稱(chēng): ");
                        Scanner in4 = new Scanner(System.in);
                        String ROW = in4.next();
                        System.out.print("請(qǐng)輸入想要更新的列的內(nèi)容: ");
                        Scanner in5 = new Scanner(System.in);
                        String text = in5.next();
                        if (ROW == "date") {
                            java.util.Date temp = new SimpleDateFormat("yyyy-MM-dd").parse(text);
                            java.sql.Date date = new java.sql.Date(temp.getTime());
                            //設(shè)置更新內(nèi)容
                            rs1.updateDate(ROW, date);
                        } else if (ROW == "salary") {
                            int inttext = Integer.parseInt(text);
                            rs1.updateInt(ROW, inttext);
                        } else {
                            rs1.updateString(ROW, text);
                        }
                        //更新數(shù)據(jù)
                        rs1.updateRow();

                        System.out.print("是否想要繼續(xù)更新該id的數(shù)據(jù)慷丽?y or n: ");
                        Scanner in7 = new Scanner(System.in);
                        String getapp2 = in7.next();
                        apply3 = getapp2.charAt(0);
                    }
                    System.out.print("是否想要繼續(xù)更新其他id的數(shù)據(jù)?y or n: ");
                    Scanner in6 = new Scanner(System.in);
                    String getapp5 = in6.next();
                    apply2 = getapp5.charAt(0);
                }
                 //關(guān)閉結(jié)果集
                rs1.close();
                pstmt.close();
            }
           
 //刪除數(shù)據(jù)庫(kù)信息
            if (apply == 'D') {
                String sql = "DELETE FROM 雇員 WHERE id=?";
                pstmt = conn.prepareStatement(sql);
                char apply2 = 'y';
                while (apply2 == 'y' || apply == 'Y') {
                    System.out.print("請(qǐng)輸入想要?jiǎng)h除的id: ");
                    Scanner in2 = new Scanner(System.in);
                    int id = in2.nextInt();
                    pstmt.setInt(1, id);
                    System.out.print("是否想要繼續(xù)刪除?y or n: ");
                    Scanner in3 = new Scanner(System.in);
                    String getapp2 = in3.next();
                    apply2 = getapp2.charAt(0);
                }
                pstmt.executeUpdate();
            }
            
//查詢(xún)數(shù)據(jù)庫(kù)
            if (apply == 'S') {
                ResultSet rs = null;
                String sql = "SELECT * FROM 雇員";
                pstmt = conn.prepareStatement(sql);
                rs = pstmt.executeQuery();
                while (rs.next()) {
                    int id = rs.getInt(1);
                    String name = rs.getString(2);
                    String work = rs.getString(3);
                    java.util.Date date = rs.getDate(4);
                    int salary = rs.getInt(5);
                    String dname = rs.getString(6);
                    System.out.print("ID: " + id + "; ");
                    System.out.print("NAME: " + name + "; ");
                    System.out.print("WORK: " + work + "; ");
                    System.out.print("DATE: " + date + "; ");
                    System.out.print("SALARY: " + salary + "; ");
                    System.out.println("DNAME: " + dname + "; ");
                }
                rs.close();
                pstmt.close();
            }
            System.out.print("是否想要選擇其他功能:I,U,D,S or N? ");
            Scanner in4 = new Scanner(System.in);
            String getapp3 = in4.next();
            apply = getapp3.charAt(0);
        }
        //數(shù)據(jù)庫(kù)關(guān)閉
        conn.close();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锡垄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子祭隔,更是在濱河造成了極大的恐慌货岭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疾渴,死亡現(xiàn)場(chǎng)離奇詭異千贯,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)搞坝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)搔谴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人桩撮,你說(shuō)我怎么就攤上這事敦第。” “怎么了距境?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵申尼,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我垫桂,道長(zhǎng)师幕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任诬滩,我火速辦了婚禮霹粥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疼鸟。我一直安慰自己后控,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布空镜。 她就那樣靜靜地躺著浩淘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪吴攒。 梳的紋絲不亂的頭發(fā)上张抄,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音洼怔,去河邊找鬼署惯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛镣隶,可吹牛的內(nèi)容都是我干的极谊。 我是一名探鬼主播诡右,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼轻猖!你這毒婦竟也來(lái)了帆吻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蜕依,失蹤者是張志新(化名)和其女友劉穎桅锄,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體样眠,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡友瘤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了檐束。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辫秧。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖被丧,靈堂內(nèi)的尸體忽然破棺而出盟戏,到底是詐尸還是另有隱情,我是刑警寧澤甥桂,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布柿究,位于F島的核電站,受9級(jí)特大地震影響黄选,放射性物質(zhì)發(fā)生泄漏蝇摸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一办陷、第九天 我趴在偏房一處隱蔽的房頂上張望貌夕。 院中可真熱鬧,春花似錦民镜、人聲如沸啡专。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)们童。三九已至,卻和暖如春鲸鹦,著一層夾襖步出監(jiān)牢的瞬間慧库,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工亥鬓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留完沪,地道東北人域庇。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓嵌戈,卻偏偏與公主長(zhǎng)得像覆积,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熟呛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361