[轉載] 1.1Java使用JDBC原生方式連接MySql數據庫

參考鏈接: Java數據庫連接JDBC驅動程序

前言:今天有朋友問我原生的java連接數據庫,因為框架的使用,如果基礎不牢固的人,是很容易遺忘原生的連接方式。今天正好趁此做一下回顧:?

? ?這里只考慮原生方式,框架就不在這里細說。? ?一、先大體搞清楚連接時,常用元素都是什么作用:? ?在MySQL的官方文檔中,這樣解釋說到:?

?java.sql.Driver 它在MySQL Connector / J 中實現的類的名稱 是 com.mysql.jdbc.Driver,也就是驅動程序。你可以把它理解為發動機,沒了它,其他都沒扯。? URL 有了發動機之后,你要開始利用它的力量,也就是為它指明前進的方向,而URL就是它的方向。 值得一提的是,目前連接URL的通用格式是這樣的:??

? ? protocol//[hosts][/database][?properties]

? ??

? ? protocol:一種連接協議,約定的規則。

? ? hosts:主機名,通常后跟端口號,例如當前主機默認就是localhost:3306,當然也可以多主機連接,這里暫時不表。

? ? database:數據庫嘛

?

其實應用測試時也就是這樣的:?

? ? jdbc:mysql://localhost:3306/test

?

username 數據庫連接的用戶名 passowrd 連接密碼Connection 與數據庫建立連接關系,通常為 DriverManager.getConnection(url, username, password)。這里可以很明顯的感覺出來,每個元素所產生的作用。Statement / PreparedStatement ,需要特別注意的是,我們提倡使用后者,也就是預編譯語句。 PreparedStatement好處: 簡化Statement中的操作 提高執行語句的性能 可讀性和可維護性更好 在代碼示例中,語法會詳細體現。有了PreparedStatement語句之后,我們可以采用以下語句進行執行: executeQuery(String) 查詢 executeUpdate(String SQL) 更新數據 execute(String SQL) 如果你不知道是查詢還是修改,可以使用這個語句?

二、示例代碼及注釋 準備: 首先要導入mysql-connector-java 的jar包 其次,在數據庫中準備如下格式的表:? 之后寫基本的連接代碼 為了實現代碼的重用,我對兩個基本方法添加和查詢進行封裝: 這是接口:(User類可自行寫入)?

public interface UserDao {

? ? public void add(User user);

? ? public User findByUsername(String username);

}

?

下面是實現類:?

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import cn.bang.user.domain.User;

?

public class JdbcUserDao implements UserDao {

?

? ? @Override

? ? public void add(User form) {

? ? ? ? String driverClassName = "com.mysql.jdbc.Driver";? ? //啟動驅動

? ? ? ? String url = "jdbc:mysql://localhost:3306/test";? ? //設置連接路徑

? ? ? ? String username = "root";? ? //數據庫用戶名

? ? ? ? String password = "123";? ? //數據庫連接密碼

? ? ? ? Connection con = null;? ? ? ? //連接

? ? ? ? PreparedStatement pstmt = null;? ? //使用預編譯語句

? ? ? ? ResultSet rs = null;? ? //獲取的結果集

? ? ? ? try {

? ? ? ? ? ? Class.forName(driverClassName); //執行驅動

? ? ? ? ? ? con = DriverManager.getConnection(url, username, password); //獲取連接

? ??????????

? ??????????

? ? ? ? ? ? String sql = "INSERT INTO USER VALUES(?,?,?,?)"; //設置的預編譯語句格式

? ? ? ? ? ? pstmt = con.prepareStatement(sql);

? ? ? ? ? ? pstmt.setString(1, form.getUsername());

? ? ? ? ? ? pstmt.setString(2, form.getPassword());

? ? ? ? ? ? pstmt.setInt(3, form.getAge());

? ? ? ? ? ? pstmt.setString(4, form.getGender());

? ? ? ? ? ? pstmt.executeUpdate();

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? throw new RuntimeException(e);

? ? ? ? }finally {

? ? ? ? ? ? //關閉資源,倒關

? ? ? ? ? ? try {

? ? ? ? ? ? if(rs != null) rs.close();

? ? ? ? ? ? if(pstmt != null) pstmt.close();

? ? ? ? ? ? if(con != null) con.close();? //必須要關

? ? ? ? ? ? } catch (Exception e) {

? ? ? ? ? ? }

? ? ? ? }

? ??????

?

? ? }

?

? ? @Override

? ? public User findByUsername(String username) {

? ? ? ? String driverClassName = "com.mysql.jdbc.Driver";

? ? ? ? String url = "jdbc:mysql://localhost:3306/test";

? ? ? ? String mysqlusername = "root";

? ? ? ? String password = "123";

? ? ? ? Connection con = null;

? ? ? ? PreparedStatement pstmt = null;

? ? ? ? ResultSet rs = null;

? ? ? ? try {

? ??????????

? ? ? ? ? ? Class.forName(driverClassName);

? ? ? ? ? ? con = DriverManager.getConnection(url, mysqlusername, password);

? ??????????

? ??????????

? ? ? ? ? ? String sql = "SELECT * FROM USER WHERE username=?";

? ? ? ? ? ? pstmt = con.prepareStatement(sql);

? ? ? ? ? ? pstmt.setNString(1, username);

?

? ? ? ? ? ? rs = pstmt.executeQuery();

? ? ? ? ? ? if(rs == null) {

? ? ? ? ? ? ? ? return null;

? ? ? ? ? ? }

? ? ? ? ? ? if(rs.next()) {

? ? ? ? ? ? User user = new User();

? ? ? ? ? ? user.setUsername(rs.getString("username"));

? ? ? ? ? ? user.setPassword(rs.getString("password"));

? ? ? ? ? ? user.setAge(rs.getInt("age"));

? ? ? ? ? ? user.setGender(rs.getString("gender"));

? ??????????

? ??????????

? ? ? ? ? ? return user;

? ? ? ? } else {

? ? ? ? ? ? return null;

? ? ? ? }

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? throw new RuntimeException(e);

? ? ? ? }finally {

? ? ? ? ? ? //關閉資源,倒關

? ? ? ? ? ? try {

? ? ? ? ? ? if(rs != null) rs.close();

? ? ? ? ? ? if(pstmt != null) pstmt.close();

? ? ? ? ? ? if(con != null) con.close();? //必須要關

? ? ? ? ? ? } catch (Exception e) {

? ? ? ? ? ? }

? ? ? ? }

? ? }

}

