日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java代码操作数据库(上)——JDBC(JDBC、JUnit、PreparedStatement) 练习

發(fā)布時(shí)間:2023/12/10 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java代码操作数据库(上)——JDBC(JDBC、JUnit、PreparedStatement) 练习 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

    • Ⅰ、JDBC簡(jiǎn)介
    • Ⅱ、JDBC入門
    • Ⅲ、JDBC詳解0
    • Ⅳ、單元測(cè)試(Junit)
    • Ⅵ、JDBC實(shí)現(xiàn)CRUD
    • Ⅶ、SQL注入
    • Ⅷ、PreparedStatement0
    • Ⅸ、PreparedStatement的CRUD
    • Ⅹ、JDBC的工具類的封裝
      • 一、第0版
      • 二、【第1版】
    • Ⅺ練習(xí)
      • 練習(xí)發(fā)現(xiàn)的注意

Ⅰ、JDBC簡(jiǎn)介

一、定義
Java DataBase Connectivity :Java數(shù)據(jù)庫(kù)連接技術(shù),它是一個(gè)規(guī)范,不是一個(gè)實(shí)現(xiàn)。即,通過(guò)java代碼對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作管理
sun公司提供的一套連接數(shù)據(jù)庫(kù)的規(guī)范(接口JDBC API),各個(gè)數(shù)據(jù)庫(kù)廠商就會(huì)遵守這套規(guī)范,提供一套訪問(wèn)自己公司數(shù)據(jù)庫(kù)產(chǎn)品的程序,這套程序稱為數(shù)據(jù)庫(kù)驅(qū)動(dòng)(JDBC)。即,提供一套規(guī)則(JDBC),每個(gè)數(shù)據(jù)庫(kù)公司都得遵守這套規(guī)則

CRUD:增刪改查

二、JDBC常用的接口和類

DriverManager類:驅(qū)動(dòng)管理類,用于:注冊(cè)JDBC驅(qū)動(dòng) Connection接口:連接對(duì)象,用于:與數(shù)據(jù)庫(kù)建立連接 Satement接口:SQL編譯器,用于:將SQL語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù),返回執(zhí)行結(jié)果PreparedStatement子接口 ResultSet接口:結(jié)果集對(duì)象,用于:執(zhí)行查詢操作時(shí),接收結(jié)果(將查詢結(jié)果,封裝起來(lái))

Ⅱ、JDBC入門

1、下載驅(qū)動(dòng)
什么數(shù)據(jù)庫(kù)就去什么官網(wǎng)找驅(qū)動(dòng).比如這里使用MySQL
https://dev.mysql.com/downloads/connector/j/

2、導(dǎo)入到編輯器(eclipse),即一般新建一個(gè)lib文件夾,把.jar文件放入其中

3、添加生成路徑


4、初·代碼

