Java學習教程,從入門到精通,JDBC插入記錄語法及案例(104)

JDBC插入記錄語法及案例

一、JDBC插入記錄語法

在JDBC中,插入記錄主要通過執行SQL的INSERT語句來實現。其基本語法如下:

INSERT INTO 表名 (1,2, ..., 列n) VALUES (1,2, ..., 值n);
  • 表名:需要插入記錄的表的名稱。
  • 列1, 列2, …, 列n:指定要插入數據的列名。如果插入的數據包含表中所有列的值,并且順序與表中列的順序一致,那么列名可以省略。
  • 值1, 值2, …, 值n:對應于各列要插入的具體值。數據類型需要與列的數據類型相匹配。

二、案例代碼

以下是一個使用JDBC插入記錄的Java案例代碼:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class JdbcInsertExample {public static void main(String[] args) {// 數據庫連接信息String url = "jdbc:mysql://localhost:3306/testdb";  // 數據庫URL,testdb為數據庫名String username = "root";  // 數據庫用戶名String password = "123456";  // 數據庫密碼// 要插入的數據String name = "張三";int age = 25;String email = "zhangsan@example.com";// SQL插入語句String sql = "INSERT INTO users (name, age, email) VALUES (?, ?, ?)";// 加載數據庫驅動try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}// 建立數據庫連接try (Connection conn = DriverManager.getConnection(url, username, password);// 使用PreparedStatement來執行SQL語句,提高安全性和效率PreparedStatement pstmt = conn.prepareStatement(sql)) {// 設置SQL語句中的參數pstmt.setString(1, name);pstmt.setInt(2, age);pstmt.setString(3, email);// 執行插入操作int affectedRows = pstmt.executeUpdate();if (affectedRows > 0) {System.out.println("記錄插入成功!");} else {System.out.println("記錄插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}

代碼說明:

  1. 導入相關包:導入了java.sql包下的ConnectionDriverManagerPreparedStatementSQLException等類,這些是JDBC編程中常用的類。
  2. 數據庫連接信息:定義了數據庫的URL、用戶名和密碼,用于建立數據庫連接。
  3. 要插入的數據:定義了要插入的用戶信息,包括姓名、年齡和郵箱。
  4. SQL插入語句:定義了插入記錄的SQL語句,使用了占位符?來代替具體的值,這是為了使用PreparedStatement來設置參數,提高安全性和效率。
  5. 加載數據庫驅動:通過Class.forName方法加載MySQL的JDBC驅動,如果驅動加載失敗會捕獲異常并輸出錯誤信息。
  6. 建立數據庫連接:使用DriverManager.getConnection方法建立數據庫連接,并通過try-with-resources語句來自動關閉連接和PreparedStatement,避免資源泄露。
  7. 設置SQL語句中的參數:通過PreparedStatementsetXxx方法(如setStringsetInt等)來設置SQL語句中的參數,將具體的值賦給占位符。
  8. 執行插入操作:調用PreparedStatementexecuteUpdate方法來執行插入操作,該方法返回一個整數,表示受影響的行數。如果受影響的行數大于0,說明記錄插入成功,否則插入失敗,并輸出相應的提示信息。
  9. 異常處理:捕獲SQLException異常,如果數據庫操作過程中出現異常,會輸出異常信息和錯誤提示。

通過以上代碼,你可以實現將一條記錄插入到數據庫的users表中。在實際使用中,需要根據具體的數據庫環境和表結構進行相應的調整。

當然可以。以下是一些具體的不同場景下的JDBC插入記錄案例。

案例一:插入單條記錄到學生表

假設有一個學生表students,表結構如下:

字段名數據類型
idint
namevarchar
gendervarchar
scoreint

SQL表創建語句

CREATE TABLE students (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),gender VARCHAR(10),score INT
);

Java代碼

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;public class InsertStudent {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/testdb";String username = "root";String password = "123456";String sql = "INSERT INTO students (name, gender, score) VALUES (?, ?, ?)";try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}try (Connection conn = DriverManager.getConnection(url, username, password);PreparedStatement pstmt = conn.prepareStatement(sql)) {pstmt.setString(1, "李四");pstmt.setString(2, "男");pstmt.setInt(3, 85);int affectedRows = pstmt.executeUpdate();if (affectedRows > 0) {System.out.println("學生記錄插入成功!");} else {System.out.println("學生記錄插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}

案例二:批量插入多條記錄到商品表

假設有一個商品表products,表結構如下:

字段名數據類型
idint
namevarchar
pricedouble
stockint

SQL表創建語句

CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(100),price DOUBLE,stock INT
);

