7.21 JDBC 學(xué)習(xí)總結(jié)

謙虛其心捧韵,宏大其量

上午主要學(xué)習(xí)了JDBC

JDBC(Java DataBase Connectivity,即java數(shù)據(jù)庫(kù)連接)是一種用于執(zhí)行SQL語(yǔ)句的Java API,可以為多種關(guān)系數(shù)據(jù)庫(kù)提供統(tǒng)一訪問(wèn),它由一組用Java語(yǔ)言編寫(xiě)的類(lèi)和接口組成磺平。JDBC提供了一種基準(zhǔn)段标,據(jù)此可以構(gòu)建更高級(jí)的工具和接口,使數(shù)據(jù)庫(kù)開(kāi)發(fā)人員能夠編寫(xiě)數(shù)據(jù)庫(kù)應(yīng)用程序可款。

(JDBC用socket技術(shù)實(shí)現(xiàn) 是典型的兩個(gè)進(jìn)程之間的通信)

JDBC用途

基于昨天學(xué)的MySQL知識(shí)
http://www.reibang.com/p/c98059693e5d

在itcast數(shù)據(jù)庫(kù)中建立的student表:

student表.png

在MyEclispse中建立Web項(xiàng)目:

2017-07-21 (1).png
2017-07-21 (2).png

下載老師給的mysql-connector-java-5.1.30.jar文件
http://pan.baidu.com/s/1bp1tb7h
(用于連接java和mysql數(shù)據(jù)庫(kù)關(guān)鍵文件)

選中文件 (左上角):


2017-07-21 (3).png

復(fù)制文件后直接粘貼到 Web工程中WebRoot\WEB-INF\lib文件夾下:

QQ圖片20170721113313.png

安裝的MySQL數(shù)據(jù)庫(kù)為服務(wù)器端(左)
打開(kāi)的MySQL命令行是客戶端程序(右):


QQ圖片20170721204246.png

我們?cè)诳蛻舳?shell)下輸入指令:


QQ圖片20170721204647.png

傳給MySQL服務(wù)器端后 其接收指令——解釋指令——執(zhí)行指令——返回給shell結(jié)果

Java 所有的API都是為了讓我們方便編程設(shè)計(jì)的育韩,讓程序員不用再去考慮很復(fù)雜的問(wèn)題,但要知道其原理闺鲸! JDBC就是一種用于執(zhí)行SQL語(yǔ)句的Java API筋讨。

使用JDBC來(lái)操作數(shù)據(jù)庫(kù)用到的類(lèi):
1 Connection 連接 (接頭人)
2 Statement 語(yǔ)句 (送信的)
3 ResultSet 結(jié)果集 (查詢(xún)需要)

連接遍歷數(shù)據(jù)庫(kù)的大致步驟:

遍歷數(shù)據(jù)庫(kù)

遍歷打印數(shù)據(jù)庫(kù)中數(shù)據(jù) 代碼:

import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;

public class TestJDBC {
    public static void main(String[] args) throws Exception {
        // 第一步 先加載注冊(cè)JDBC的驅(qū)動(dòng)類(lèi)
        Class.forName("com.mysql.jdbc.Driver");
        // 第二步 提供JDBC連接的url
        String url = "jdbc:mysql://localhost:3306/itcast";
        String username = "root";
        String password = "root";
        // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接(利用驅(qū)動(dòng)器管理器DriverManager的getConnection方法)
        Connection conn = (Connection) DriverManager.getConnection(url, username, password);
        // 第四步 創(chuàng)建一個(gè)statement對(duì)象
        Statement stmt = (Statement) conn.createStatement();
        // 第五步 執(zhí)行sql語(yǔ)句
        ResultSet rs = stmt.executeQuery("select * from student");
        // 第六步 循環(huán)遍歷處理結(jié)果
        while(rs.next()) {
            System.out.println(rs.getString("name"));
            System.out.println(rs.getFloat("grade"));
        }
        // 第七步 關(guān)閉JDBC對(duì)象
        rs.close();
        stmt.close();
        conn.close();
    }
}

注:
第一步 加載注冊(cè)JDBC的驅(qū)動(dòng)類(lèi) Class.forName("com.mysql.jdbc.Driver"); 不同數(shù)據(jù)庫(kù)不一樣(這里用的是mysql) 需要其他數(shù)據(jù)庫(kù)的話 直接去查即可

stmt.executeQuery 返回一個(gè)結(jié)果集 用于查詢(xún)

關(guān)鍵語(yǔ)句:

ResultSet rs = stmt.executeQuery("select * from student");

另外要注意第七步關(guān)閉順序(反著來(lái))

上面代碼版本異常處理為main函數(shù)處拋出:

public static void main(String[] args) throws Exception { }

這種做法不好,若后面代碼中間一旦異常停止
則其后面的代碼不會(huì)執(zhí)行翠拣。

