1. 程式人生 > 其它 >SQL基礎操作(十四)-JDBC連線優化、SQL語句測試

SQL基礎操作(十四)-JDBC連線優化、SQL語句測試

10.6 Statement物件

  JDBC中的statement物件用於向資料庫傳送SQL語句,想完成資料的增刪改查,只需要通過這個物件向資料庫傳送增刪改查語句即可。

  • Statement物件的executeUpdate方法用於向資料庫傳送增刪改查的SQL語句,executeUpdate執行完成後,將會返回一個整數,即增刪改語句導致了資料庫幾行資料發生了變化。

  • Statement物件的executeQuery方法用於向資料庫傳送查詢語句,executeUpdate方法放回代表代表查詢結果的ResultSet物件。

10.6.1 JDBC連線優化

1.在src包下新建db.properties檔案儲存driver、username、password等資訊,用於後續資源載入

driver = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true
username = root
password = 123456

注意:每條語句結束後不能有“;”

2.在src下新建包utils,在包裡面新建類JdbcUtils,用於載入db.properties檔案資源、載入驅動、獲取連線、釋放連線資源等。

package utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
* 用於載入db.properties檔案資源、載入驅動、獲取連線、釋放連線資源等
*/
public class JdbcUtils {
//屬性資訊
private static String driver = null;
private static String url = null;
private static String username = null;
private static String password = null;

static {
try{
//載入資源
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("db.properties");

//獲取資源
Properties properties = new Properties();
properties.load(in);

//獲取詳細資訊
driver = properties.getProperty("driver");
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");

//1.驅動只用載入一次
Class.forName(driver);

} catch(IOException | ClassNotFoundException e){
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}

/**
* 獲取連線
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,username,password);
}

/**
* 釋放連線資源
* @param connection
* @param statement
* @param resultSet
*/
public static void release(Connection connection, Statement statement, ResultSet resultSet){
//關係的順序依次為resultSet、statement、connection
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
} catch(Exception e){
e.printStackTrace();
}
}
}
}

檔案層級如下:

10.6.2 測試sql語句在Java中的實現

(1)插入操作:使用executeUpdate(String sql)方法完成資料新增操作

package com.study.lesson;

import utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* 測試insert
*/
public class JdbcDemo02 {
public static void main(String[] args) {
//屬性資訊
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//連線驅動,獲得資料庫
connection = JdbcUtils.getConnection();

//建立執行SQL語句的物件
statement = connection.createStatement();

//SQL插入語句
String sql ="INSERT INTO `users`(`id`,`name`,`password`,`email`,`birthday`)" +
"VALUES(4,'zhaoliu','123456','[email protected]','2019-02-03')";

//執行SQL語句,返回程式碼執行後受影響的行數
int i = statement.executeUpdate(sql);
if(i>0){
System.out.println("插入成功!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
} finally {
//釋放連線資源
JdbcUtils.release(connection,statement,resultSet);
}

}
}

輸出結果:在SQLyog中可檢視對應變化

插入成功!

(2)刪除操作:使用executeUpdate(String sql)方法完成資料刪除操作

package com.study.lesson;

import utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* 測試delete
*/
public class JdbcDemo03 {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = JdbcUtils.getConnection();
statement = connection.createStatement();
String sql ="DELETE FROM `users` WHERE `id` = 4;";
int i = statement.executeUpdate(sql);
if(i>0){
System.out.println("刪除成功!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
} finally {
JdbcUtils.release(connection,statement,resultSet);
}
}
}

輸出結果:在SQLyog中可檢視對應變化

刪除成功!

(3)更新操作:使用executeUpdate(String sql)方法完成資料更新操作

package com.study.lesson;

import utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* 測試update
*/
public class JdbcDemo04 {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = JdbcUtils.getConnection();
statement = connection.createStatement();
String sql ="UPDATE `users` SET `password`='111111' WHERE `id`=1;";
int i = statement.executeUpdate(sql);
if(i>0){
System.out.println("更新成功!");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
} finally {
JdbcUtils.release(connection,statement,resultSet);
}
}
}

輸出結果:在SQLyog中可檢視對應變化

更新成功!

(4)查詢操作:使用executeUpdate(String sql)方法完成資料查詢操作

package com.study.lesson;

import utils.JdbcUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* 測試select
*/
public class JdbcDemo05 {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
connection = JdbcUtils.getConnection();
statement = connection.createStatement();
String sql ="SELECT * FROM `users` WHERE `id`=1;";
resultSet = statement.executeQuery(sql);
while (resultSet.next()){
System.out.println(resultSet.getString("name"));
}
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
} finally {
JdbcUtils.release(connection,statement,resultSet);
}
}
}

輸出結果:

zhangsan