Java-JDBC操作MySQL
文章目錄
- Java-JDBC操作MySQL
- 一、Java-JDBC-MySQL的關系
- 二、創建連接
- 三、登錄MySQL
- 四、操作數據庫
- 1、返回型操作
- 2、無返回型操作
- 練習題目及完整代碼
一、Java-JDBC-MySQL的關系
二、創建連接
首先在MySQL官網下載一個jar包,然后導入編譯器中,然后導入。
通過官方文檔,在MySQL8.0以后,連接的地址為com.mysql.cj.jdbc.Driver,地址需要添加代碼serverTimezone=UTC
這里創建一個DBHelper工具類,將這兩個參數設為常量便于使用。
class DBHelper {final static String className = "com.mysql.cj.jdbc.Driver";final static String mysqladdress = "jdbc:mysql://localhost:3306/java?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=TRUE";}
其中localhost為地址,3306為端口,java是數據庫名稱
三、登錄MySQL
有了指定的地址,還需要用戶和密碼才能登錄數據庫。為了安全,此處不使用root用戶,采用新開一個賬戶來進行對數據庫的操作。
create user 'java'@'localhost' identified by '123456';
grant all on java to 'java'@'localhost';
同樣定義常量存儲用戶名和密碼。
private String user, psw;
通過構造函數來對user和psw變量賦值。
DBHelper(String user, String psw) {this.user = user;this.psw = psw;}
四、操作數據庫
有了地址、用戶、密碼,就可以登錄數據庫進行操作,在此之前,需要先實例化Connection類和Statement類,并在try-catch語句中創建對數據庫的連接和數據傳遞。
Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();}catch (Exception e) {e.printStackTrace();}
連接好數據庫之后,就可以使用SQL語句對數據庫進行操作。
1、返回型操作
定義一個SQL語句在String中,實例化一個ResultSet,并使用statement傳輸SQL命令。由于select語句是有返回值的,所以使用executeQuery類型進行返回。
String sql = "select * from teacher";
ResultSet resultSet = statement.executeQuery(sql);
由于select的返回可能不止一條數據,所以使用while循環,調用resultSet中的next()函數,用于判斷是否還有數據返回。然后使用resultSet中的get函數,獲取字段內容。
while (resultSet.next()) {String tid = resultSet.getString("tid");String tname = resultSet.getString("tname");String sex = resultSet.getString("sex");int age = resultSet.getInt("age");String professional_title = resultSet.getString("professional_title");int basic_salary = resultSet.getInt("basic_salary");System.out.print("tid:" + tid + "\t");System.out.print("tname:" + tname + "\t");System.out.print("sex:" + sex + "\t");System.out.print("age:" + age + "\t");System.out.print("professional_title:" + professional_title + "\t");System.out.println("basic_salary:" + basic_salary);}
最后操作完畢,關閉對象釋放內存即可。
resultSet.close();
statement.close();
connection.close();
返回型操作完整代碼:
Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();String sql = "select * from teacher";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {String tid = resultSet.getString("tid");String tname = resultSet.getString("tname");String sex = resultSet.getString("sex");int age = resultSet.getInt("age");String professional_title = resultSet.getString("professional_title");int basic_salary = resultSet.getInt("basic_salary");System.out.print("tid:" + tid + "\t");System.out.print("tname:" + tname + "\t");System.out.print("sex:" + sex + "\t");System.out.print("age:" + age + "\t");System.out.print("professional_title:" + professional_title + "\t");System.out.println("basic_salary:" + basic_salary);}resultSet.close();statement.close();connection.close();} catch (Exception e) {e.printStackTrace();}
2、無返回型操作
與有返回操作一致,需要先對數據庫建立通訊。
Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();} catch (Exception e) {e.printStackTrace();}
然后使用sql語句代碼,這里以insert into語句為例。使用executeUpdate函數進行操作,由于沒有返回值,直接使用statement進行操作后即可。
String sql = "insert into teacher(tid,tname,sex,age,professional_title,basic_salary) values('19G00001','靳小翠','女',38,'教授',16000)";
statement.executeUpdate(sql);
最后也是需要關閉對象。
無返回型操作完整代碼:
Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();String sql = "insert into teacher(tid,tname,sex,age,professional_title,basic_salary) values('19G00001','靳小翠','女',38,'教授',16000)";statement.executeUpdate(sql);connection.close();statement.close();} catch (Exception e) {e.printStackTrace();}
練習題目及完整代碼
題目:
完整代碼
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;class DBHelper {final static String className = "com.mysql.cj.jdbc.Driver";final static String mysqladdress = "jdbc:mysql://localhost:3306/java?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=TRUE";private String user, psw;DBHelper(String user, String psw) {this.user = user;this.psw = psw;}public void show_table() {Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();String sql = "select * from book";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {String bid = resultSet.getString("bid");String bname = resultSet.getString("bname");String author = resultSet.getString("author");double price = resultSet.getDouble("price");String press = resultSet.getString("press");String type = resultSet.getString("type");System.out.print("bid:" + bid + "\t");System.out.print("bname:" + bname + "\t");System.out.print("author:" + author + "\t");System.out.print("price:" + price + "\t");System.out.print("press:" + press + "\t");System.out.println("type:" + type);}resultSet.close();statement.close();connection.close();} catch (Exception e) {e.printStackTrace();}}public void change_data() {Connection connection;Statement statement;Statement statement1;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement1 = connection.createStatement();statement = connection.createStatement();String sql = "select press from book";String sql_professior = "update book set price=price*1.1";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {String bookname = resultSet.getString("press");if (bookname.equals("清華大學出版社")) {statement1.executeUpdate(sql_professior);}}resultSet.close();statement.close();connection.close();} catch (Exception e) {e.printStackTrace();} finally {show_table();}}public void sort() {Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();String sql = "select * from book order by price DESC";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {String bid = resultSet.getString("bid");String bname = resultSet.getString("bname");String author = resultSet.getString("author");double price = resultSet.getDouble("price");String press = resultSet.getString("press");String type = resultSet.getString("type");System.out.print("bid:" + bid + "\t");System.out.print("bname:" + bname + "\t");System.out.print("author:" + author + "\t");System.out.print("price:" + price + "\t");System.out.print("press:" + press + "\t");System.out.println("type:" + type);}resultSet.close();statement.close();connection.close();} catch (Exception e) {e.printStackTrace();}}public void del() {Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();String sql = "delete from book where price<50 ";statement.executeUpdate(sql);connection.close();statement.close();} catch (Exception e) {e.printStackTrace();}show_table();}public void add() {Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();String sql = "insert into book(bid,bname,author,price,press,type) values('b00006','數據結構','嚴蔚敏',48,'清華大學出版社','科學類')";statement.executeUpdate(sql);connection.close();statement.close();} catch (Exception e) {e.printStackTrace();}show_table();}public void statistics() {Connection connection;Statement statement;try {Class.forName(className);connection = DriverManager.getConnection(mysqladdress, user, psw);statement = connection.createStatement();String sql = "select * from book where press<(select avg(press) from book);";ResultSet resultSet = statement.executeQuery(sql);while (resultSet.next()) {String bid = resultSet.getString("bid");String bname = resultSet.getString("bname");String author = resultSet.getString("author");double price = resultSet.getDouble("price");String press = resultSet.getString("press");String type = resultSet.getString("type");System.out.print("bid:" + bid + "\t");System.out.print("bname:" + bname + "\t");System.out.print("author:" + author + "\t");System.out.print("price:" + price + "\t");System.out.print("press:" + press + "\t");System.out.println("type:" + type);}resultSet.close();statement.close();connection.close();} catch (Exception e) {e.printStackTrace();}}
}
public class sql {static final String name = "java";static final String psw = "123456";public static void main(String[] args) {DBHelper dbHelper = new DBHelper(name, psw);Scanner scanner = new Scanner(System.in);while (true) {System.out.println("1、打印數據\n2、增加工資\n3、排序\n4、刪除數據\n5、添加數據\n6、篩選數據");int choose = scanner.nextInt();switch (choose) {case 1:dbHelper.show_table();break;case 2:dbHelper.change_data();break;case 3:dbHelper.sort();break;case 4:dbHelper.del();break;case 5:dbHelper.add();break;case 6:dbHelper.statistics();break;}}}
}