当前位置:网站首页>JDBC details
JDBC details
2022-07-06 19:20:00 【Gentle ~】
Recommended reading :Druid Database connection pool
List of articles
Quick start
Java The process of operating the database
1. To write Java Code ;
2.Java Code will SQL Send to MySQL Server side ;
3.MySQL The server receives SQL Statement and execute the SQL sentence ;
4. take SQL The result of statement execution is returned to Java Code ;
JDBC Specific implementation process
1. Create a project , Import driver jar package ;
2. Registration drive :Class.forName("com.mysql.jdbc.Driver");
3. Get the connection : Connection conn = DriverManager.getConnection(url, username, password);
Java The code needs to be sent SQL to MySQL Server side , You need to establish a connection first ;
4. Definition SQL sentence :String sql = “update…” ;
;
5. Access to perform SQL object : perform SQL Sentence needs SQL Perform object , And the execution object is Statement object ,Statement stmt = conn.createStatement()
;
6. perform SQL:stmt.executeUpdate(sql);
7. Processing return results ;
8. Release resources ;
API Detailed explanation
DriverManager Get the connection
Registration drive
DriverManager( Driver management ) effect : Registration drive ;
stay Java In the document static void registerDriver(Driver driver)
Method is used to register drivers .
Inquire about MySQL Provided Driver class , You can see that this method is implemented in static code blocks . The code is as follows :
In the static code block in this class DriverManager
Object's registerDriver()
Method to register the driver , Then we just need to load Driver
class , The static code block will execute . and Class.forName("com.mysql.jdbc.Driver");
It can be loaded Driver class .
So before connecting to the database , We just need to execute the following code .
Class.forName("com.mysql.jdbc.Driver");
Be careful
MySQL 5 Later driver package , You can omit the steps of registering the driver , It will automatically load jar In bag META-INF/services/java.sql.Driver
Driver class in file .
Get database connection
static Connection getConnection(String url, String user, String password)
Parameter description
url: Connection path
grammar :jdbc:mysql://ip Address ( domain name ): Port number / Database name ? Parameter key value pair 1& Parameter key value pair 2…
Example :jdbc:mysql://127.0.0.1:3306/db1
* If the connection is local mysql The server , also mysql The default port for the service is 3306, be url I could just write it as :jdbc:mysql:/// Database name ? Parameter key value pair
* To configure useSSL=false Parameters , Disable secure connection mode , Resolve warning tips
user: user name
poassword : password
Code example
public class connect {
public static void main(String[] args) throws Exception {
// MySQL 5 Later driver package , You can omit the steps of registering the driver
// Class.forName("com.mysql.jdbc.Driver");
String url="jdbc:mysql://127.0.0.1:3306/sd?useSSL=false";
String user="root";
String password="root";
try {
Connection conn= DriverManager.getConnection(url,user,password);
System.out.println(" Successful connection !");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
Connection Get objects
Access to perform SQL The object of
1. Common execution SQL object
Statement createStatement()
2. precompile SQL Implementation SQL object : prevent SQL Inject
PreparedStatement prepareStatement(sql)
This method is commonly used , Can prevent SQL Inject , It will be explained in detail later in this article .
3. The object that executes the stored procedure
CallableStatement prepareCall(sql)
Obtained in this way CallableStatement
Execution objects are used to execute stored procedures , But stored procedures are MySQL It's not often used in English .
Code example
public class connect {
public static void main(String[] args) throws Exception {
// MySQL 5 Later driver package , You can omit the steps of registering the driver
// Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/sd?useSSL=false";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
String sql="update course set cname='C++' where cno=1";
Statement stmt=conn.createStatement();
int count=stmt.executeUpdate(sql);
System.out.println(count);
}
}
Business management
Open transaction : BEGIN; perhaps START TRANSACTION;
Commit transaction : COMMIT;
Roll back the transaction :ROLLBACK;
MySQL The default is to automatically commit transactions
Open transaction
void setAutoCommit(boolean autoCommit)
Participate in autoCommit Indicates whether the transaction is automatically committed ,true Represents an automatic commit transaction ,false Indicates that the transaction is committed manually . To start a transaction, you need to set this parameter to false.
Commit transaction
void commit()
Roll back the transaction
void rollback()
Code example
public class connect {
public static void main(String[] args) throws Exception {
// MySQL 5 Later driver package , You can omit the steps of registering the driver
// Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/sd?useSSL=false";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
String sql1="update course set cname='Java' where cno=1";
String sql2="update course set cname='Java' where cno=2";
Statement stmt=conn.createStatement();
try {
int count1=stmt.executeUpdate(sql1);
System.out.println(count1);
int i=1/0; // Man made anomalies , To observe the return roll operation
int count2=stmt.executeUpdate(sql2);
System.out.println(count2);
// If there is no abnormality , Then submit all changes , Database update
conn.commit();
} catch (SQLException e) {
// If there are anomalies , Then undo all previous operations (sql1 Update operation for )
conn.rollback();
}
}
}
Statement Execute statement
Statement Object is used to execute SQL sentence . And for different types of
SQL Statements use different methods .
perform DDL、DML sentence :executeUpdate
int executeUpdate(String sql)
perform DQL sentence :executeQuery
ResultSet executeQuery(String sql)
This method involves ResultSet object , It will be explained in detail later in this article .
Code example
public class connect {
public static void main(String[] args) throws Exception {
// MySQL 5 Later driver package , You can omit the steps of registering the driver
// Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/sd?useSSL=false";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
String sql1 = "update st set age=15 where name='Tom'";
String sql2 = "select * from st";
Statement stmt = conn.createStatement();
// perform DDL、DML sentence
int c = stmt.executeUpdate(sql1);
System.out.println(c);
System.out.println("------------------");
// perform DQL sentence : Inquire about
ResultSet rs = stmt.executeQuery(sql2);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + " " + name + " " + age);
}
}
}
Running results
ResultSet Processing return results
summary
ResultSet
Encapsulates the SQL The result of the query statement , Yes DQL Statement will return the object .
ResultSet executeQuery(String sql)
ResultSet
Object provides methods to manipulate query result data , as follows :
Method | explain |
---|---|
boolean next() | Move the cursor down one line and judge whether the new line is valid ,true It works 、false Invalid |
get data Xxx getXxx( Parameters );
Xxx
: The data type to query , Such as getInt( Parameters )
; Parameters
:
If you query with the name of the column, it is passed to String
type , Such as getString("name");
If you use the index of the column to query , Pass on int
type , The index of the first column of the table is 1, Such as getString(1);
Code example
public class connect {
public static void main(String[] args) throws Exception {
// MySQL 5 Later driver package , You can omit the steps of registering the driver
// Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://127.0.0.1:3306/sd?useSSL=false";
String user = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, user, password);
String sql = "select * from st";
Statement stmt = conn.createStatement();
System.out.println("--------- Query with the name of the column ----------");
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
int age = rs.getInt("age");
System.out.println(id + " " + name + " " + age);
}
System.out.println("--------- Use the index of the column to query ----------");
ResultSet rs1 = stmt.executeQuery(sql);
while (rs1.next()) {
int id = rs1.getInt(1);
String name = rs1.getString(2);
int age = rs1.getInt(3);
System.out.println(id + " " + name + " " + age);
}
}
}
PreparedStatement Anti Injection
PreparedStatement effect : precompile SQL Statement and execute , The prevention of SQL Injection problem . It is achieved by escaping special characters .
obtain PreparedStatement object
PreparedStatement prepareStatement(String sql)
// SQL Parameter value in statement , Use ? Placeholder replacement
String sql = "select * from user where username = ? and password = ?";
// adopt Connection Object acquisition , And pass in the corresponding sql sentence
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"user");
pstmt.setInt(2,123456);
Set the parameter value
PreparedStatement object :setXxx( Parameters , value ): to ? assignment
Xxx: data type ; Such as setInt(1,10);
Parameters :?
Location number of , from 1 Start ;
** value :** The value assigned to the parameter
perform SQL sentence
call executeUpdate() and executeQuery()
These two methods do not need to be passed SQL sentence , Because get SQL Statement has been executed on SQL The sentence is precompiled .
public void testPreparedStatement() throws Exception {
//2. Get the connection : If the connection is local mysql And the port is the default 3306 Can simplify writing
String url = "jdbc:mysql:///db1?useSSL=false";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);
// Receive user input User name and password
String name = "zhangsan";
String pwd = "' or '1' = '1";
// Definition sql
String sql = "select * from tb_user where username = ? and password = ?";
// obtain pstmt object
PreparedStatement pstmt = conn.prepareStatement(sql);
// Set up ? Value
pstmt.setString(1,name);
pstmt.setString(2,pwd);
// perform sql
ResultSet rs = pstmt.executeQuery();
// Judge whether the login is successful
if(rs.next()){
System.out.println(" Login successful ~");
}else{
System.out.println(" Login failed ~");
}
//7. Release resources
rs.close();
pstmt.close();
conn.close();
}
边栏推荐
- GCC [7] - compilation checks the declaration of functions, and link checks the definition bugs of functions
- Characteristic colleges and universities, jointly build Netease Industrial College
- Looting iii[post sequence traversal and backtracking + dynamic planning]
- LeetCode-1279. Traffic light intersection
- 第五期个人能力认证考核通过名单公布
- Test technology stack arrangement -- self cultivation of test development engineers
- 多线程基础:线程基本概念与线程的创建
- Meilu biological IPO was terminated: the annual revenue was 385million, and Chen Lin was the actual controller
- Solution of commercial supply chain management platform for packaging industry: layout smart supply system and digitally integrate the supply chain of packaging industry
- Yutai micro rushes to the scientific innovation board: Huawei and Xiaomi fund are shareholders to raise 1.3 billion
猜你喜欢
pytorch常见损失函数
Meilu biological IPO was terminated: the annual revenue was 385million, and Chen Lin was the actual controller
If you have any problems, you can contact me. A rookie ~
When visual studio code starts, it prompts "the code installation seems to be corrupt. Please reinstall." Solution to displaying "unsupported" information in the title bar
Unlock 2 live broadcast themes in advance! Today, I will teach you how to complete software package integration Issues 29-30
深入分析,Android面试真题解析火爆全网
Interface test tool - postman
[depth first search] Ji suanke: a joke of replacement
中缀表达式转后缀表达式详细思路及代码实现
助力安全人才专业素养提升 | 个人能力认证考核第一阶段圆满结束!
随机推荐
快速幂模板求逆元,逆元的作用以及例题【第20届上海大学程序设计联赛夏季赛】排列计数
Translation D28 (with AC code POJ 26:the nearest number)
三年Android开发,2022疫情期间八家大厂的Android面试经历和真题整理
Wx applet learning notes day01
受益匪浅,安卓面试问题
时钟轮在 RPC 中的应用
C#/VB. Net to add text / image watermarks to PDF documents
An error occurs when installing MySQL: could not create or access the registry key needed for the
Unlock 2 live broadcast themes in advance! Today, I will teach you how to complete software package integration Issues 29-30
Solution of intelligent management platform for suppliers in hardware and electromechanical industry: optimize supply chain management and drive enterprise performance growth
LeetCode-1279. Traffic light intersection
Mathematical knowledge -- code implementation of Gaussian elimination (elementary line transformation to solve equations)
Black Horse - - Redis Chapter
AIRIOT物联网平台赋能集装箱行业构建【焊接工位信息监控系统】
openmv4 学习笔记1----一键下载、图像处理背景知识、LAB亮度-对比度
基于蝴蝶种类识别
AutoCAD - what is the default lineweight for centerline drawing and CAD? Can I modify it?
test about BinaryTree
谷粒商城--分布式高级篇P129~P339(完结)
Multithreading Basics: basic concepts of threads and creation of threads