?

開始進行測試? ?

這時候我們去數據庫中查看:? ??

其中驗證碼我簡單使用的一個類引入的。?

資料引導: MySQL官方文檔

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

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

相關文章

maven安裝及集成myeclipse

第一步:下載和安裝 1、官網下載Maven:http://maven.apache.org/download.cgi 2、解壓到一個文件夾2、設置環境變量:如:M2_HOME:D:\JAVA\apache-maven-3.0.5在path中添加;%M2_HOME%\bin;第二步:和MyEclipse集…

[轉載] Java泛型詳解:<T>和Class<T>的使用。泛型類,泛型方法的詳細使用實例

參考鏈接&#xff1a; Java中的main()函數是強制性的嗎 一、引入 1、泛型是什么 首先告訴大家ArrayList就是泛型。那ArrayList能完成哪些想不到的功能呢&#xff1f;先看看下面這段代碼&#xff1a; [java] view plain copy ArrayList<String> strList new ArrayL…

數字和數字根的總和_使用8086微處理器查找8位數字的數字總和

數字和數字根的總和Problem statement: 問題陳述&#xff1a; Write an assembly language program in 8086 microprocessor to find sum of digit of an 8 bits number using 8 bits operation. 在8086微處理器中編寫匯編語言程序&#xff0c;以使用8位運算找到8位數字的位數…

[轉載] Java筆試題集錦

參考鏈接&#xff1a; 關于Java中文件名和類名的誤解 Java筆試題集錦 1.MVC的各個部分都有那些技術來實現?如何實現? 答&#xff1a;MVC是Model&#xff0d;View&#xff0d;Controller的簡寫。"Model" 代表的是應用的業務邏輯&#xff08;通過JavaBean&#xff…

gcc -pthread_錯誤-在GCC Linux中使用C程序未定義對'pthread_create'的引用

gcc -pthread在Linux中修復對pthread_create的未定義引用 (Fixing undefined reference to pthread_create in Linux) This is a common error while compiling C program in GCC/G Linux. This error occurs when you are using pthread_create function to create threads in…

[轉載] Java面試題全集(上)

參考鏈接&#xff1a; 如何運行不同目錄中的Java類文件 2013年年底的時候&#xff0c;我看到了網上流傳的一個叫做《Java面試題大全》的東西&#xff0c;認真的閱讀了以后發現里面的很多題目是重復且沒有價值的題目&#xff0c;還有不少的參考答案也是錯誤的&#xff0c;于是我…

python重載運算符乘法_Python | 使用乘法運算符創建一個字符串的多個副本

python重載運算符乘法Given a string and we have to create its multiple copies by using multiplication operator in Python? 給定一個字符串&#xff0c;我們必須通過在Python中使用乘法運算符來創建其多個副本&#xff1f; If you want to create multiple copies of …

一次前端筆試總結

1.有一個長度未知的數組a&#xff0c;如果它的長度為0就把數字1添加到數組里面&#xff0c;否則按照先進先出的隊列規則讓第一個元素出隊。 分析&#xff1a;這道題主要是考核了數組的隊列方法和棧方法。另外&#xff0c;原題還有字數限制的&#xff0c;只有在字數小于30并且結…

