從控制台輸入輸出,來進行資料庫的插入和查詢操作的小程式

来源:http://www.cnblogs.com/gode/archive/2016/09/01/5831716.html
-Advertisement-
Play Games

從控制台輸入輸出,來進行資料庫的插入和查詢操作的小程式(利用JDBC) ...


首先來看一下資料庫結構

 

然後將資料庫中插入如下數據

 

eclipse中包和Java文件

examStudent包的代碼

ExamStudent.java

package examStudent;

public class ExamStudent {
    /**
     * 流水號
     */
    private int flowId;

    /**
     * 四級、六級
     */
    private int type;

    /**
     * 身份證號碼
     */
    private int idCard;

    /**
     * 准考證號碼
     */
    private int examCard;

    /**
     * 學生姓名
     */
    private String studentName;

    /**
     * 區域
     */
    private String location;

    /**
     * 成績
     */
    private int grade;

    public int getFlowId() {
        return flowId;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public int getIdCard() {
        return idCard;
    }

    public void setIdCard(int idCard) {
        this.idCard = idCard;
    }

    public int getExamCard() {
        return examCard;
    }

    public void setExamCard(int examCard) {
        this.examCard = examCard;
    }

    public String getStudentName() {
        return studentName;
    }

    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }
}
View Code

ExamStudentDao.java

package examStudent;

import java.util.List;
import java.util.Scanner;

import org.junit.Test;

import tools.SqlTools;

public class ExamStudentDao {
    /**
     * 插入一條數據
     */
    public void update() {
        ExamStudent examStudent = new ExamStudent();
        // 從控制台輸入 Type,idCard,examCard,studentName,location,grade
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入考生的詳細信息");
        System.out.print("Type: ");
        int type = sc.nextInt();
        System.out.print("IDCard: ");
        int idCard = sc.nextInt();
        System.out.print("ExamCard: ");
        int examCard = sc.nextInt();
        System.out.print("StudentName: ");
        String studentName = sc.next();
        System.out.print("Location: ");
        String location = sc.next();
        System.out.print("Grade: ");
        int grade = sc.nextInt();
        // 將從控制台輸入的值分別寫入ExamStudent中
        examStudent.setType(type);
        examStudent.setIdCard(idCard);
        examStudent.setExamCard(examCard);
        examStudent.setStudentName(studentName);
        examStudent.setLocation(location);
        examStudent.setGrade(grade);
        // sql文
        String sql = "INSERT INTO exam_student (TYPE,ID_CARD,EXAM_CARD,STUDENT_NAME,LOCATION,GRADE) VALUES ('"
                + examStudent.getType() + "','" + examStudent.getIdCard() + "','" + examStudent.getExamCard() + "','"
                + examStudent.getStudentName() + "','" + examStudent.getLocation() + "','" + examStudent.getGrade()
                + "')";
        // 插入一條數據
        SqlTools.update(sql);
        System.out.println("插入成功");
    }

    /**
     * 根據身份證號碼進行查詢
     */
    public List findByIdCard(String idCard) {
        String sql = "SELECT * FROM EXAM_STUDENT WHERE ID_CARD=" + idCard;
        List list = SqlTools.findOne(sql);
        return list;
    }

    /**
     * 根據准考證號碼進行查詢
     */
    public List findByExamCard(String examCard) {
        String sql = "SELECT * FROM EXAM_STUDENT WHERE EXAM_CARD=" + examCard;
        List<ExamStudent> list = SqlTools.findOne(sql);
        return list;
    }
}
View Code


TestExamStudent.java

package examStudent;

import java.util.List;
import java.util.Scanner;

public class TestExamStudent {
    public static void main(String[] args) {
        ExamStudentDao esd = new ExamStudentDao();
        ExamStudent es = new ExamStudent();
        Scanner sc = new Scanner(System.in);
        System.out.println("輸入1插入,輸入2查詢");
        int temp = sc.nextInt();
        if(temp == 1){
            esd.update();
        }else if(temp == 2){
            System.out.println("進入查詢系統");
            System.out.println("請選擇您要輸入的類型:");
            System.out.println("3:准考證號");
            System.out.println("4:身份證號");
            int cardType = sc.nextInt();
            if(cardType == 3){
                System.out.println("請輸入證件號碼");
                String cardNum = sc.next();
                List list = esd.findByExamCard(cardNum);
                for (Object obj : list) {
                    System.out.println(obj);
                }
            }
            else if(cardType == 4){
                System.out.println("請輸入證件號碼");
                String cardNum = sc.next();
                List list = esd.findByIdCard(cardNum);
                if(list.isEmpty()){
                    System.out.println("查無此人");
                }else{
                    for (Object obj : list) {
                        System.out.println(obj);
                    }
                }
            }
            else{
                System.out.println("系統異常退出");
            }
        }else{
            System.out.println("系統退出");
        }
    }
}
View Code


Properties包下的properties文件

jdbcName.properties

jdbcName=mySql
View Code

mySql.properties

driver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/dic
user=root
password=123456
View Code

tools包下的Java代碼

JDBCTools.java

package tools;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * JDBC 的工具類
 */
