Educoder–Java高級特性(第九章)- JDBC(上)【筆記+參考代碼】
第一關
編程要求
在右側編輯器補充代碼,完成下列相應任務:加載數據庫驅動;【平臺數據庫連接的用戶(user)爲root,密碼(password)爲123123】
創建數據庫mysql_db;
創建表student。
student表結構爲:
| 字段名 | 類型 | 備註 | 約束 | | :————: | :————: | :————: | | id | int |
學生id | 非空 | | name | varchar(20) | 學生姓名 | 無 | | sex |
varchar(4) | 學生性別 | 無 | | age | int | 學生年齡 | 無 |測試說明
平臺會對你編寫的代碼進行測試:測試輸入:無 預期輸出: id INT(11) name VARCHAR(20) sex VARCHAR(4) age INT(11)
參考代碼
package jdbc;
import java.sql.*;
public class jdbcConn {
public static void getConn() {
/********** Begin **********/
try {
//1.註冊驅動
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
/********** End **********/
/********** Begin **********/
Connection conn = null;
Statement statement = null;
//2.建立連接並創建數據庫和表
String url = "jdbc:mysql://127.0.0.1:3306/";
String user = "root";
String password = "123123";
try{
conn = DriverManager.getConnection(url,user,password);
statement = conn.createStatement();
statement.executeUpdate("drop database if exists test");//執行sql語句
statement.executeUpdate("create database mysql_db");
statement.executeUpdate("use mysql_db");
String sql = "create table student("+
"id int not null,"+
"name varchar(20),"+
"sex varchar(4),"+
"age int)";
statement.executeUpdate(sql);
}catch (SQLException e){
e.printStackTrace();
}
/********** End **********/
finally {
try {
if(statement!=null)
statement.close();
if(conn!=null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
第二關
編程要求
在右側編輯器補充代碼,向上一章節中已創建好的數據庫mysql_db中的表student中插入數據,並將插入的數據進行輸出:| id | name | sex | age |
| :————: | :————: | :————: |
| 1 | 張三 | 男 | 19 |
| 2 | 李四 | 女 | 18 |
| 3 | 王五 | 男 | 20 |提示:已爲你封裝好student類,可在右側文件夾中查看,此類可直接使用。
測試說明
平臺會對你編寫的代碼進行測試:測試輸入:無
預期輸出:
1 張三 男 19
2 李四 女 18
3 王五 男 20
參考代碼
package jdbc;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class jdbcInsert {
public static void insert(){
/********** Begin **********/
try {
//加載驅動
Class.forName("com.mysql.jdbc.Driver" );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
/********** End **********/
Connection conn = null;
PreparedStatement statement = null;
/********** Begin **********/
//連接並插入數據
try{
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mysql_db","root","123123");
PreparedStatement s = conn.prepareStatement("insert into student values(?,?,?,?)");
s.setInt(1,1);s.setString(2,"張三");s.setString(3,"男");s.setInt(4,19);
s.executeUpdate();
s.setInt(1,2);s.setString(2,"李四");s.setString(3,"女");s.setInt(4,18);
s.executeUpdate();
s.setInt(1,3);s.setString(2,"王五");s.setString(3,"男");s.setInt(4,20);
s.executeUpdate();
s=conn.prepareStatement("select * from student");
ResultSet r = s.executeQuery();
while(r.next()){
System.out.println(r.getString(1)+" "+r.getString(2)+" "+r.getString(3)+" "+r.getString(4));
}
} catch (SQLException e) {
e.printStackTrace();
}
/********** End **********/
finally {
try {
if (statement != null)
statement.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
第三關
編程要求
根據提示,在右側編輯器補充代碼,編寫一條新增SQL語句和任意一條錯誤的SQL語句,提交事務;要求第一條新增語句在數據庫中被修改,其後錯誤SQL語句不執行。新增插入語句具體要求如下: 在mysql_db數據庫student表中新增一條id爲4,name爲趙六,sex爲女,age爲21的數據。
提示:每一條SQL語句之後都可提交事務。
測試說明
平臺會對你編寫的代碼進行測試:測試輸入:無 預期輸出:
1 張三 男 19
2 李四 女 18
3 王五 男 20
4 趙六 女 21
參考代碼
package jdbc;
import java.sql.*;
public class jdbcTransaction {
public static void transaction(){
try {
Class.forName("com.mysql.jdbc.Driver" );
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn = null;
PreparedStatement ps = null;
/********** Begin **********/
//連接數據庫並開啓事務
String url = "jdbc:mysql://localhost:3306/mysql_db";
try {
conn = DriverManager.getConnection (url,"root","123123" );
conn.setAutoCommit(false);//關閉自動提交開啓事務
ps = conn.prepareStatement("insert into student(id,name,sex,age) values(4,'趙六','女',21)");
ps.executeUpdate();
conn.commit();//提交事務
ps = conn.prepareStatement("insert in student(id,name,sex,age) values(5,'錢七','男',18)");
ps.executeUpdate();
conn.commit();//提交事務
} catch (SQLException e) {
try {
//事務回滾
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
/********** End **********/
finally {
try {
if(ps!=null)
ps.close();
if (conn != null)
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}