Java文件類boolean setLastModified(long set_new_time)方法,包含示例

文件類boolean setLastModified(long set_new_time) (File Class boolean setLastModified(long set_new_time)) This method is available in package java.io.File.setLastModified(long set_new_time). 軟件包java.io.File.setLastModified(long set_new_time)中提供了此方法…

[轉載] Linux里面的文件目錄類指令

參考鏈接&#xff1a; 如何運行不同目錄中的Java類文件 引用&#xff1a;尚硅谷韓老師的《尚硅谷-Linux-經典升級》 日常總結 pwd 指令 &#xff08;顯示當前工作目錄的絕對路徑&#xff09; 基本語法 pwd (功能描述&#xff1a;顯示當前工作目錄的絕對路徑) …

[轉載] 微服務安全和治理

參考鏈接&#xff1a; 微服務介紹 在整體式架構中&#xff0c;由于運行應用程序的運行時環境相對隔離&#xff0c;所以治理和安全保護很簡單。微服務架構具有典型的革新特征&#xff0c;給活動的治理和應用程序的安全威脅保護帶來了更多挑戰。 微服務架構中的安全性 微服務…

SSL

今天遇到一位網友要求老蔣將他當前已經在使用的WDCP面板環境&#xff0c;給某個站點添加SSL證書&#xff0c;實現HTTPS網址訪問。在過去的幾篇文章中&#xff0c;老蔣也有分享過不少在Linux VPS中對應的WEB環境安裝SSL證書的經歷&#xff0c;其實總體來看都大同小異&#xff0c…

[轉載] Java中如何引用另一個類里的集合_Java工程師面試題整理

參考鏈接&#xff1a; 在Java中將預定義的類名用作類或變量名 花了一星期把學過的都整理一遍 盡量易懂&#xff0c;從基礎到框架 最新版大廠面經匯總出爐&#xff0c;持續更新中 匯總完了上傳網盤&#xff0c;設計到后端架構師的一切知識 如果沒更新就代表我死了 一&#xff0…

應用寶認領應用

2019獨角獸企業重金招聘Python工程師標準>>> 【Android】命令行jarsigner簽字和解決找不到證書鏈錯誤 1、簽名失敗 $jarsigner -verbose -keystore /Volumes/Study/resourcesLib/Qunero-achivements/AndroidApp/QuLordy-signed-key -signedjar ./signed_XiaomiVerif…

[轉載] Java | Java 面向對象知識小抄

參考鏈接&#xff1a; 在Java中將預定義的類名用作類或變量名 0. 前言 下面是本篇的內容提綱&#xff1a; 1. 類 Java 中類的聲明形式如下所示&#xff0c;變量的聲明和方法的定義意味著只能聲明變量、初始化、方法定義等&#xff0c;而不能在方法外進行賦值等操作。 …

bash顏色、變量、數組、相關腳本示例

下面是bash的相關內容&#xff0c;包括bash的顏色代碼、bash的四類文件、bash中變量處理方式、數組變量、shell的過程式編程語言以及部分簡單腳本例子。 一、bash的顏色顯示規則&#xff08;顏色代碼&#xff09; bash的顏色代碼&#xff0c;是ASCII編碼對于顏色進行設置。顏色…

[轉載] java程序員快速學c++

參考鏈接&#xff1a; 如何成為一名優秀的Java程序員 java程序員快速學c java程序員學cplus&#xff0c;其實大部分的語法是一樣的&#xff0c;但是對java程序員來將&#xff0c;還是有寫難點需要注意。看完這些還不能保證會寫c程序&#xff0c;不過一般的程序可以看懂&…

[轉載] Java標識符 數據類型 常量與變量

參考鏈接&#xff1a; Java標識符 Java標識符 Java對包、類、接口、方法、變量、常量&#xff08;不包括項目名&#xff09;等命名時使用的字符序列稱為標識符。 命名規范&#xff1a; 1.標識符由數字、字母、_、$組成&#xff0c;且首字母不能是數字。 2.標識符對大小…

設計模式單例

單例模式 設計原則&#xff1a;無常用場景&#xff1a;應用中有對象需要是全局的且唯一使用概率&#xff1a;99.99999%復雜度&#xff1a;低變化點&#xff1a;無選擇關鍵點&#xff1a;一個對象在應用中出現多個實例是否會引起邏輯上或者是程序上的錯誤逆鱗&#xff1a;在以為…

Squid服務日志分析

Squid服務日志分析 Apache 和 Squid 是兩種著名的代理緩存軟件&#xff0c;但Squid 較 Apache 而言是專門的代理緩存服務器軟件&#xff0c;其代理緩存的功能強大&#xff0c;支持 HTTP/1.1 協議&#xff0c;其緩存對象也較多&#xff1b;并且 Squid 的緩存管理模塊和訪問控制模…