JDBC編程JAVA

來源:互聯網
上載者:User

標籤:

學習資料《瘋狂java講義》

環境:MYSQL

        Java 1.7

 

java用JDBC操作資料庫是java編程的基礎之一。而掌握SQL是JDBC編程的基礎。JDBC是sun公司制定的介面API,各個資料庫產商根據介面API提供實作類別(驅動程式),這是面向介面編程的典型應用。

可以把 SQL 分為兩個部分:資料操作語言 (DML) 和 資料定義語言 (Data Definition Language) (DDL)。

SQL (結構化查詢語言 (SQL))是用於執行查詢的文法。但是 SQL 語言也包含用於更新、插入和刪除記錄的文法。

查詢和更新指令構成了 SQL 的 DML 部分:

  • SELECT - 從資料庫表中擷取資料
  • UPDATE - 更新資料庫表中的資料
  • DELETE - 從資料庫表中刪除資料
  • INSERT INTO - 向資料庫表中插入資料

SQL 的資料定義語言 (Data Definition Language) (DDL) 部分使我們有能力建立或刪除表格。我們也可以定義索引(鍵),規定表之間的連結,以及施加表間的約束。

SQL 中最重要的 DDL 語句:

  • CREATE DATABASE - 建立新資料庫
  • ALTER DATABASE - 修改資料庫
  • CREATE TABLE - 建立新表
  • ALTER TABLE - 變更(改變)資料庫表
  • DROP TABLE - 刪除表
  • CREATE INDEX - 建立索引(搜尋鍵)
  • DROP INDEX - 刪除索引

MYSQL文法:

show databases;

use 資料庫名;

show tables;

desc 表名--查看資料表的結構

bin\ mysql -p 密碼 -u 使用者名稱 -h主機名稱 --default-character-set=utf8  串連遠程主機的mysql服務

alter table tablename modify; 只能一次修改一個列

alter table tablename rename to newname;

alter table tablename change 列名 to 新列名 type;

(constraint 約束名)約束定義;---多列約束

primary key( 列名) ----多列主鍵約束,不能自訂約束名稱

列名 type auto_increment primary key---自增長主鍵

alter table tablename drop index 約束名;

建立外鍵約束時,MYSQL會為該列建立索引;

列名 類型 references 表名(主鍵名);

外鍵參照自身表的主鍵----自關聯

on detete cascade / on delete set null--主鍵記錄刪除,從鍵也刪除

create index index_name on table_name (column1, column2...);

create or replace view view_name as subquery  with check option;不允許修改視圖資料

DML:

insert into ; update; delete from;

concat("xxx","xxx")字串串連

distinct、in、like、is null

 PS:不建議在JAVA程式中使用特定資料庫的函數,因為會導致程式碼與特定資料庫耦合;如果移植要重新開啟來源程式修改SQL語句。

where 與having的區別

where用於過濾行,having用於過濾組

where子句中不能使用組函數(avg(), count(), max(),min(),sum()),having可以

cross join, natural join, join using, join on

left join, right join ,full join

子查詢

集合運算select union/minus/

JDBC常用類和介面:在java.sql包下重要的幾個類或對象

DriverManager

Connection

Statement

ResultSet

例子:記得添加mysql -connector-java 的jar包

public class JDBCTest {    public static void main(String[] args) throws ClassNotFoundException, SQLException, InterruptedException {        // 載入驅動        Class.forName("com.mysql.jdbc.Driver");        try {            Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/sakila", "root", "password");            Statement stmt = conn.createStatement();            ResultSet rs = stmt.executeQuery("select * from city LIMIT 5");            while (rs.next()) {                System.out.println(                        rs.getInt(1) + "\t" + rs.getString(2) + "\t" + rs.getInt(3) + "\t" + rs.getTimestamp(4));                Thread.sleep(3000);            }        } finally {        }    }}輸出:1    A Corua (La Corua)    87    2006-02-15 04:45:25.02    Abha    82    2006-02-15 04:45:25.03    Abu Dhabi    101    2006-02-15 04:45:25.04    Acua    60    2006-02-15 04:45:25.05    Adana    97    2006-02-15 04:45:25.0

 

//執行SQL,PreparedStatement與Statement對比public class PreparedStatementTest {    private String driver;    private String url;    private String user;    private String pass;    public void initParam(String paramFile) throws Exception {        Properties props = new Properties();        props.load(new FileInputStream(paramFile));        driver = props.getProperty("driver");        url = props.getProperty("url");        user = props.getProperty("user");        pass = props.getProperty("pass");    }    public void insertUseStatement() throws Exception    {        Class.forName(driver);        long start = System.currentTimeMillis();        try(                Connection conn = (Connection) DriverManager.getConnection(url,user,pass);                Statement stmt = conn.createStatement())        {            for(int i=0;i<100;i++)            {                stmt.executeUpdate("insert into student_table values("+"null,‘姓名"+i+"‘, 1)");            }            System.out.println("using statement:"+(System.currentTimeMillis()-start));        }    }    //PreparedStatement能防止SQL注入,?代表預留位置    public void insertUsePrepare() throws Exception    {        Class.forName(driver);        long start=System.currentTimeMillis();        try(                Connection conn = DriverManager.getConnection(url,user,pass);                PreparedStatement pstmt=conn.prepareStatement("insert into student_table values(null,?,1)"))        {            for(int i =0;i<100;i++)            {                pstmt.setString(1,"姓名"+i);                pstmt.executeUpdate();            }            System.out.println(" using PreparedStatement:"+(System.currentTimeMillis()-start));        }    }        public static void main(String[] args) throws Exception {        // TODO Auto-generated method stub        PreparedStatementTest pt = new PreparedStatementTest();        pt.initParam("E:\\workspace\\learning\\mysql.ini");        pt.insertUseStatement();        pt.insertUsePrepare();    }}輸出:using statement:3423 using PreparedStatement:3176
View Code

 

JDBC編程JAVA

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.