Java代碼

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class BatchInsertProducts {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/testdb";String username = "root";String password = "123456";String sql = "INSERT INTO products (name, price, stock) VALUES (?, ?, ?)";try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}try (Connection conn = DriverManager.getConnection(url, username, password);PreparedStatement pstmt = conn.prepareStatement(sql)) {// 批量添加數據pstmt.setString(1, "蘋果");pstmt.setDouble(2, 5.5);pstmt.setInt(3, 100);pstmt.addBatch();pstmt.setString(1, "香蕉");pstmt.setDouble(2, 3.0);pstmt.setInt(3, 150);pstmt.addBatch();pstmt.setString(1, "橙子");pstmt.setDouble(2, 4.0);pstmt.setInt(3, 80);pstmt.addBatch();// 執行批量插入int[] affectedRows = pstmt.executeBatch();if (affectedRows.length > 0) {System.out.println("商品記錄批量插入成功,共插入" + affectedRows.length + "條記錄!");} else {System.out.println("商品記錄批量插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}

案例三:插入記錄并獲取自增主鍵

假設有一個訂單表orders,表結構如下:

字段名數據類型
idint
user_idint
amountdouble
statusvarchar

SQL表創建語句

CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT,amount DOUBLE,status VARCHAR(20)
);

Java代碼

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class InsertOrderAndGetId {public static void main(String[] args) {String url = "jdbc:mysql://localhost:3306/testdb";String username = "root";String password = "123456";String sql = "INSERT INTO orders (user_id, amount, status) VALUES (?, ?, ?)";try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();System.out.println("數據庫驅動加載失敗!");return;}try (Connection conn = DriverManager.getConnection(url, username, password);PreparedStatement pstmt = conn.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS)) {pstmt.setInt(1, 1);pstmt.setDouble(2, 200.0);pstmt.setString(3, "待支付");int affectedRows = pstmt.executeUpdate();if (affectedRows > 0) {try (ResultSet rs = pstmt.getGeneratedKeys()) {if (rs.next()) {int orderId = rs.getInt(1);System.out.println("訂單記錄插入成功,生成的訂單ID為:" + orderId);}}} else {System.out.println("訂單記錄插入失敗!");}} catch (SQLException e) {e.printStackTrace();System.out.println("數據庫操作異常!");}}
}

代碼說明:

  • 獲取自增主鍵:在prepareStatement方法中傳入PreparedStatement.RETURN_GENERATED_KEYS參數,表示在執行插入操作后返回生成的主鍵。
  • 獲取生成的主鍵:通過getGeneratedKeys方法獲取一個ResultSet,從中可以獲取生成的主鍵值。
    以上三個案例分別展示了插入單條記錄、批量插入記錄以及插入記錄并獲取自增主鍵的常見場景,你可以根據實際需求進行參考和修改。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67325.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67325.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67325.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

vue事件總線(原理、優缺點)

