資料庫概念:
資料庫(Database)是按照資料結構來組織、存儲和管理資料的建立在計算機儲存設備上的倉庫。
---------資料庫伺服器,mysql(管理)
資料庫伺服器---->N多庫---->N張表---->行和列
連接配接資料庫:
mysql -h localhost -uUername -pPassWord
-h 如果不寫,預設為localhost
資料庫伺服器管理多張庫---->多表成庫
入門語句:
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;
8.修改資料庫名
答案:不能。變通方法改
9.最簡單的建表語句
int---整型
create table score (
stu int,
name varchar(20),
ke varchar(10),
fen int
);
10.檢視表的結構 desc tableName;
增(insert)、删(delete)、改(update)、查
增(insert)
insert into nsg
(id,title,name,content)
values
(1,'又來了','李四','剛來能不能當老大');
insert into 表名(字段名) values (屬性值);
删(delete)
delete from 表 where 條件表達式;
delete from nsg where name = '李四';
改(update)
update 資料表名 set 字段名=新的字段值 where 條件表達式;
update nsg
set
id = 2,
content = '偏要當老大'
where
name = '李四';
查(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
);
列:不同的列類型占的空間不一樣。
選列的原則:夠用又不浪費。
整型
tinyint ----預設為-128->127
thinyint
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依舊笑春風。