天天看點

先學mysql還是jdbc_mysql資料庫和JDBC學習

資料庫概念:

資料庫(Database)是按照資料結構來組織、存儲和管理資料的建立在計算機儲存設備上的倉庫。

---------資料庫伺服器,mysql(管理)

資料庫伺服器---->N多庫---->N張表---->行和列

連接配接資料庫:

mysql -h  localhost -uUername -pPassWord

先學mysql還是jdbc_mysql資料庫和JDBC學習

-h 如果不寫,預設為localhost

先學mysql還是jdbc_mysql資料庫和JDBC學習

資料庫伺服器管理多張庫---->多表成庫

入門語句:

1.檢視目前伺服器下的庫

show databases;

2.建立資料庫

create database DBName[];

3.删除資料庫

drop database DBname;

4.選擇資料庫

use DBname;

5.檢視庫下面所有表

show tables;

6.删除一張表

drop table tableName;

7.修改表名

rename table oldName to newName;

先學mysql還是jdbc_mysql資料庫和JDBC學習

8.修改資料庫名

答案:不能。變通方法改

先學mysql還是jdbc_mysql資料庫和JDBC學習

9.最簡單的建表語句

int---整型

create table score (

stu int,

name varchar(20),

ke varchar(10),

fen int

);

先學mysql還是jdbc_mysql資料庫和JDBC學習

10.檢視表的結構  desc  tableName;

先學mysql還是jdbc_mysql資料庫和JDBC學習

增(insert)、删(delete)、改(update)、查

增(insert)

insert into nsg

(id,title,name,content)

values

(1,'又來了','李四','剛來能不能當老大');

insert into 表名(字段名) values (屬性值);

先學mysql還是jdbc_mysql資料庫和JDBC學習

删(delete)

delete from 表 where 條件表達式;

delete from nsg where name = '李四';

先學mysql還是jdbc_mysql資料庫和JDBC學習

改(update)

update 資料表名 set 字段名=新的字段值 where 條件表達式;

update nsg

set

id = 2,

content = '偏要當老大'

where

name = '李四';

先學mysql還是jdbc_mysql資料庫和JDBC學習

查(select)

select name,age from nsg where sex = '女' order by age;

解決字元集問題

預設建表采用utf-8,在windows下面的cmd建表采用的是GBK,是以要聲明字元集。------沒發現問題

建表:聲明列聲明列的過程。

create table class (

id int primary key auto_increment,

name varchar(10),

age tinyint

);

列:不同的列類型占的空間不一樣。

選列的原則:夠用又不浪費。

整型

先學mysql還是jdbc_mysql資料庫和JDBC學習

tinyint ----預設為-128->127

thinyint

先學mysql還是jdbc_mysql資料庫和JDBC學習

NOTE:  1、建表語句比較繁瑣,先用記事本寫好再複制粘貼,友善修改;發現自己打錯,可以用“/c”退出。

2、建表時用的是括号“()”而不是“{}”。

3、

使用Sql腳本文法:source 路徑

Connection con = null;

----摘抄自http://www.cnblogs.com/X-World/p/5686122.html

1)首先,null是關鍵字,像public、static、final。

2)就像每種基本類型都有預設值一樣,如int預設值為0,boolean的預設值為false,null是任何引用類型的預設值,不嚴格的說是所有object類型的預設值。就像你建立了一個布爾類型的變量,它将false作為自己的預設值,Java中的任何引用變量都将null作為預設值。這對所有變量都是适用的,如成員變量、局部變量、執行個體變量、靜态變量(但當你使用一個沒有初始化的局部變量,編譯器會警告你)。為了證明這個事實,你可以通過建立一個變量然後列印它的值來觀察這個引用變量。

3)null既不是對象也不是一種類型,它僅是一種特殊的值,你可以将其賦予任何引用類型,你也可以将null轉化成任何類型。

4)null可以指派給引用變量,你不能将null賦給基本類型變量,例如int、double、float、boolean。編譯器将會報錯。

常用接口:

-----源自博文http://www.cnblogs.com/erbing/p/5805727.html

1.注冊驅動 (隻做一次)

方式一:Class.forName(“com.MySQL.jdbc.Driver”);

推薦這種方式,不會對具體的驅動類産生依賴。