改進(jìn)的版本:(增加try catch)

import java.sql.*;

public class TestJDBC {
    public static void main(String[] args) {
    
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName("com.mysql.jdbc.Driver");
            // 第二步 提供JDBC連接的url
            String url = "jdbc:mysql://localhost:3306/itcast";
            String username = "root";
            String password = "root";
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            stmt = conn.createStatement();
            // 第五步 執(zhí)行sql語(yǔ)句 獲取結(jié)果集合
            rs = stmt.executeQuery("select * from student");
            // 第六步 循環(huán)遍歷結(jié)果集 處理
            while(rs.next()) {
                System.out.println(rs.getString("name"));
                System.out.println(rs.getFloat("grade"));
            }
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入日志操作
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第七步 關(guān)閉JDBC對(duì)象 釋放資源
                rs.close();
                stmt.close();
                conn.close();
            }catch(SQLException e) {
                e.printStackTrace();
            }
            
        }
    }
}

首先是try后兩個(gè)catch分支 分別處理不同異常版仔,try catch后的finally里執(zhí)行關(guān)閉JDBC對(duì)象操作(此更符合事件處理邏輯)

又考慮到對(duì)象rs stmt為空關(guān)閉會(huì)導(dǎo)致異常
改進(jìn)finally中處理辦法:

...
}finally{
    try{
        // 第七步 關(guān)閉JDBC對(duì)象
        if(rs != null) {
            rs.close();
        }
        if(stmt != null) {
            stmt.close();
        }
        if(conn != null) {
            conn.close();
        }
    }catch(SQLException e) {
        e.printStackTrace();
    }
}

最終較完美代碼:

import java.sql.*;

public class TestJDBC {
    public static void main(String[] args) {
    
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName("com.mysql.jdbc.Driver");
            // 第二步 提供JDBC連接的url
            String url = "jdbc:mysql://localhost:3306/itcast";
            String username = "root";
            String password = "root";
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            stmt = conn.createStatement();
            // 第五步 執(zhí)行sql語(yǔ)句
            rs = stmt.executeQuery("select * from student");
            // 第六步 循環(huán)遍歷處理結(jié)果
            while(rs.next()) {
                System.out.println(rs.getString("name"));
                System.out.println(rs.getFloat("grade"));
            }
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入異常操作
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第七步 關(guān)閉JDBC對(duì)象 釋放資源
                if(rs != null) {
                    rs.close();
                }
                if(stmt != null) {
                    stmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(SQLException e) {
                e.printStackTrace();
            }
            
        }
    }
}

也可以再優(yōu)化一下結(jié)構(gòu):

import java.sql.*;

public class TestJDBC22 {
    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String Driver = "com.mysql.jdbc.Driver";
        // 對(duì)應(yīng) 第二步 
        String url = "jdbc:mysql://localhost:3306/itcast";
        String username = "root";
        String password = "root";
        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName(Driver);
            // 第二步 提供JDBC連接的url
            
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            stmt = conn.createStatement();
            // 第五步 執(zhí)行sql語(yǔ)句
            rs = stmt.executeQuery("select * from student");
            // 第六步 循環(huán)遍歷處理結(jié)果
            while(rs.next()) {
                System.out.println(rs.getString("name"));
                System.out.println(rs.getFloat("grade"));
            }
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入異常操作
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第七步 關(guān)閉JDBC對(duì)象 釋放資源
                if(rs != null) {
                    rs.close();
                }
                if(stmt != null) {
                    stmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(SQLException e) {
                e.printStackTrace();
            }
            
        }
    }
}

重要說(shuō)明:
將:

import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.Statement;
...

改為:

import java.sql.*;
...

則代碼中很多不用強(qiáng)轉(zhuǎn)類(lèi)型:

強(qiáng)轉(zhuǎn)說(shuō)明.png

不遍歷的話 則大致步驟:


步驟

數(shù)據(jù)插入操作代碼:

import java.sql.*;

