最全 jdbc從入門到精通
-
JDBC是什麼?
jdbc是 java資料庫連線(java DataBase Connectivity)技術的簡稱,由一組使用java語言編寫的類與介面組成,可以為多種關係資料庫提供統一訪問。
-
沒有使用jdbc之前操作資料庫的操作
1> 通過MySQL的客戶端工具,登入資料庫伺服器 (mysql -u root -p 密碼);
2>編寫sql語句;
3>傳送sql語句到資料庫。 -
使用jdbc之後操作資料庫的操作
登入資料庫伺服器(連線資料庫伺服器),獲:取資料庫的IP地址、埠、資料庫使用者名稱、密碼。
/**
* jdbc連線資料庫
* @author APPle
*
*/
public class Demo1 {
//連線資料庫的URL
private String url = "jdbc:mysql://localhost:3306/day17";
// jdbc協議:資料庫子協議:主機:埠/連線的資料庫 //
private String user = "root";//使用者名稱
private String password = "root";//密碼
/**
* 第一種方法
* @throws Exception
*/
@Test
public void test1() throws Exception{
//1.建立驅動程式類物件
Driver driver = new com.mysql.jdbc.Driver(); //新版本
//Driver driver = new org.gjt.mm.mysql.Driver(); //舊版本
//設定使用者名稱和密碼
Properties props = new Properties();
props.setProperty("user", user);
props.setProperty("password" , password);
//2.連線資料庫,返回連線物件
Connection conn = driver.connect(url, props);
System.out.println(conn);
}
/**
* 使用驅動管理器類連線資料庫(註冊了兩次,沒必要)
* @throws Exception
*/
@Test
public void test2() throws Exception{
Driver driver = new com.mysql.jdbc.Driver();
//Driver driver2 = new com.oracle.jdbc.Driver();
//1.註冊驅動程式(可以註冊多個驅動程式)
DriverManager.registerDriver(driver);
//DriverManager.registerDriver(driver2);
//2.連線到具體的資料庫
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
/**
* (推薦使用這種方式連線資料庫)
* 推薦使用載入驅動程式類 來 註冊驅動程式
* @throws Exception
*/
@Test
public void test3() throws Exception{
//Driver driver = new com.mysql.jdbc.Driver();
//通過得到位元組碼物件的方式載入靜態程式碼塊,從而註冊驅動程式
Class.forName("com.mysql.jdbc.Driver");
//Driver driver2 = new com.oracle.jdbc.Driver();
//1.註冊驅動程式(可以註冊多個驅動程式)
//DriverManager.registerDriver(driver);
//DriverManager.registerDriver(driver2);
//2.連線到具體的資料庫
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
3.jdbc介面核心api
java.sql.* 和 javax.sql.*
|- Driver介面: 表示java驅動程式介面。所有的具體的資料庫廠商要來實現此介面。
|- connect(url, properties): 連線資料庫的方法。
url: 連線資料庫的URL
URL語法: jdbc協議:資料庫子協議://主機:埠/資料庫
user: 資料庫的使用者名稱
password: 資料庫使用者密碼
|- DriverManager類: 驅動管理器類,用於管理所有註冊的驅動程式
|-registerDriver(driver) : 註冊驅動類物件
|-Connection getConnection(url,user,password); 獲取連線物件
|- Connection介面: 表示java程式和資料庫的連線物件。
|- Statement createStatement() : 建立Statement物件
|- PreparedStatement prepareStatement(String sql) 建立PreparedStatement物件
|- CallableStatement prepareCall(String sql) 建立CallableStatement物件
|- Statement介面: 用於執行靜態的sql語句
|- int executeUpdate(String sql) : 執行靜態的更新sql語句(DDL,DML)
|- ResultSet executeQuery(String sql) :執行的靜態的查詢sql語句(DQL)
|-PreparedStatement介面:用於執行預編譯sql語句
|- int executeUpdate() : 執行預編譯的更新sql語句(DDL,DML)
|-ResultSet executeQuery() : 執行預編譯的查詢sql語句(DQL)
|-CallableStatement介面:用於執行儲存過程的sql語句(call xxx)
|-ResultSet executeQuery() : 呼叫儲存過程的方法
|- ResultSet介面:用於封裝查詢出來的資料
|- boolean next() : 將游標移動到下一行
|-getXX() : 獲取列的值
4.使用Statement執行sql語句
4.1 執行DDL語句
/**
* 執行DDL語句(建立表)
*/
@Test
public void test1(){
Statement stmt = null;
Connection conn = null;
try {
//1.驅動註冊程式
Class.forName("com.mysql.jdbc.Driver");
//2.獲取連線物件
conn = DriverManager.getConnection(url, user, password);
//3.建立Statement
stmt = conn.createStatement();
//4.準備sql
String sql = "CREATE TABLE student(id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20),gender VARCHAR(2))";
//5.傳送sql語句,執行sql語句,得到返回結果
int count = stmt.executeUpdate(sql);
//6.輸出
System.out.println("影響了"+count+"行!");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally{
//7.關閉連線(順序:後開啟的先關閉)
if(stmt!=null)
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
if(conn!=null)
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
4.2 執行DML語句
/**
* 使用Statement執行DML語句
* @author APPle
*
*/
public class Demo2 {
private String url = "jdbc:mysql://localhost:3306/day17";
private String user = "root";
private String password = "root";
/**
* 增加
*/
@Test
public void testInsert(){
Connection conn = null;
Statement stmt = null;
try {
//通過工具類獲取連線物件
conn = JdbcUtil.getConnection();
//3.建立Statement物件
stmt = conn.createStatement();
//4.sql語句
String sql = "INSERT INTO student(NAME,gender) VALUES('李四','女')";
//5.執行sql
int count = stmt.executeUpdate(sql);
System.out.println("影響了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally{
//關閉資源
JdbcUtil.close(conn, stmt);
}
}
/**
* 修改
*/
@Test
public void testUpdate(){
Connection conn = null;
Statement stmt = null;
//模擬使用者輸入
String name = "陳六";
int id = 3;
try {
/*//1.註冊驅動
Class.forName("com.mysql.jdbc.Driver");
//2.獲取連線物件
conn = DriverManager.getConnection(url, user, password);*/
//通過工具類獲取連線物件
conn = JdbcUtil.getConnection();
//3.建立Statement物件
stmt = conn.createStatement();
//4.sql語句
String sql = "UPDATE student SET NAME='"+name+"' WHERE id="+id+"";
System.out.println(sql);
//5.執行sql
int count = stmt.executeUpdate(sql);
System.out.println("影響了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally{
//關閉資源
JdbcUtil.close(conn, stmt);
}
}
/**
* 刪除
*/
@Test
public void testDelete(){
Connection conn = null;
Statement stmt = null;
//模擬使用者輸入
int id = 3;
try {
/*//1.註冊驅動
Class.forName("com.mysql.jdbc.Driver");
//2.獲取連線物件
conn = DriverManager.getConnection(url, user, password);*/
//通過工具類獲取連線物件
conn = JdbcUtil.getConnection();
//3.建立Statement物件
stmt = conn.createStatement();
//4.sql語句
String sql = "DELETE FROM student WHERE id="+id+"";
System.out.println(sql);
//5.執行sql
int count = stmt.executeUpdate(sql);
System.out.println("影響了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally{
//關閉資源
JdbcUtil.close(conn, stmt);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
/**
* jdbc工具類
*
*/
public class JdbcUtil {
private static String url = null;
private static String user = null;
private static String password = null;
private static String driverClass = null;
/**
* 靜態程式碼塊中(只加載一次)
*/
static{
try {
//讀取db.properties檔案
Properties props = new Properties();
/**
* . 代表java命令執行的目錄
* 在java專案下,. java命令的執行目錄從專案的根目錄開始
* 在web專案下, . java命令的而執行目錄從tomcat/bin目錄開始
* 所以不能使用點.
*/
//FileInputStream in = new FileInputStream("./src/db.properties");
/**
* 使用類路徑的讀取方式
* / : 斜槓表示classpath的根目錄
* 在java專案下,classpath的根目錄從bin目錄開始
* 在web專案下,classpath的根目錄從WEB-INF/classes目錄開始
*/
InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties");
//載入檔案
props.load(in);
//讀取資訊
url = props.getProperty("url");
user = props.getProperty("user");
password = props.getProperty("password");
driverClass = props.getProperty("driverClass");
//註冊驅動程式
Class.forName(driverClass);
} catch (Exception e) {
e.printStackTrace();
System.out.println("驅程程式註冊出錯");
}
}
/**
* 抽取獲取連線物件的方法
*/
public static Connection getConnection(){
try {
Connection conn = DriverManager.getConnection(url, user, password);
return conn;
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
/**
* 釋放資源的方法
*/
public static void close(Connection conn,Statement stmt){
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(rs!=null)
try {
rs.close();
} catch (SQLException e1) {
e1.printStackTrace();
throw new RuntimeException(e1);
}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
4.3 執行DQL語句
/**
* 使用Statement執行DQL語句(查詢操作)
*/
public class Demo3 {
@Test
public void test1(){
Connection conn = null;
Statement stmt = null;
try{
//獲取連線
conn = JdbcUtil.getConnection();
//建立Statement
stmt = conn.createStatement();
//準備sql
String sql = "SELECT * FROM student";
//執行sql
ResultSet rs = stmt.executeQuery(sql);
//移動游標
/*boolean flag = rs.next();
flag = rs.next();
flag = rs.next();
if(flag){
//取出列值
//索引
int id = rs.getInt(1);
String name = rs.getString(2);
String gender = rs.getString(3);
System.out.println(id+","+name+","+gender);
//列名稱
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+","+name+","+gender);
}*/
//遍歷結果
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+","+name+","+gender);
}
}catch(Exception e){
e.printStackTrace();
throw new RuntimeException(e);
}finally{
JdbcUtil.close(conn, stmt);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
5.使用PreparedStatement執行sql語句
public class Demo1 {
/**
* 增加
*/
@Test
public void testInsert() {
Connection conn = null;
PreparedStatement stmt = null;
try {
//1.獲取連線
conn = JdbcUtil.getConnection();
//2.準備預編譯的sql
String sql = "INSERT INTO student(NAME,gender) VALUES(?,?)"; //?表示一個引數的佔位符
//3.執行預編譯sql語句(檢查語法)
stmt = conn.prepareStatement(sql);
//4.設定引數值
/**
* 引數一: 引數位置 從1開始
*/
stmt.setString(1, "李四");
stmt.setString(2, "男");
//5.傳送引數,執行sql
int count = stmt.executeUpdate();
System.out.println("影響了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt);
}
}
/**
* 修改
*/
@Test
public void testUpdate() {
Connection conn = null;
PreparedStatement stmt = null;
try {
//1.獲取連線
conn = JdbcUtil.getConnection();
//2.準備預編譯的sql
String sql = "UPDATE student SET NAME=? WHERE id=?"; //?表示一個引數的佔位符
//3.執行預編譯sql語句(檢查語法)
stmt = conn.prepareStatement(sql);
//4.設定引數值
/**
* 引數一: 引數位置 從1開始
*/
stmt.setString(1, "王五");
stmt.setInt(2, 9);
//5.傳送引數,執行sql
int count = stmt.executeUpdate();
System.out.println("影響了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt);
}
}
/**
* 刪除
*/
@Test
public void testDelete() {
Connection conn = null;
PreparedStatement stmt = null;
try {
//1.獲取連線
conn = JdbcUtil.getConnection();
//2.準備預編譯的sql
String sql = "DELETE FROM student WHERE id=?"; //?表示一個引數的佔位符
//3.執行預編譯sql語句(檢查語法)
stmt = conn.prepareStatement(sql);
//4.設定引數值
/**
* 引數一: 引數位置 從1開始
*/
stmt.setInt(1, 9);
//5.傳送引數,執行sql
int count = stmt.executeUpdate();
System.out.println("影響了"+count+"行");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
JdbcUtil.close(conn, stmt);
}
}
/**
* 查詢
*/
@Test
public void testQuery() {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
//1.獲取連線
conn = JdbcUtil.getConnection();
//2.準備預編譯的sql
String sql = "SELECT * FROM student";
//3.預編譯
stmt = conn.prepareStatement(sql);
//4.執行sql
rs = stmt.executeQuery();
//5.遍歷rs
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
System.out.println(id+","+name+","+gender);
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
} finally {
//關閉資源
JdbcUtil.close(conn,stmt,rs);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
PreparedStatement vs Statment
1)語法不同:PreparedStatement可以使用預編譯的sql,而Statment只能使用靜態的sql
2)效率不同: PreparedStatement可以使用sql快取區,效率比Statment高
3)安全性不同: PreparedStatement可以有效防止sql注入,而Statment不能防止sql注入。
推薦使用PreparedStatement
6.CallableStatement執行儲存過程
/**
* 使用CablleStatement呼叫儲存過程
* @author APPle
*
*/
public class Demo1 {
/**
* 呼叫帶有輸入引數的儲存過程
* CALL pro_findById(4);
*/
@Test
public void test1(){
Connection conn = null;
CallableStatement stmt = null;
ResultSet rs = null;
try {
//獲取連線
conn = JdbcUtil.getConnection();
//準備sql
String sql = "CALL pro_findById(?)";
相關推薦
最全 jdbc從入門到精通
JDBC是什麼?
jdbc是 java資料庫連線(java DataBase Connectivity)技術的簡稱,由一組使用java語言編寫的類與介面組成,可以為多種關係資料庫提供統一訪問。
沒有使用jdbc之前操作資料庫的操作
1> 通過MySQL的客戶端工
史上最全Python從入門到資深書籍資料分享!
暢銷書 jpeg 集成 mar sha 鞏固 技能 ima 能力 今天我來為大家分享十本不可錯過的Python好書,分別適合入門、進階到精深三個不同階段的人來閱讀。
Python高性能編程
Amazon 五星暢銷書。
Python 入門進階必讀。
Python代碼僅僅能夠
最新最全的Docker入門視頻課程——隨堂筆記
teacher 表示 主機 .gz try 空間 vim 服務 pen 視頻課程鏈接 http://edu.51cto.com/course/14479.html
Docker容器技術,主講:湯小洋
一、Docker簡介
1. Docker是什麽?
? 產生背景:
開
今天博主跟大家聊一下__陣列去重__!! 【基本最全,從原始到高階,再到一句話!~是不是感覺很厲害哈!】
廢話不多說咱們直接看程式碼!!
博主的審美不太好 湊合看哈!
<!DOCTYPE html>
<html lang="en"> <head> <meta charset="UTF-8"> &nb
Docker最全教程——從理論到實戰(一)
容器是應用走向雲端之後必然的發展趨勢,因此筆者非常樂於和大家分享我們這段時間對容器的理解、心得和實踐。
本篇教程持續編寫了2個星期左右,只是為了大家更好地瞭解、理解和消化這個技術,能夠搭上這波車。
你可以和我們一起討論,我們希望能夠多多交流,多多分享。
如果覺得不錯,請多多點贊,你們的支援是我們前進的最
Docker最全教程——從理論到實戰(三)
往期連結:
https://www.cnblogs.com/codelove/p/10030439.html
https://www.cnblogs.com/codelove/p/10036608.html
寫在前面
容器是應用走向雲端之後必然的發展趨勢,因此筆者非常樂
Docker最全教程——從理論到實戰(四)
變量 參加 屬於 當我 web服務 隔離 方便 當前 context 往期內容鏈接
https://www.cnblogs.com/codelove/p/10030439.html
https://www.cnblogs.com/codelove/p/10036608.
JDBC從入門到放棄 02-JDBC的Statement
JDBC從入門到放棄
02-JDBC的Statement
拿到了資料庫連線物件了,我們就可以使用資料庫連線來獲取資料庫資料,這節我們講解Statement的使用。
資料庫進行插入資料
步驟:
1:獲取資料庫連線
2:準備插入資料庫的語句
3:執行插入資料庫語句
JDBC從入門到放棄-06:JDBC的批處理
JDBC從入門到放棄
06-JDBC的批處理
當有成批插入或者更新記錄的需求時,可以採用JDBC的批量更新機制,這一機制允許多條語句一次性的提交給資料庫批量處理。通常情況下比單獨處理要更有效率。
批量處理一般流程。
假設我們有100000條資料要插入的資料庫,採用批處
JDBC從入門到放棄-07:JDBC的資料庫連線池
JDBC從入門到放棄
07-JDBC的資料庫連線池
傳統資料庫連線
一般的資料庫連線操作
①獲取或建立資料庫連線。
②進行sql操作
③斷開資料庫連線。
這樣的搞發存在很多問題
耗費時間
普通的JDBC資料庫連線使用 DriverManager 來獲取,每次向
Docker最全教程——從理論到實戰(七)
本篇教程持續編寫了3個星期左右並且一直在完善、補充具體的細節和實踐,預計全部完成還需要1到2個月的時間。整個教程完成之後,我們將會出書(目前已聯絡出版社)。在這個過程中,您可以加入我們的QQ群(85318032)一起討論、交流和分享這一塊的技術。根據目前和大家的交流,筆者針對大家的情況進行了
Docker最全教程——從理論到實戰(七) Docker最全教程——從理論到實戰(一) Docker最全教程——從理論到實戰(二) Docker最全教程——從理論到實戰(三) Docker最全教程——從理論到實戰(四) Docker最全教程——從理論到實戰(五) Docker最全教程——從理論到實戰
在本系列教程中,筆者希望將必要的知識點圍繞理論、流程(工作流程)、方法、實踐來進行講解,而不是單純的為講解知識點而進行講解。也就是說,筆者希望能夠讓大家將理論、知識、思想和指導應用到工作的實際場景和實踐之中,而不是拿著字典寫文章,抱著寶典寫程式碼。至於很多具體的語法、技術細節,除了常用的知識點,筆者更希望大家
Docker最全教程——從理論到實戰(一) Docker最全教程——從理論到實戰(一)
Docker最全教程——從理論到實戰(一)
目錄
前言
隨著生產力的發展尤其是彈性架構的廣泛應用(比如微服務),許多一流開發者都將應用託管到了應用容器上,比如Google、微軟、亞馬遜、騰訊、阿里、京東和新浪。
從未來的發展方向來看,容器引擎將會越來越成為主流,哪怕不是彈性架構
Docker最全教程——從理論到實戰(二) Docker最全教程——從理論到實戰(二)
Docker最全教程——從理論到實戰(二)
Docker和ASP.NET Core
Docker 正在逐漸成為容器行業的事實標準,受到 Windows 和 Linux 生態系統領域最重要供應商的支援。 (Microsoft 是支援 Do
Docker最全教程——從理論到實戰(三) Docker最全教程——從理論到實戰(三)
Docker最全教程——從理論到實戰(三)
寫在前面
容器是應用走向雲端之後必然的發展趨勢,因此筆者非常樂於和大家分享我們這段時間對容器的理解、心得和實踐。
本教程持續編寫了2個星期左右並且一直在完善、補充具體的細節和實踐,預計全部完成需要1到2個月的時間。由於編寫的過程中極其費時,並且還需要配合做一些
Docker最全教程——從理論到實戰(五) Docker最全教程——從理論到實戰(五)
Docker最全教程——從理論到實戰(五)
執行 Docker 應用程式
如果應用程式只有一個容器,則可通過將其部署到 Docker 主機(虛擬機器或物理伺服器)來執行該程式。 但如果應用程式包含多項服務,則可使用單個 CLI 命令 (docker-compose up) 或使用 Visual S
Docker最全教程——從理論到實戰(四) Docker最全教程——從理論到實戰(四)
Docker最全教程——從理論到實戰(四)
建立自定義 Docker 映象
建立了Dockerfile之後,需為應用程式中的每項服務建立一個相關映象。如果應用程式由單個服務或 Web 應用程式組成,則只需建立一個映象。
我們可以使用docker build命令來建立映象,例如
Docker最全教程——從理論到實戰(二)
Docker和ASP.NET Core
Docker 正在逐漸成為容器行業的事實標準,受到 Windows 和 Linux 生態系統領域最重要供應商的支援。 (Microsoft 是支援 Docker 的主要雲供應商
Docker最全教程——從理論到實戰(一)
容器是應用走向雲端之後必然的發展趨勢,因此筆者非常樂於和大家分享我們這段時間對容器的理解、心得和實踐。
本篇教程持續編寫了2個星期左右,只是為了大家更好地瞭解、理解和消化這個技術,能夠搭上這波車。
你可以關注我們的公眾號“magiccodes”給我們留言,也可以加入我們的QQ群(853180
Docker最全教程——從理論到實戰(八) Docker最全教程——從理論到實戰(一) Docker最全教程——從理論到實戰(二) Docker最全教程——從理論到實戰(三) Docker最全教程——從理論到實戰(四) Docker最全教程——從理論到實戰(五) Docker最全教程——從理論到實戰
在本系列教程中,筆者希望將必要的知識點圍繞理論、流程(工作流程)、方法、實踐來進行講解,而不是單純的為講解知識點而進行講解。也就是說,筆者希望能夠讓大家將理論、知識、思想和指導應用到工作的實際場景和實踐之中,而不是拿著字典寫文章,抱著寶典寫程式碼。至於很多具體的語法、技術細節,除了常用的知識點,筆者更希望大家