步驟: 1、注冊(cè)驅(qū)動(dòng)。8.0之后自動(dòng)注冊(cè),可以不寫 2、創(chuàng)建連接對(duì)象 3、創(chuàng)建SQL編譯器 4、執(zhí)行sql語(yǔ)句,并返回結(jié)果集 5、釋放資源 package com.dbc.hxh;import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement;public class Demo_jdbc_first {public static void main(String[] args) {//定義在外面,是為了,釋放資源時(shí)也能訪問(wèn)(變量的訪問(wèn)范圍問(wèn)題)Connection conn = null;Statement stm = null;ResultSet res = null;try {//1、注冊(cè)驅(qū)動(dòng)(全類名)Class.forName("com.mysql.cj.jdbc.Driver");//2、創(chuàng)建連接對(duì)象String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useUnicode=true";String user = "root";String pwd = "123456";conn = DriverManager.getConnection(url,user,pwd);//3、創(chuàng)建SQL編譯器stm = conn.createStatement();//4、執(zhí)行sql語(yǔ)句,并返回結(jié)果集String sql = "select * from emp";res = stm.executeQuery(sql);while(res.next()) {System.out.println(res.getString("ename"));}} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally {//不管前面是否出現(xiàn)異常,始終需要釋放資源,不然浪費(fèi)內(nèi)存資源try {if(res !=null)//避免空指針異常res.close();if(stm !=null)stm.close();if(conn !=null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}}

Ⅲ、JDBC詳解0

1、注冊(cè)驅(qū)動(dòng)
Class.forName(“com.mysql.cj.jdbc.Driver”);使用全類名將Driver類加載到JVM,完成該類的初始化工作

2、創(chuàng)建連接對(duì)象

String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useUnicode=true"; String user = "root"; String pwd = "123456"; conn = DriverManager.getConnection(url,user,pwd);

1)【url】

jdbc:當(dāng)前連接數(shù)據(jù)庫(kù)使用的是jdbc連接環(huán)境mysql:使用jdbc連接的是MySQL數(shù)據(jù)庫(kù)localhost:3306:MySQL服務(wù)器地址和端口號(hào)(使用默認(rèn)地址和端口號(hào)時(shí),可以省略)test:MySQL中的數(shù)據(jù)庫(kù)名?:分隔連接字符串和其他參數(shù)&:多個(gè)參數(shù)之間使用&連接serverTimezone——時(shí)區(qū)問(wèn)題serverTimezone=GMT%2B8北京時(shí)間(東八區(qū))serverTimezone=Asia/Shanghai上海時(shí)間serverTimezone=UTC世界標(biāo)準(zhǔn)時(shí)間(UTC時(shí)區(qū)),比北京晚8個(gè)小時(shí)characterEncoding=UTF-8&useUnicode=true":解決亂碼問(wèn)題

2)user:數(shù)據(jù)庫(kù)登錄名
3)pwd:數(shù)據(jù)庫(kù)登錄密碼

3、創(chuàng)建SQL編譯器
Statement stm = conn.createStatement();

4、執(zhí)行SQL語(yǔ)句并返回結(jié)果
常用兩個(gè)方法:
1)增刪改——int executeUpdate(String sql):sql是指sql語(yǔ)句,方法返回值為sql執(zhí)行后影響的行數(shù)
2)查詢——ResultSet executeQuery(String sql):返回結(jié)果集

對(duì)結(jié)果集處理常用的方法 1)boolean next():將光標(biāo)從當(dāng)前位置向下移動(dòng)一行,如果有可讀數(shù)據(jù)返回true,否則返回false2)××× get×××(int columnindex/String cloumnLabel):獲取對(duì)應(yīng)的值×××:獲取的數(shù)據(jù)是什么類型的,就寫什么類型。比如,獲取整型,int getInt(…)int columnindex:列的順序號(hào)。比如,name在第二列,就寫2String cloumnLabel:列的列名,推薦

5、釋放資源
從后往前關(guān)(先申請(qǐng)的后關(guān))

Ⅳ、單元測(cè)試(Junit)

1、簡(jiǎn)述及導(dǎo)包

JUnit(eclipse自帶)單元測(cè)試是為了能夠在一個(gè)類創(chuàng)建多個(gè)可執(zhí)行的方法,每個(gè)方法都在獨(dú)立執(zhí)行,可以將每個(gè)方法都當(dāng)作mian方法看待。使用注解@Test,一類中可以有多個(gè)@Test,但是不要將類名寫成Test,不然會(huì)沖突。

2、代碼

package com.dbc.hxh;import org.junit.Test;public class DemoJUnit {@Testpublic void print() {System.out.println("測(cè)試JUnit");}}

3、執(zhí)行

4、規(guī)范0
1)單元測(cè)試的修飾符必須是public
2)方法不能有返回值
3)方法參數(shù)必須為空
4)不要忘記添加@Test注解(注意每個(gè)方法都需加@Test)

Ⅵ、JDBC實(shí)現(xiàn)CRUD

使用單元測(cè)試(JUnit)實(shí)現(xiàn)增刪改查(CRUD)

下方代碼為增加insert

package com.dbc.hxh;import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;import org.junit.Test;public class DemoJUnit {//增加一條數(shù)據(jù)@Testpublic void insert() {Connection conn = null;Statement stm = null;try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/offcnoa?serverTimezone=GMT%2B8&characterEncoding=utf-8&useUnicode=true","root","123456");stm = conn.createStatement();int a = stm.executeUpdate("insert into emp(empno,ename)values('8080','KINGH')");System.out.println("受影響行數(shù)" + a);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();} finally {try {if(stm !=null)stm.close();if(conn !=null)conn.close();} catch (SQLException e) {e.printStackTrace();}}} }

Ⅶ、SQL注入

上方的JDBC實(shí)現(xiàn)CRUD時(shí),涉及字符串的拼接。比如:String sql = “select * from emp where ename=” + name(鍵盤輸入的值,用name變量存儲(chǔ))。那么如果此時(shí)用戶輸入 ‘1’='1’這類一個(gè)恒等的值,查詢的就是全表,比較危險(xiǎn)。這類情況稱為SQL注入。

解決方法:
1)不直接使用字符拼接
2)不使用Statement
3)使用PreparedStatement

Ⅷ、PreparedStatement0

一、解釋:
PreparedStatement位于java.sql包中的接口,是Statement的子接口,為了解決上述情況發(fā)生。PreparedStatement對(duì)象會(huì)將SQL語(yǔ)句進(jìn)行預(yù)編譯,通過(guò)?占位進(jìn)行SQL語(yǔ)句的拼接,避免將變量中的內(nèi)容當(dāng)成SQL關(guān)鍵字參與編譯,從而解決SQL注入問(wèn)題。

預(yù)編譯如何解決SQL注入的?
舉例說(shuō)明:將傳來(lái)的值 Tom or 1=1,使用單引號(hào)包起來(lái)’Tom or 1=1’,從而解決or關(guān)鍵字帶來(lái)的影響。另外,單引號(hào),使用的是轉(zhuǎn)義之后的單引號(hào)\'

二、說(shuō)明、方法0

1、將原本的Statement接口,換成子接口PreparedStatement
2、創(chuàng)建PreparedStatement對(duì)象,使用prepareStatement()傳遞sql語(yǔ)句,進(jìn)行預(yù)編譯
3、sql語(yǔ)句中,需要將用戶輸入的數(shù)據(jù)添加到sql中的,用英文狀態(tài)下的?占位(不要給?打引號(hào),不然當(dāng)作字符了)

4、使用set×××(parameterIndex,×××)方法完成?參數(shù)的賦值操作

set×××:參數(shù)類型(比如,setString) parameterIndex:第幾個(gè)問(wèn)號(hào),從1開始 ×××:給?賦值的參數(shù)值

5、因?yàn)橐呀?jīng)賦值并且預(yù)編譯了,所以使用PreparedStatement調(diào)用executeQuery方法執(zhí)行sql語(yǔ)句時(shí),不要再傳入?yún)?shù)

三、好處:

可讀性、維護(hù)性更高,雖然語(yǔ)句多了幾句
效率高(預(yù)編譯)
避免注入問(wèn)題,提高安全性

四、代碼,👇👇

Ⅸ、PreparedStatement的CRUD

查詢例舉

