Jadual Kandungan
数据库技术-JDBC中的PreparedStatement和Transaction
Transaction
Rumah pangkalan data tutorial mysql 数据库技术-JDBC中的PreparedStatement和Transaction

数据库技术-JDBC中的PreparedStatement和Transaction

Jun 07, 2016 pm 03:23 PM
teknologi pangkalan data

数据库技术-JDBC中的PreparedStatement和Transaction PreparedStatement 首先介绍PreparedStatement: 1、PreparedStatement是一种Statement 2、比父接口提供了更多可以让我们用的方式. prepstmt = conn.prepareStatement(INSERT INTO animal VALUES(?,?,?))

数据库技术-JDBC中的PreparedStatement和Transaction

PreparedStatement
首先介绍PreparedStatement: 1、PreparedStatement是一种Statement 2、比父接口提供了更多可以让我们用的方式. prepstmt = conn.prepareStatement("INSERT INTO animal VALUES(?,?,?)"); prepstmt.setInt(1, 1);
prepstmt.setString(2, "pig");
prepstmt.setInt(3, 10);
prepstmt.execute();
三个? 表示三个占位符,设定三个位置的值。 1表示第一个问号的值,2表示第二个问号的值,3表示第三个问号的值。
可以这样理解: 我首先准备好一条sql语句,这条语句中有三个值等待确定,接下来依次确定三个值的类型和值。
package myjdbc;

import java.sql.*;

public class PreparedJdbc {
	private static String driver = "com.mysql.jdbc.Driver";
	private static String url = "jdbc:mysql://localhost:3308/zoo";
	private static String user = "root";
	private static String password = "123";
	private static Connection conn = null;
	private static PreparedStatement prepstmt = null;
	private static ResultSet rs = null;

	public static void main(String[] args) {
		try {
			Class.forName(driver);
			//
			conn = DriverManager.getConnection(url,user,password);
			prepstmt = conn
					.prepareStatement("INSERT INTO animal VALUES(?,?,?)");
			prepstmt.setInt(1, 1);
			prepstmt.setString(2, "pig");
			prepstmt.setInt(3, 10);
			prepstmt.execute();
			System.out.println("finish!");
			
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();

		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (prepstmt != null) {
					prepstmt.close();
				}
				if (conn != null) {
					conn.close();
				}
			} catch (Exception e2) {
				// TODO: handle exception
			}
		}
	}
}
Salin selepas log masuk

MySQL: \

Transaction

先举个简单的例子,A账户转账到B账户,一般需要两条sql语句,一条update A账户上的钱,一条update B账户的钱。这两天update语句必须同时执行成功,或者同时不执行成功,不予许出现中间情况,一条成功一条不成功。

这两条语句就构成了transaction。

conn.setAutoCommit(false);//首先设置自动提交false
stmt = conn.createStatement();
stmt.addBatch("insert into animal values (51, '500', 3)");
stmt.addBatch("insert into animal values (52, '500', 4)");
stmt.addBatch("insert into animal values (53, '500', 5)");
stmt.executeBatch();//三条语句批处理
conn.commit();
conn.setAutoCommit(true);//还原默认自动提交true

设置回滚