public class Test {
    public static void main(String[] args) {
    
        Connection conn = null;
        Statement stmt = null;
 
        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName("com.mysql.jdbc.Driver");
            // 第二步 提供JDBC連接的url
            String url = "jdbc:mysql://localhost:3306/itcast";
            String username = "root";
            String password = "root";
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            stmt = conn.createStatement();
            // 第五步 執(zhí)行sql語(yǔ)句
            String sql = "insert into student values(0,'七月',23,'男')";
            stmt.executeUpdate(sql);
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入日志等操作 所以要分開(kāi)兩個(gè)異常類(lèi)別 都要 catch 
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第六步 關(guān)閉JDBC對(duì)象
                if(stmt != null) {
                    stmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

數(shù)據(jù)添加成功.png

批量插入方法:

import java.sql.*;

public class Test {
    public static void main(String[] args) {
    
        Connection conn = null;
        Statement stmt = null;
 
        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName("com.mysql.jdbc.Driver");
            // 第二步 提供JDBC連接的url
            String url = "jdbc:mysql://localhost:3306/itcast";
            String username = "root";
            String password = "root";
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            stmt = conn.createStatement();
            // 第五步 執(zhí)行sql語(yǔ)句
            String sql = "insert into student values(0,'七月1',23,'男')";
            String sq2 = "insert into student values(0,'八月1',32,'男')";
            stmt.addBatch(sql);
            stmt.addBatch(sq2);
            stmt.executeBatch();
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入日志等操作 所以要分開(kāi)兩個(gè)異常類(lèi)別 都要 catch 
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第六步 關(guān)閉JDBC對(duì)象
                if(stmt != null) {
                    stmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

此方法中關(guān)鍵語(yǔ)句:

     // 執(zhí)行sql語(yǔ)句
     String sql = "insert into student values(0,'七月1',23,'男')";
     String sq2 = "insert into student values(0,'八月1',32,'男')";
     stmt.addBatch(sql);
     stmt.addBatch(sq2);
     stmt.executeBatch();

用Statement對(duì)象中的addBatch() 函數(shù)方法將SQL命令語(yǔ)句都添加到Batch中 然后用executeBatch() 方法整體將Batch 中的語(yǔ)句提交給數(shù)據(jù)庫(kù)管理系統(tǒng)。

添加兩條數(shù)據(jù)成功:


添加兩條數(shù)據(jù)成功.png

注:
我們可以使用Statement對(duì)象用來(lái)做測(cè)試 但是在生產(chǎn)環(huán)境下一定要考慮使用 PreparedStatement(見(jiàn)下)


下午

學(xué)習(xí)了 PreparedStatement 對(duì)象误墓,用其可以使得update數(shù)據(jù)更靈活:

import java.sql.*;

public class Test {
    public static void main(String[] args) {

        Connection conn = null;
        PreparedStatement pstmt = null;
        
        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName("com.mysql.jdbc.Driver");
            // 第二步 提供JDBC連接的url
            String url = "jdbc:mysql://localhost:3306/itcast";
            String username = "root";
            String password = "root";
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            String sql = "insert into student values(?,?,?,?)";
            pstmt = conn.prepareStatement(sql);
            // 第五步 執(zhí)行sql語(yǔ)句
            pstmt.setInt(1,8);
            pstmt.setString(2,"nihao");
            pstmt.setFloat(3, 55);
            pstmt.setString(4,"男");
            
            pstmt.executeUpdate();
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入日志等操作 所以要分開(kāi)兩個(gè)異常類(lèi)別 都要 catch 
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第六步 關(guān)閉JDBC對(duì)象
                if(pstmt != null) {
                    pstmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

PreparedStatement 批量insert數(shù)據(jù):

import java.sql.*;

public class TestJDBC {
    public static void main(String[] args) {

        Connection conn = null;
        PreparedStatement pstmt = null;

        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName("com.mysql.jdbc.Driver");
            // 第二步 提供JDBC連接的url
            String url = "jdbc:mysql://localhost:3306/itcast";
            String username = "root";
            String password = "root";
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            String sql = "insert into student values(?,?,?,?)";
            pstmt = conn.prepareStatement(sql);
            // 第五步 執(zhí)行sql語(yǔ)句
            pstmt.setInt(1,9);
            pstmt.setString(2,"9");
            pstmt.setFloat(3, 55);
            pstmt.setString(4,"男");
            pstmt.addBatch();
            
            pstmt.setInt(1,10);
            pstmt.setString(2,"10");
            pstmt.setFloat(3, 68);
            pstmt.setString(4,"男");
            pstmt.addBatch();
            
            pstmt.executeBatch();
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入日志等操作 所以要分開(kāi)兩個(gè)異常類(lèi)別 都要 catch 
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第六步 關(guān)閉JDBC對(duì)象
                if(pstmt != null) {
                    pstmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

PreparedStatement 查詢(xún):

import java.sql.*;

public class Test {
    public static void main(String[] args) {

        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        
        try{
            // 第一步 先加載JDBC的驅(qū)動(dòng)類(lèi)
            Class.forName("com.mysql.jdbc.Driver");
            // 第二步 提供JDBC連接的url
            String url = "jdbc:mysql://localhost:3306/itcast";
            String username = "root";
            String password = "root";
            // 第三步 創(chuàng)建數(shù)據(jù)庫(kù)的連接
            conn = DriverManager.getConnection(url, username, password);
            // 第四步 創(chuàng)建一個(gè)statement對(duì)象
            String sql = "select * from student";
            pstmt = conn.prepareStatement(sql);
            // 第五步 執(zhí)行sql語(yǔ)句 獲取結(jié)果集合
            rs = pstmt.executeQuery();
            // 第六步 循環(huán)遍歷處理結(jié)果
            while(rs.next()){
                System.out.println(rs.getInt("id"));
                System.out.println(rs.getString("name"));
                System.out.println(rs.getInt("age"));
            }
        }catch(ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("ClassNotFoundException");
            // 還要進(jìn)行寫(xiě)入日志等操作 所以要分開(kāi)兩個(gè)異常類(lèi)別 都要 catch 
        }catch(SQLException e) {
            e.printStackTrace();
            System.out.println("SQLException");
        }finally{
            try{
                // 第七步 關(guān)閉JDBC對(duì)象
                if(pstmt != null) {
                    pstmt.close();
                }
                if(conn != null) {
                    conn.close();
                }
            }catch(SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

注意PreparedStatement 和 Statement 創(chuàng)建一個(gè)statement對(duì)象(第4步) 和 執(zhí)行sql語(yǔ)句(第5步)語(yǔ)句的區(qū)別:

Statement:

String sql = "select * from student";
// 第四步 創(chuàng)建一個(gè)statement對(duì)象
stmt = conn.createStatement();
// 第五步 執(zhí)行sql語(yǔ)句
rs = stmt.executeQuery(sql);

PreparedStatement:

String sql = "select * from student";
// 第四步 創(chuàng)建一個(gè)statement對(duì)象
pstmt = conn.prepareStatement(sql);
// 第五步 執(zhí)行sql語(yǔ)句 獲取結(jié)果集合
rs = pstmt.executeQuery();

PreparedStatement優(yōu)勢(shì)絕不僅僅是更靈活的參數(shù)化查詢(xún)
請(qǐng)參見(jiàn):PreparedStatement VS Statement


拓展閱讀:

1 - 通過(guò)JDBC進(jìn)行簡(jiǎn)單的增刪改查(以MySQL為例)
2 - JDBC詳解

世界上所有的追求都是因?yàn)闊釔?ài)
一枚愛(ài)編碼 愛(ài)生活 愛(ài)分享的IT信徒
— hongXkeX

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛮粮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子谜慌,更是在濱河造成了極大的恐慌然想,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欣范,死亡現(xiàn)場(chǎng)離奇詭異变泄,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)恼琼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)妨蛹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人晴竞,你說(shuō)我怎么就攤上這事蛙卤。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵颤难,是天一觀的道長(zhǎng)神年。 經(jīng)常有香客問(wèn)我,道長(zhǎng)行嗤,這世上最難降的妖魔是什么已日? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮栅屏,結(jié)果婚禮上飘千,老公的妹妹穿的比我還像新娘。我一直安慰自己既琴,他們只是感情好占婉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著甫恩,像睡著了一般逆济。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上磺箕,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天奖慌,我揣著相機(jī)與錄音,去河邊找鬼松靡。 笑死简僧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雕欺。 我是一名探鬼主播岛马,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼屠列!你這毒婦竟也來(lái)了啦逆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤笛洛,失蹤者是張志新(化名)和其女友劉穎夏志,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體苛让,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沟蔑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了狱杰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瘦材。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖仿畸,靈堂內(nèi)的尸體忽然破棺而出食棕,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布宣蠕,位于F島的核電站,受9級(jí)特大地震影響甥捺,放射性物質(zhì)發(fā)生泄漏抢蚀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一镰禾、第九天 我趴在偏房一處隱蔽的房頂上張望皿曲。 院中可真熱鬧,春花似錦吴侦、人聲如沸屋休。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)劫樟。三九已至,卻和暖如春织堂,著一層夾襖步出監(jiān)牢的瞬間叠艳,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工易阳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留附较,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓潦俺,卻偏偏與公主長(zhǎng)得像拒课,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子事示,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • JDBC概述 在Java中早像,數(shù)據(jù)庫(kù)存取技術(shù)可分為如下幾類(lèi):JDBC直接訪問(wèn)數(shù)據(jù)庫(kù)、JDO技術(shù)很魂、第三方O/R工具扎酷,如...
    usopp閱讀 3,543評(píng)論 3 75
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法遏匆,內(nèi)部類(lèi)的語(yǔ)法法挨,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法幅聘,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,664評(píng)論 18 399
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis 凡纳? MyBatis 是支持定制化 SQL、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 5,527評(píng)論 0 4
  • 西江月三首 胭脂雪 西江月·整裝待發(fā)游長(zhǎng)隆 場(chǎng)上妖嬈舞曲帝蒿,耳邊繾綣清風(fēng)荐糜。曦陽(yáng)明凈照歡容,更有鳴蟬相送。 往寄多情山...
    胭脂雪er閱讀 432評(píng)論 0 0
  • 1、let, const, class, extends, super, arrow functions, tem...
    逍遙g閱讀 399評(píng)論 0 1