package com.dbc.hxh;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner;import org.junit.Test;public class DemoPrepared {@Testpublic void select() {System.out.println("請(qǐng)輸入帶查詢的人的姓名:");String name = new Scanner(System.in).nextLine();Connection conn = null;PreparedStatement prst = null;ResultSet rs = null;try {Class.forName("com.mysql.cj.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql:///offcnoa?characterEncoding=utf-8&useUnicode=true&serverTimezone=GMT%2B8", "root", "123456");prst = conn.prepareStatement("select * from emp where ename = ?");//第一個(gè)問(wèn)號(hào),參數(shù)為name變量中的值prst.setString(1, name);rs = prst.executeQuery();while(rs.next()) {//查詢符合條件的數(shù)據(jù),只取姓名,職位System.out.println(rs.getString("ename") + "," + rs.getString("job"));} } catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally{try {if(rs !=null)rs.close();if(prst !=null)prst.close();if(conn !=null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}}

Ⅹ、JDBC的工具類的封裝

一、第0版

將一些常用的、共有的內(nèi)容,封裝到一個(gè)類中

1、封裝到類中

package com.dbc.hxh;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;public class DemoSeal{//連接public static Connection connect() {Connection conn = null;try {Class.forName("com.mysql.cj.jdbc.Driver");String url = "jdbc:mysql:///offcnoa?characterEncoding=utf-8&useUnicode=true&serverTimezone=GMT%2B8";String username = "root";String password = "123456";conn = DriverManager.getConnection(url, username,password);} catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}return conn;}//關(guān)閉public static void closeAll(ResultSet rs,PreparedStatement prst,Connection conn) {try {if(rs !=null)rs.close();if(prst !=null)prst.close();if(conn !=null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}

2、使用

@Testpublic void select() {System.out.println("請(qǐng)輸入帶查詢的人的姓名:");String name = new Scanner(System.in).nextLine();Connection conn = DemoSeal.connect();PreparedStatement prst = null;ResultSet rs = null;try {prst = conn.prepareStatement("select * from emp where ename = ?");prst.setString(1, name);rs = prst.executeQuery();while(rs.next()) {//查詢復(fù)合條件的數(shù)據(jù),只取姓名,職位System.out.println(rs.getString("ename") + "," + rs.getString("job"));}} catch (SQLException e) {e.printStackTrace();} finally{DemoSeal.closeAll(rs, prst, conn);}}

二、【第1版】

使用配置文件properties

1、創(chuàng)建一個(gè)jdbc.properties配置文件

driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql:///offcnoa?characterEncoding=utf-8&useUnicode=true&serverTimezone=GMT%2B8 username=root password=123456

2、封裝(讀取配置文件,連接數(shù)據(jù)庫(kù)以及釋放資源)

package com.dbc.hxh;import java.io.FileInputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties;public class UseProperties{private static final String DRIVER;private static final String URL;private static final String USERNAME;private static final String PASSWORD;//讀取配置文件(只需要加載一次即可)static{Properties pro = new Properties();try {//相對(duì)路徑,讀取配置文件——此處放在src下面的pro.load(new FileInputStream("src/jdbc.properties"));} catch (Exception e) {// TODO: handle exception}DRIVER = pro.getProperty("driver");URL = pro.getProperty("url");USERNAME = pro.getProperty("username");PASSWORD = pro.getProperty("password");}//注冊(cè)JDBC驅(qū)動(dòng)static {try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}//創(chuàng)建連接對(duì)象connectionpublic static Connection connect0() {Connection conn = null;try {conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);} catch (SQLException e) {e.printStackTrace();}return conn;}//釋放資源(沒有結(jié)果集ResultSet 時(shí),傳個(gè)null值過(guò)來(lái)即可。重載closeAll也可)public static void colseAll0(ResultSet rs,PreparedStatement prst,Connection conn) {try {if(rs !=null)rs.close();if(prst !=null)prst.close();if(conn !=null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}

3、使用

package com.dbc.hxh;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.Scanner;import org.junit.Test;public class Demo_Test_Properties {@Testpublic void delete() {System.out.println("請(qǐng)輸入待刪除的人的名字");String name = new Scanner(System.in).nextLine();Connection conn = UseProperties.connect0();PreparedStatement prst = null;try {prst = conn.prepareStatement("delete from emp where ename=?");prst.setString(1, name);int i = prst.executeUpdate();System.out.println(i + "行受影響");} catch (SQLException e) {e.printStackTrace();} finally{UseProperties.colseAll0(null, prst, conn);}}}

Ⅺ練習(xí)

題目:

1)插入至少10條不同的學(xué)生信息到表中 2)查詢出班上所有的女生的信息,并打印到控制臺(tái) 3)查詢出班上年齡大于21歲的男同學(xué)的姓名,并打印到控制臺(tái) 4)根據(jù)學(xué)號(hào)刪除某同學(xué) 5)對(duì)某同學(xué)的信息進(jìn)行修改

步驟一:

創(chuàng)建配置文件

driver=com.mysql.cj.jdbc.Driver url=jdbc:mysql:///school?characterEncoding=utf-8&useUnicode=true&serverTimezone=GMT%2B8 user=root pwd=123456

步驟二:

將一些經(jīng)常使用,但是重復(fù)的代碼封裝,形成工具類

package com.day08.homework;import java.io.FileInputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties;public class Sael {private static final String DRIVER;private static final String URL;private static final String USER;private static final String PWD;//讀取配置文件,只執(zhí)行一次,用靜態(tài)代碼塊static {Properties pro = new Properties();try {pro.load(new FileInputStream("src/jdbc.properties"));} catch (IOException e) {e.printStackTrace();}//注意加引號(hào)DRIVER = pro.getProperty("driver");URL = pro.getProperty("url");USER = pro.getProperty("user");PWD = pro.getProperty("pwd");}//注冊(cè)JDBC,只執(zhí)行一次,用靜態(tài)代碼塊static {try {Class.forName(DRIVER);} catch (ClassNotFoundException e) {e.printStackTrace();}}//創(chuàng)建連接對(duì)象public static Connection connect() {Connection conn = null;try {conn = DriverManager.getConnection(URL,USER,PWD);} catch (SQLException e) {e.printStackTrace();}return conn;}//關(guān)閉public static void closeAll(ResultSet rs,PreparedStatement prst,Connection conn) {try {if(rs !=null)rs.close();if(prst !=null)prst.close();if(conn !=null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}

步驟三:

使用PreparedStatement進(jìn)行CRUD

package com.day08.homework;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Scanner;import org.junit.Test;public class TestProperties {//創(chuàng)建連接連接對(duì)象Connection conn = Sael.connect();//1)插入至少10條不同的學(xué)生信息到表中@Testpublic void insert() {PreparedStatement prst = null;String insertSql = "INSERT INTO student(sname,sage,ssex,semail)\r\n" + " VALUES('張三','17','男','110@qq.com'),\r\n" + " ('張三','17','男','110@qq.com'),\r\n" + " ('李四','17','女','110@qq.com'),\r\n" + " ('王五','17','男','110@qq.com'),\r\n" + " ('趙六','17','男','110@qq.com'),\r\n" + " ('田七','17','男','110@qq.com'),\r\n" + " ('徐八','17','女','120@qq.com'),\r\n" + " ('韓九','17','女','130@qq.com'),\r\n" + " ('潘十','17','女','140@qq.com'),\r\n" + " ('蔣十一','17','女','160@qq.com'),\r\n" + " ('唐十二','17','男','190@qq.com'),\r\n" + " ('蕭十三','17','男','100@qq.com')";try {prst = conn.prepareStatement(insertSql);int inserCount = prst.executeUpdate();System.out.println(inserCount + "行受影響");} catch (SQLException e) {e.printStackTrace();} finally{Sael.closeAll(null, prst, conn);}}//2)查詢出班上所有的女生的信息,并打印到控制臺(tái)@Testpublic void selectGril() {PreparedStatement prst = null;ResultSet rs = null;String selectGrilSql = "SELECT * FROM student WHERE ssex = '女'";try {prst = conn.prepareStatement(selectGrilSql);rs = prst.executeQuery();while(rs.next()) {System.out.println(rs.getString("sname") + "\t" + rs.getInt("sage") + "\t" + rs.getString("ssex") + "\t" + rs.getString("semail"));}} catch (SQLException e) {e.printStackTrace();} finally{Sael.closeAll(rs, prst, conn);}}//3)查詢出班上年齡大于21歲的男同學(xué)的姓名,并打印到控制臺(tái)@Testpublic void selectAgeGt21() {PreparedStatement prst = null;ResultSet rs = null;String selectAgeGt21Sql = "SELECT * FROM student WHERE sage >21 AND ssex = '男' ";try {prst = conn.prepareStatement(selectAgeGt21Sql);rs = prst.executeQuery();while(rs.next()) {System.out.println(rs.getInt(1) + "\t" + rs.getString("sname") + "\t" + rs.getInt("sage") + "\t" + rs.getString("ssex") + "\t" + rs.getString("semail"));}} catch (SQLException e) {e.printStackTrace();} finally{Sael.closeAll(rs, prst, conn);}}//4)根據(jù)學(xué)號(hào)刪除某同學(xué)@SuppressWarnings("resource")@Testpublic void deleteSid() {System.out.println("請(qǐng)輸入待刪除同學(xué)的學(xué)號(hào)");int sid = new Scanner(System.in).nextInt();PreparedStatement prst = null;String deleteSidSql = "DELETE FROM student WHERE sid = ?";try {prst = conn.prepareStatement(deleteSidSql);prst.setInt(1, sid);int count = prst.executeUpdate();System.out.println(count + "行受影響,刪除成功");} catch (SQLException e) {e.printStackTrace();} finally{Sael.closeAll(null, prst, conn);}}//5)對(duì)某同學(xué)的信息進(jìn)行修改(為了測(cè)試避免SQL注入的功能,畫蛇添足)@SuppressWarnings("resource")@Testpublic void updateName() {PreparedStatement prst = null;System.out.println("請(qǐng)輸入待修改信息的同學(xué)的名字");String name = new Scanner(System.in).nextLine();System.out.println("請(qǐng)輸入他(她)的年齡");int age = new Scanner(System.in).nextInt();System.out.println("請(qǐng)輸入他(她)的性別");String sex = new Scanner(System.in).nextLine();System.out.println("請(qǐng)輸入他(她)的郵箱");String email = new Scanner(System.in).nextLine();String updateNameSql = "UPDATE student SET sage = ?,ssex = ?,semail = ? WHERE sname = ? ";try {prst = conn.prepareStatement(updateNameSql);prst.setInt(1, age);prst.setString(2, sex);prst.setString(3, email);prst.setString(4, name);int count = prst.executeUpdate();System.out.println(count + "行受影響,修改成功");} catch (SQLException e) {e.printStackTrace();} finally{Sael.closeAll(null, prst, conn);}}}

練習(xí)發(fā)現(xiàn)的注意

1、配置文件中不要寫任何多余的字符(空格、分號(hào)、引號(hào)之類)
2、進(jìn)行查詢操作時(shí),才會(huì)返回結(jié)果集(釋放資源時(shí)判斷了是否為空,如果沒有使用結(jié)果集,參數(shù)給個(gè)null即可)
3、預(yù)執(zhí)行增刪改的sql語(yǔ)句的方法一樣,都是executeUpdate;查詢是executeQuery
4、釋放資源時(shí),記得倒敘(先創(chuàng)建的對(duì)象,后關(guān)閉)
5、使用JUnit時(shí),每個(gè)方法都需要加@Test,及其注意事項(xiàng)



PS:
1)目錄加0表示有需要注意的點(diǎn)
2)【】表示重點(diǎn)
3)刪除線表示已解決
4)僅學(xué)習(xí)記錄,如果有錯(cuò)誤,還望指正

Java代碼操作數(shù)據(jù)庫(kù)(下)

總結(jié)

以上是生活随笔為你收集整理的Java代码操作数据库(上)——JDBC(JDBC、JUnit、PreparedStatement) 练习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。