catch (SQLException e) {
e.printStackTrace();
try {
if (conn != null) {
conn.rollback();
conn.setAutoCommit(true);
}
}

下面代码:

package myjdbc;

import java.sql.*;

public class TestTransaction {

	public static void main(String[] args) {

		Connection conn = null;
		Statement stmt = null;

		try {
			Class.forName("com.mysql.jdbc.Driver");
			conn = DriverManager.getConnection(
					"jdbc:mysql://localhost:3308/zoo", "root", "123");

			conn.setAutoCommit(false);
			stmt = conn.createStatement();
			stmt.addBatch("insert into animal values (51, '500', 3)");
			stmt.addBatch("insert into animal values (52, '500', 4)");
			stmt.addBatch("insert into animal values (53, '500', 5)");
			stmt.executeBatch();
			conn.commit();
			conn.setAutoCommit(true);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {

			e.printStackTrace();

			try {
				if (conn != null) {
					conn.rollback();
					conn.setAutoCommit(true);
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		} finally {
			try {
				if (stmt != null)
					stmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

} 
Salin selepas log masuk

Mysql:

\

Words in the end

在JDBC应用中,如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.也就是说,在任何时候都不要使用Statement.
基于以下的原因:
一.代码的可读性和可维护性.
虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次:

stmt.executeUpdate("insert into tb_name (col1,col2,col2,col4) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");

perstmt = con.prepareStatement("insert into tb_name (col1,col2,col2,col4) values (?,?,?,?)");
perstmt.setString(1,var1);
perstmt.setString(2,var2);
perstmt.setString(3,var3);
perstmt.setString(4,var4);
perstmt.executeUpdate();

二.PreparedStatement尽最大可能提高性能.
每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用.所以语句在被DB的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行.这并不是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配.那么在任何时候就可以不需要再次编译而可以直接执行.而statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配.比如:
insert into tb_name (col1,col2) values ('11','22');
insert into tb_name (col1,col2) values ('11','23');
即使是相同操作但因为数据内容不一样,所以整个个语句本身不能匹配,没有缓存语句的意义.事实是没有数据库会对普通语句编译后的执行代码缓存.

三.极大地提高了安全性.
 

Transaction 用在需要同步数据时非常重要,确保在几条批处理语句的同时执行成功。

2014.1.9

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1672
14
Tutorial PHP
1276
29
Tutorial C#
1256
24
iOS 18 menambah fungsi album 'Dipulihkan' baharu untuk mendapatkan semula foto yang hilang atau rosak iOS 18 menambah fungsi album 'Dipulihkan' baharu untuk mendapatkan semula foto yang hilang atau rosak Jul 18, 2024 am 05:48 AM

Keluaran terbaharu Apple bagi sistem iOS18, iPadOS18 dan macOS Sequoia telah menambah ciri penting pada aplikasi Photos, yang direka untuk membantu pengguna memulihkan foto dan video yang hilang atau rosak dengan mudah disebabkan pelbagai sebab. Ciri baharu ini memperkenalkan album yang dipanggil "Dipulihkan" dalam bahagian Alat pada apl Foto yang akan muncul secara automatik apabila pengguna mempunyai gambar atau video pada peranti mereka yang bukan sebahagian daripada pustaka foto mereka. Kemunculan album "Dipulihkan" menyediakan penyelesaian untuk foto dan video yang hilang akibat kerosakan pangkalan data, aplikasi kamera tidak disimpan ke pustaka foto dengan betul, atau aplikasi pihak ketiga yang menguruskan pustaka foto. Pengguna hanya memerlukan beberapa langkah mudah

Lebih daripada sekadar Gaussian 3D! Gambaran keseluruhan terkini teknik pembinaan semula 3D yang terkini Lebih daripada sekadar Gaussian 3D! Gambaran keseluruhan terkini teknik pembinaan semula 3D yang terkini Jun 02, 2024 pm 06:57 PM

Ditulis di atas & Pemahaman peribadi penulis ialah pembinaan semula 3D berasaskan imej ialah tugas mencabar yang melibatkan membuat inferens bentuk 3D objek atau pemandangan daripada set imej input. Kaedah berasaskan pembelajaran telah menarik perhatian kerana keupayaan mereka untuk menganggar secara langsung bentuk 3D. Kertas ulasan ini memfokuskan pada teknik pembinaan semula 3D yang canggih, termasuk menjana novel, pandangan ghaib. Gambaran keseluruhan perkembangan terkini dalam kaedah percikan Gaussian disediakan, termasuk jenis input, struktur model, perwakilan output dan strategi latihan. Cabaran yang tidak dapat diselesaikan dan hala tuju masa depan turut dibincangkan. Memandangkan kemajuan pesat dalam bidang ini dan banyak peluang untuk meningkatkan kaedah pembinaan semula 3D, pemeriksaan menyeluruh terhadap algoritma nampaknya penting. Oleh itu, kajian ini memberikan gambaran menyeluruh tentang kemajuan terkini dalam serakan Gaussian. (Leret ibu jari anda ke atas

Bagaimana untuk mengendalikan ralat sambungan pangkalan data dalam PHP Bagaimana untuk mengendalikan ralat sambungan pangkalan data dalam PHP Jun 05, 2024 pm 02:16 PM

Untuk mengendalikan ralat sambungan pangkalan data dalam PHP, anda boleh menggunakan langkah berikut: Gunakan mysqli_connect_errno() untuk mendapatkan kod ralat. Gunakan mysqli_connect_error() untuk mendapatkan mesej ralat. Dengan menangkap dan mengelog mesej ralat ini, isu sambungan pangkalan data boleh dikenal pasti dan diselesaikan dengan mudah, memastikan kelancaran aplikasi anda.

Tutorial terperinci tentang mewujudkan sambungan pangkalan data menggunakan MySQLi dalam PHP Tutorial terperinci tentang mewujudkan sambungan pangkalan data menggunakan MySQLi dalam PHP Jun 04, 2024 pm 01:42 PM

Cara menggunakan MySQLi untuk mewujudkan sambungan pangkalan data dalam PHP: Sertakan sambungan MySQLi (require_once) Cipta fungsi sambungan (functionconnect_to_db) Fungsi sambungan panggilan ($conn=connect_to_db()) Laksanakan pertanyaan ($result=$conn->query()) Tutup sambungan ( $conn->close())

GPT-4o revolusioner: Membentuk semula pengalaman interaksi manusia-komputer GPT-4o revolusioner: Membentuk semula pengalaman interaksi manusia-komputer Jun 07, 2024 pm 09:02 PM

Model GPT-4o yang dikeluarkan oleh OpenAI sudah pasti satu kejayaan besar, terutamanya dalam keupayaannya untuk memproses berbilang media input (teks, audio, imej) dan menjana output yang sepadan. Keupayaan ini menjadikan interaksi manusia-komputer lebih semula jadi dan intuitif, meningkatkan kepraktisan dan kebolehgunaan AI. Beberapa sorotan utama GPT-4o termasuk: kebolehskalaan tinggi, input dan output multimedia, penambahbaikan selanjutnya dalam keupayaan pemahaman bahasa semula jadi, dsb. 1. Input/output merentas media: GPT-4o+ boleh menerima sebarang kombinasi teks, audio dan imej sebagai input dan terus menjana output daripada media ini. Ini memecahkan had model AI tradisional yang hanya memproses satu jenis input, menjadikan interaksi manusia-komputer lebih fleksibel dan pelbagai. Inovasi ini membantu kuasa pembantu pintar

Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Jun 06, 2024 am 11:24 AM

Data JSON boleh disimpan ke dalam pangkalan data MySQL dengan menggunakan perpustakaan gjson atau fungsi json.Unmarshal. Pustaka gjson menyediakan kaedah kemudahan untuk menghuraikan medan JSON dan fungsi json.Unmarshal memerlukan penuding jenis sasaran kepada data JSON unmarshal. Kedua-dua kaedah memerlukan penyediaan pernyataan SQL dan melaksanakan operasi sisipan untuk mengekalkan data ke dalam pangkalan data.

Bagaimana untuk menggunakan fungsi panggil balik pangkalan data di Golang? Bagaimana untuk menggunakan fungsi panggil balik pangkalan data di Golang? Jun 03, 2024 pm 02:20 PM

Menggunakan fungsi panggil balik pangkalan data di Golang boleh mencapai: melaksanakan kod tersuai selepas operasi pangkalan data yang ditentukan selesai. Tambah tingkah laku tersuai melalui fungsi berasingan tanpa menulis kod tambahan. Fungsi panggil balik tersedia untuk operasi memasukkan, mengemas kini, memadam dan pertanyaan. Anda mesti menggunakan fungsi sql.Exec, sql.QueryRow atau sql.Query untuk menggunakan fungsi panggil balik.

Mysql: Konsep mudah untuk pembelajaran mudah Mysql: Konsep mudah untuk pembelajaran mudah Apr 10, 2025 am 09:29 AM

MySQL adalah sistem pengurusan pangkalan data sumber terbuka. 1) Buat Pangkalan Data dan Jadual: Gunakan perintah Createdatabase dan Createtable. 2) Operasi Asas: Masukkan, Kemas kini, Padam dan Pilih. 3) Operasi lanjutan: Sertai, subquery dan pemprosesan transaksi. 4) Kemahiran Debugging: Semak sintaks, jenis data dan keizinan. 5) Cadangan Pengoptimuman: Gunakan indeks, elakkan pilih* dan gunakan transaksi.

See all articles