方式二:DriverManager.registerDriver(com.mysql.jdbc.Driver);

會造成DriverManager中産生兩個一樣的驅動,并會對具體的驅動類産生依賴。

NOTE:

JDBC4.0以及後續版本支援自動驅動程式發現功能,不需要使用者預先加載資料庫驅動程式了。為了確定程式資料庫驅動程式的類,當執行程式時,必須将類的位置包含在程式的類路徑中。

2.Connection接口

Connection與特定資料庫的連接配接(會話),在連接配接上下文中執行sql語句并傳回結果。DriverManager.getConnection(url, user, password)方法建立在JDBC URL中定義的資料庫Connection連接配接上。

連接配接MySql資料庫:Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database", "user", "password");

連接配接Oracle資料庫:Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@host:port:database", "user", "password");

連接配接SqlServer資料庫:Connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port; DatabaseName=database", "user", "password");

常用方法:

createStatement():建立向資料庫發送sql的statement對象。

prepareStatement(sql) :建立向資料庫發送預編譯sql的PrepareSatement對象。

prepareCall(sql):建立執行存儲過程的callableStatement對象。

setAutoCommit(boolean autoCommit):設定事務是否自動送出。

commit() :在連結上送出事務。

rollback() :在此連結上復原事務。

3.Statement接口

用于執行靜态SQL語句并傳回它所生成結果的對象。

三種Statement類:

Statement:由createStatement建立,用于發送簡單的SQL語句(不帶參數)。

PreparedStatement :繼承自Statement接口,由preparedStatement建立,用于發送含有一個或多個參數的SQL語句。PreparedStatement對象比Statement對象的效率更高,并且可以防止SQL注入,是以我們一般都使用PreparedStatement。

CallableStatement:繼承自PreparedStatement接口,由方法prepareCall建立,用于調用存儲過程。

常用Statement方法:

execute(String sql):運作語句,傳回是否有結果集

executeQuery(String sql):運作select語句,傳回ResultSet結果集。

executeUpdate(String sql):運作insert/update/delete操作,傳回更新的行數。

addBatch(String sql) :把多條sql語句放到一個批進行中。

executeBatch():向資料庫發送一批sql語句執行。

4.ResultSet接口

ResultSet提供檢索不同類型字段的方法,常用的有:

getString(int index)、getString(String columnName):獲得在資料庫裡是varchar、char等類型的資料對象。

getFloat(int index)、getFloat(String columnName):獲得在資料庫裡是Float類型的資料對象。

getDate(int index)、getDate(String columnName):獲得在資料庫裡是Date類型的資料。

getBoolean(int index)、getBoolean(String columnName):獲得在資料庫裡是Boolean類型的資料。

getObject(int index)、getObject(String columnName):擷取在資料庫裡任意類型的資料。

ResultSet還提供了對結果集進行滾動的方法:

next():移動到下一行

Previous():移動到前一行

absolute(int row):移動到指定行

beforeFirst():移動resultSet的最前面。

afterLast() :移動到resultSet的最後面。

使用後依次關閉對象及連接配接:ResultSet → Statement → Connection

使用JDBC步驟

(1)建立連接配接(Connection)-----------》建立執行SQL語句的statement------------>處理執行結果(ResultSet)----------->釋放資源

public classJdbc {public static voidmain(String[] args){

Connection cnn= null;

Statement smt= null;

String name= "'admin111' or 1=1";try{

Class.forName("com.mysql.jdbc.Driver");

cnn= DriverManager.getConnection("jdbc:mysql://localhost:3306/guet","root","root");

smt=cnn.createStatement();

ResultSet rs= smt.executeQuery("select username from t_user where username="+name);while(rs.next()){

String username= rs.getString("username");

System.out.println(username);

}

}catch(Exception e) {

e.printStackTrace();

}finally{try{if(smt != null)

smt.close();if(cnn != null)

cnn.close();

}catch(SQLException e) {

e.printStackTrace();

}

}

}

}

由上面的例子可以發現采用statement容易造成sql注入,是以推薦使用prepareStatement預編譯。一方面確定了安全性,另一方面使代碼結構更合理。但目前基本都是使用架構了,哈哈。

上層架構層出不窮,底層jdbc依舊笑春風。