溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java之PreparedStatement怎么用

發(fā)布時間:2021-08-12 09:24:25 來源:億速云 閱讀:239 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹Java之PreparedStatement怎么用,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

PreparedStatement介紹

  • 可以通過調(diào)用 Connection 對象的 prepareStatement(String sql) 方法獲取 PreparedStatement 對象

  • PreparedStatement 接口是 Statement 的子接口,它表示一條預(yù)編譯過的 SQL 語句

  • PreparedStatement 對象所代表的 SQL 語句中的參數(shù)用問號(?)來表示(?在SQL中表示占位符),調(diào)用 PreparedStatement 對象的 setXxx() 方法來設(shè)置這些參數(shù). setXxx() 方法有兩個參數(shù),第一個參數(shù)是要設(shè)置的 SQL 語句中的參數(shù)的索引(從 1 開始),第二個是設(shè)置的 SQL 語句中的參數(shù)的值

Java之PreparedStatement怎么用

PreparedStatement vs Statement

  • 代碼的可讀性和可維護(hù)性。

  • PreparedStatement 能最大可能提高性能:

    • DBServer會對預(yù)編譯語句提供性能優(yōu)化。因?yàn)轭A(yù)編譯語句有可能被重復(fù)調(diào)用,所以語句在被DBServer的編譯器編譯后的執(zhí)行代碼被緩存下來,那么下次調(diào)用時只要是相同的預(yù)編譯語句就不需要編譯,只要將參數(shù)直接傳入編譯過的語句執(zhí)行代碼中就會得到執(zhí)行。

    • 在statement語句中,即使是相同操作但因?yàn)閿?shù)據(jù)內(nèi)容不一樣,所以整個語句本身不能匹配,沒有緩存語句的意義.事實(shí)是沒有數(shù)據(jù)庫會對普通語句編譯后的執(zhí)行代碼緩存。這樣每執(zhí)行一次都要對傳入的語句編譯一次。

    • (語法檢查,語義檢查,翻譯成二進(jìn)制命令,緩存)

  • PreparedStatement 可以防止 SQL 注入

插入案例

PreparedStatement常用的方法:

void setObject(int parameterIndex, Object x, int targetSqlType)

Java之PreparedStatement怎么用

parameterIndex the first parameter is 1, the second is 2, …占位符參數(shù)索引是從1開始的
其余也是如此:

void setInt(int parameterIndex, int x)
void setLong(int parameterIndex, long x)
void setString(int parameterIndex, String x)
void setBlob (int parameterIndex, Blob x)
void setDate(int parameterIndex, java.sql.Date x, Calendar cal)

Java之PreparedStatement怎么用

執(zhí)行操作:

Java之PreparedStatement怎么用

package com.atmf;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

import org.junit.Test;

public class SumUP {
	@Test
	public void getConnection() {
		Connection con = null;
		PreparedStatement ps = null;
		try {
			//1,加載配置文件
			InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
			Properties pr = new Properties();
			pr.load(is);
			
			//2,讀取配置信息
			String user = pr.getProperty("user");
			String password = pr.getProperty("password");
			String url = pr.getProperty("url");
			String driverClass = pr.getProperty("driverClass");
			
			//3.加載驅(qū)動
			Class.forName(driverClass);
			
			//4,獲取連接
			con = DriverManager.getConnection(url, user,password);
			
			String sql = "insert into customers(name,birth) value(?,?)";
			//預(yù)編譯sql語句,得到PreparedStatement對象
			ps = con.prepareStatement(sql);
			
			//5,填充占位符
			ps.setString(1, "三明治");
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			Date date = sdf.parse("2020-11-02");
			ps.setDate(2, new java.sql.Date(date.getTime()));
			
			//6,執(zhí)行操作
			ps.execute();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			//7,關(guān)閉資源
			try {
				if(ps != null)
					ps.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			try {
				if(con != null)
					con.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

配置信息:jdbc.properties文件
user=root
password=123456
url=jdbc:mysql://localhost:3306/students
driverClass=com.mysql.jdbc.Driver

執(zhí)行結(jié)果:

Java之PreparedStatement怎么用

以上是“Java之PreparedStatement怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI