java數(shù)據(jù)庫編程
SUN公司為了簡化、統(tǒng)一對數(shù)據(jù)庫的操作,定義了一套Java操作數(shù)據(jù)庫的規(guī)范剩岳,稱為JDBC(Java DataBabse Connectivity)java數(shù)據(jù)庫連接------------------JDBC是一套連接數(shù)據(jù)庫SUN公司定義的標(biāo)準(zhǔn)接口,具體接口實(shí)現(xiàn)交給數(shù)據(jù)庫廠商去實(shí)現(xiàn)掘鄙。開發(fā)人員只需要學(xué)習(xí)sun提供的JDBC接口兄猩,并通過JDBC加載具體的驅(qū)動,就可以直接操作數(shù)據(jù)庫儡循。
思考:JDBC可以操作數(shù)據(jù)庫嗎?
- 學(xué)習(xí)案例:
數(shù)據(jù)庫及表的建立:
Create database u16jdbc default character set utf8;
Create table user(
Id int primary key auto_increment,
name varchar (50),
password varchar(50),
email varchar(60),
birthday date
);
Insert into user(name,password,email,birthday) values('fg','123456','fg@sina.com','1994-09-09');
Insert into user(name,password,email,birthday) values('zj','123456','zj@qq.com','1993-11-28');
Insert into user(name,password,email,birthday) values('wjz','123456','wjz@qq.com','1990-01-22');
JDBC開發(fā)步驟
1.搭建開發(fā)環(huán)境:把數(shù)據(jù)庫廠商的驅(qū)動jar包加入到構(gòu)建路徑中
2.注冊驅(qū)動
3.得到連接
4.創(chuàng)建代表SQL語句的對象
5.執(zhí)行SQL語句
6.如果是查詢語句:返回結(jié)果集
7.釋放資源
JDBC規(guī)范中常用的接口或類
DriverManager
驅(qū)動管理器:
registerDriver(Driver driver)
向 DriverManager 注冊給定驅(qū)動程序征冷。
Driver:在jdbc規(guī)范中是一個接口择膝,它的現(xiàn)實(shí)是數(shù)據(jù)庫廠商來實(shí)現(xiàn)的。
注冊驅(qū)動的方式兩種:
- new com.mysql.jdbc.Driver();
- Class.foreName(驅(qū)動的全路徑);推薦使用
Connection
程序跟數(shù)據(jù)庫進(jìn)行會話需要一個連接检激。
數(shù)據(jù)庫的連接 : DriverManager.getConnnection();
得到連接的三種方式:
- Connection getConnection(String url) 試圖建立到給定數(shù)據(jù)庫 URL 的連接肴捉。
- Connection getConnection(String url, Properties info) 試圖建立到給定數(shù)據(jù)庫 URL 的連接腹侣。
- Connection getConnection(String url, String user, String password) 試圖建立到給定數(shù)據(jù)庫 URL 的連接
Statement
SQL 語句發(fā)送到數(shù)據(jù)庫
Statement connection.createStatement();
常用的三種方法:
- boolean execute(String sql) 什么sql語句都可以執(zhí)行
- ResultSet executeQuery(String sql) 執(zhí)行DQL語句返回值是ResultSet結(jié)果集
- int executeUpdate(String sql) 執(zhí)行DML語句返回的值指的是影響的行數(shù)
ResultSet
查詢結(jié)果集:查詢的結(jié)果被ResulSet管理。
得到字段列數(shù)據(jù):
可以把ResultSet看成游標(biāo)齿穗,可以移動傲隶。
游標(biāo)向下移動方法 : boolean next();
ResultSet類提供了一些取字段的方法
Object getObject(int index);
Object getObject(String colunmName);
Int getInt(int index);
Int getInt(String colunmName);
……….
釋放資源
Connection 一定要關(guān)閉。
抽取JDBC工具類
public class JdbcUtil {
private static String url;
private static String user;
private static String password;
private static String driverClass;
static {
try {
Properties pt = new Properties();
pt.load(JdbcUtil.class.getClassLoader().getResourceAsStream("db.properties"));
url = pt.getProperty("url");
user = pt.getProperty("user");
password = pt.getProperty("password");
driverClass = pt.getProperty("driverClass");
//推薦使用的窃页。
Class.forName(driverClass);
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static void release(Connection connection, Statement statement, ResultSet rs) {
try {
if (rs != null) {
rs.close();
rs = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (statement != null) {
statement.close();
statement = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (connection != null) {
connection.close();
connection = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
}
JDBC進(jìn)行單表的CRUD
PreparedStatement接口
PreparedStatement表示預(yù)編譯的 SQL 語句的對象跺株。
Statement、PreparedStatement區(qū)別:
相同點(diǎn):都是表示的是sql語句的對象
不同點(diǎn):
- Stament是帶有返回結(jié)果集脖卖。
- PreparedStatement是不帶結(jié)果集的乒省,但是它可以處理Sql語句當(dāng)中帶有‘?’來占位的Sql語句
- Stament不能防止SQL注入
- PreparedStatement > Statement 效率高
能不用statemen就不用畦木。