目錄 一、原理二、使用方法三、優缺點優點缺點 四、使用注意事項具體代碼參考: 一、原理 在Vue中,事件總線(Event Bus)是一種可實現任意組件間通信的通信方式。 要實現這個功能必須滿足兩點要求: (1&#…

圖像處理之HSV顏色空間

目錄 1 RGB 的局限性 2 HSV 顏色空間 3 RGB與HSV相互轉換 4 HSV顏色模型對圖像的色相、飽和度和明度進行調節 5 演示Demo 5.1 開發環境 5.2 功能介紹 5.3 下載地址 參考 1 RGB 的局限性 RGB 是我們接觸最多的顏色空間,由三個通道表示一幅圖像,分…

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司(簡稱“深度求索”)發布的一系列人工智能模型

DeepSeek是由杭州深度求索人工智能基礎技術研究有限公司(簡稱“深度求索”)發布的一系列人工智能模型,其在知識類任務上展現出了卓越的性能。以下是對DeepSeek的詳細介紹,內容雖無法達到10000字,但會盡可能全面且深入地…

【C++高并發服務器WebServer】-9:多線程開發

本文目錄 一、線程概述1.1 線程和進程的區別1.2 線程之間共享和非共享資源1.3 NPTL 二、線程操作2.1 pthread_create2.2 pthread_exit2.3 pthread_join2.4 pthread_detach2.5 patch_cancel2.6 pthread_attr 三、實戰demo四、線程同步五、死鎖六、讀寫鎖七、生產消費者模型 一、…

14-6-1C++STL的list

(一)list容器的基本概念 list容器簡介: 1.list是一個雙向鏈表容器,可高效地進行插入刪除元素 2.list不可以隨機存取元素,所以不支持at.(pos)函數與[ ]操作符 (二)list容器頭部和尾部的操作 list對象的默…

在sortablejs的拖拽排序情況下阻止input拖拽事件

如題 問題 在vue3的elementPlus的table中,通過sortablejs添加了行拖拽功能,但是在行內會有輸入框,此時拖拽輸入框會觸發sortablejs的拖拽功能 解決 基于這個現象,我懷疑是由于拖拽事件未綁定而冒泡到后面的行上從而導致的拖拽…

21.Word:小趙-畢業論文排版?【39】

目錄 題目? NO1.2 NO3.4 NO5.6 NO7.8.9 NO10.11.12 題目 NO1.2 自己的論文當中接收老師的修改:審閱→比較→源文檔:考生文件夾:Word.docx→修訂的文檔:考生文件夾:教師修改→確定→接收→接收所有修訂將合并之…

leetcode_鏈表 876.鏈表的中間節點

876.鏈表的中間節點 給你單鏈表的頭結點 head ,請你找出并返回鏈表的中間結點。如果有兩個中間結點,則返回第二個中間結點。思路:快慢指針,創建兩個指針fast和slow,fast指針每次移動兩步,slow指針每次移動…

深度學習 DAY3:NLP發展史及早期的前饋神經網絡(ANN)及多任務學習

NLP發展史 NLP發展脈絡簡要梳理如下: 2001 - Neural language models(神經語言模型) 2008 - Multi-task learning(多任務學習) 2013 - Word embeddings(詞嵌入) 2013 - Neural networks for NL…

全面了解 Web3 AIGC 和 AI Agent 的創新先鋒 MelodAI

不管是在傳統領域還是 Crypto,AI 都是公認的最有前景的賽道。隨著數字內容需求的爆炸式增長和技術的快速迭代,Web3 AIGC(AI生成內容)和 AI Agent(人工智能代理)正成為兩大關鍵賽道。 AIGC 通過 AI 技術生成…

54.數字翻譯成字符串的可能性|Marscode AI刷題

1.題目 問題描述 小M獲得了一個任務,需要將數字翻譯成字符串。翻譯規則是:0對應"a",1對應"b",依此類推直到25對應"z"。一個數字可能有多種翻譯方法。小M需要一個程序來計算一個數字有多少種不同的…

FileReader使用

FileReader : 讀取文件內容的api,,,在前端處理上傳的文件,,比如預覽圖片 readAsDataURL(file) : 讀取為base64編碼的 data urlreadAsText() : 讀取為文本readAsArrayBuffer() : 讀取為二進制 …

RabbitMQ5-死信隊列

目錄 死信的概念 死信的來源 死信實戰 死信之TTl 死信之最大長度 死信之消息被拒 死信的概念 死信,顧名思義就是無法被消費的消息,一般來說,producer 將消息投遞到 broker 或直接到queue 里了,consumer 從 queue 取出消息進…

JavaScript系列(48)-- 3D渲染引擎實現詳解

JavaScript 3D渲染引擎實現詳解 🎮 今天,讓我們深入探討JavaScript的3D渲染引擎實現。通過WebGL和現代JavaScript技術,我們可以構建一個功能完整的3D渲染系統。 3D渲染基礎概念 🌟 💡 小知識:3D渲染引擎的…

10JavaWeb——SpringBootWeb案例01

前面我們已經講解了Web前端開發的基礎知識,也講解了Web后端開發的基礎(HTTP協議、請求響應),并且也講解了數據庫MySQL,以及通過Mybatis框架如何來完成數據庫的基本操作。 那接下來,我們就通過一個案例,來將前端開發、后…

【面試題】 Java 三年工作經驗(2025)

問題列表 為什么選擇 spring boot 框架,它與 Spring 有什么區別?spring mvc 的執行流程是什么?如何實現 spring 的 IOC 過程,會用到什么技術?spring boot 的自動化配置的原理是什么?如何理解 spring boot 中…

JAVA 接口、抽象類的關系和用處 詳細解析

接口 - Java教程 - 廖雪峰的官方網站 一個 抽象類 如果實現了一個接口,可以只選擇實現接口中的 部分方法(所有的方法都要有,可以一部分已經寫具體,另一部分繼續保留抽象),原因在于: 抽象類本身…

ResNeSt: Split-Attention Networks論文學習筆記

這張圖展示了一個名為“Split-Attention”的神經網絡結構,該結構在一個基數組(cardinal group)內進行操作。基數組通常指的是在神經網絡中處理的一組特征或通道。圖中展示了如何通過一系列操作來實現對輸入特征的注意力機制。 以下是圖中各部…

數據收集后臺服務概要設計

為了幫助大家設計一個數據指標匯總的后端應用,我將提供一個概要設計和表設計的建議。這個設計將基于常見的數據收集需求,假設你需要收集、存儲和匯總來自不同數據源的指標數據。 1. 概要設計 1.1 系統架構 數據收集層:負責從不同數據源&am…

探秘 TCP TLP:從背景到實現

回家的路上還討論了個關于 TCP TLP 的問題,閑著無事縷一縷。本文內容參考自 Tail Loss Probe (TLP): An Algorithm for Fast Recovery of Tail Losses 以及 Linux 內核源碼。 TLP,先說緣由。自 TCP 引入 Fast retrans 機制就是為了盡力避免 RTO&#xf…