public class JDBCTools {
    /**
     * 關閉ResultSet,Statement,Connection
     */
    public static void release(ResultSet rs, Statement statement, Connection connection) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 關閉Statement,Connection
     * 
     * @param statement
     * @param connection
     */
    public static void release(Statement statement, Connection connection) {
        if (statement != null) {
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 獲取資料庫連接的方法
     * 
     * @return
     * @throws Exception
     */
    public static Connection getConnection() {
        // 準備連接資料庫的四個字元串
        // 驅動的全類名
        String driverClass = null;
        String jdbcUrl = null;
        String user = null;
        String password = null;
        String jdbcName = null;
        // 讀取jdbcName.properties文件
        InputStream inStream = JDBCTools.class.getClassLoader().getResourceAsStream("properties/jdbcName.properties");
        Properties propertiesOfName = new Properties();
        try {
            propertiesOfName.load(inStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
        jdbcName = propertiesOfName.getProperty("jdbcName");
        // 讀取需要的properties 文件
        InputStream in = JDBCTools.class.getClassLoader().getResourceAsStream("properties/" + jdbcName + ".properties");
        Properties properties = new Properties();
        try {
            properties.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        driverClass = properties.getProperty("driver");
        jdbcUrl = properties.getProperty("jdbcUrl");
        user = properties.getProperty("user");
        password = properties.getProperty("password");
        // 載入資料庫驅動程式(註冊驅動)
        try {
            Class.forName(driverClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Connection connection = null;
        try {
            connection = DriverManager.getConnection(jdbcUrl, user, password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
}
View Code

SqlTools.java

package tools;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SqlTools {

    /**
     * 通用的更新方法:包括INSERT/UPDATE/DELETE
     * 
     * @param sql
     */
    public static void update(String sql) {
        Connection connection = null;
        Statement statement = null;
        try {
            connection = JDBCTools.getConnection();
            statement = connection.createStatement();
            statement.executeUpdate(sql);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCTools.release(statement, connection);
        }
    }

    /**
     * 通用的查詢方法:SELECT
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static List findOne(String sql) {
        Connection connection = null;
        Statement statement = null;
        ResultSet rs = null;
        try {
            // 1.獲取Connection
            connection = JDBCTools.getConnection();
            // 2.獲取Statement
            statement = connection.createStatement();
            // 4.執行查詢,得到ResultSet
            rs = statement.executeQuery(sql);
            // 5.處理ResultSet
            List list = new ArrayList();
            ResultSetMetaData metaData = rs.getMetaData();
            int columnCount = metaData.getColumnCount();
            while (rs.next()) {
                Map rowData = new HashMap();
                for (int i = 1; i < columnCount; i++) {
                    rowData.put(metaData.getColumnName(i), rs.getObject(i));
                }
                list.add(rowData);
            }
            return list;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            // 6.關閉資料庫相應的資源
            JDBCTools.release(rs, statement, connection);
        }
    }
}
View Code

註:1.記得要在lib目錄下導入mySql的包,並add

  2.入口在Test中,main方法

  3.雖然此代碼很low,但對於初學者理解還是很有幫助的,邏輯非常簡單,但是這裡會有冗餘的代碼,而且有很多地方需要更加優化,有待解決 // TODO

歡迎轉載,轉載請附此說明,謝謝。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 三觀是什麼鬼 當我們在討論「三觀一致」的時候是在討論些什麼? 我認為這個世界上本沒有「三觀」這一說法,說的人多了,也就有了「三觀」這個詞,當我們討論「三觀一致」其實並不是真的在說世界觀、價值觀、人生觀,而是再說,你們能不能玩到一起,吃到一起,睡到一起。就這麼簡單 官網下載 因為本文是基於 Windo ...
  • 1)Description: 1)Description: N! (N的階乘) 是非常大的數,計算公式為:N! = N * (N - 1) * (N - 2) * ... * 2 * 1)。現在需要知道N!有多少(十進位)位。 input:每行輸入1個正整數N。0 < N < 1000000 out ...
  • 1)名稱:memset()函數 2)別稱:char型初始化函數 3)功能: 將s所指向的某一塊記憶體中的每個位元組的內容全部設置為ch指定的ASCII值,塊的大小由第三個參數指定,這個函數通常為新申請的記憶體做初始化工作 4)用法: void *memset(void *s, char ch, unsig ...
  • Calculate the sum of two integers a and b, but you are not allowed to use the operator + and -. Example:Given a = 1 and b = 2, return 3. 個人思路:繞開+、-,利用 ...
  • 一、標識符 二、中置操作符 中置表達式,操作符位於兩個參數之間 1 to 10 1.to(10) 1 -> 10 1.->(10) 三、一元操作符 a.標識符() 1 toString 1.toString() +、-、!、~ 可以作為前置操作符,轉換成名為 unary_操作符 的方法調用 -a 和 ...
  • 表單的數據檢驗對一個程式來講非常重要,因為對於客戶端的數據不能完全信任,常規的檢驗類型有: 參數為空,根據不同的業務規定要求表單項是必填項 參數值的有效性,比如產品的價格,一定不能是負數 多個表單項組合檢驗,比如在註冊時密碼與確認密碼必須相同 參數值的數據範圍,常見的是一些狀態值,或者叫枚舉值,如果 ...
  • 一、生成文件夾。 mkdir();--新建目錄 參數:pathname:目錄的路徑。 mode:預設的 mode 是 0777,意味著最大可能的訪問權。有關 mode 的更多信息請閱讀 chmod() 頁面。 看到上面的函數了嗎?記牢。上節課沈老師留了一個作業,讀取god.json文件,生成一個最簡 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...