JDBC的使⽤⽅法及注意事项加载不同数据库⼚商提供的驱动
查询来说
(1)铺路(获取连接Connection)
(2)下圣旨(sql命令)
(3)⼀个⼩太监帮皇上执⾏圣旨(Statement/PreparedStatement)
(4)拉回西⽠(返回结果集ResultSet)
(5)关闭城门(释放资源)
Class.forname("") 后加载 —》JVM 反射
Student s=new Student(); 先加载
JVM-》Student
为什么需要JDBC
JDBC是Java数据库连接技术的简称,提供连接各种常⽤数据库的能⼒
JDBC的⼯作原理
JDBC API
提供者:Sun公司
内容:供程序员调⽤的接⼝与类,集成在java.sql和javax.sql包中,如:
DriverManager类
Connection接⼝
Statement接⼝
ResultSet接⼝
DriverManager
提供者:Sun公司
作⽤:管理各种不同的JDBC驱动
JDBC 驱动
提供者:数据库⼚商
作⽤:负责连接各种不同的数据库
JDBC API主要功能:与数据库建⽴连接、执⾏SQL 语句、处理结果
DriverManager :依据数据库的不同,管理JDBC驱动
Connection :负责连接数据库并担任传送数据的任务
Statement :由 Connection 产⽣、负责执⾏SQL语句
ResultSet:负责保存Statement执⾏后所产⽣的查询结果
JDBC编程模板
try {
Class.forName(JDBC驱动类);
}
… …
try {
Connection Connection(URL,数据库⽤户名,密码);
Statement stmt = ateStatement();
ResultSet rs = uteQuery("SELECT a, b, c FROM table1;");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
rs.close();
stmt.close();
con.close();
}
… …
JDBC驱动
JDBC驱动由数据库⼚商提供
在个⼈开发与测试中,可以使⽤JDBC-ODBC桥连⽅式
在⽣产型开发中,推荐使⽤纯Java驱动⽅式
使⽤JDBC-ODBC桥⽅式连接数据库
将对JDBC API的调⽤,转换为对另⼀组数据库连接API的调⽤
优点:可以访问所有ODBC可以访问的数据库
缺点:执⾏效率低、功能不够强⼤
… …
Connection conn = null;
try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver");
} catch (ClassNotFoundException e) {
… …
}
try {
conn = Connection("jdbc:odbc:myDB",
"root", "root" );
//省略代码 … …
} catch (SQLException e) {
… …
} finally {
try {
try catch的使用方法conn.close();
} catch (SQLException e) {
… …
}
}
使⽤纯Java⽅式连接数据库
由JDBC驱动直接访问数据库
优点:完全Java代码,快速、跨平台
缺点:访问不同的数据库需要下载专⽤的JDBC驱动
… …
Connection conn = null;
try {
Class.forName("sql.jdbc.Driver");
} catch (ClassNotFoundException e) {
… …
}
try {
conn = Connection(
"jdbc:mysql://localhost:3306/epet","epetadmin", "0000");
//省略代码 … …
} catch (SQLException e) {
… …
} finally {
try {
conn.close();
} catch (SQLException e) {
…
…
}}
Statement常⽤⽅法
ResultSet executeQuery(String sql) 执⾏SQL查询并获取到ResultSet对象
int executeUpdate(String sql) 可以执⾏插⼊、删除、更新等操作,返回值是执⾏该操作所影响的⾏数boolean execute(String sql) 可以执⾏任意SQL语句,然后获得⼀个布尔值,表⽰是否返回ResultSet
ResultSet常⽤⽅法
boolean next() 将游标从当前位置向下移动⼀⾏
boolean previous() 游标从当前位置向上移动⼀⾏
void close() 关闭ResultSet 对象
int getInt(int colIndex) 以int形式获取结果集当前⾏指定列号值
int getInt(String colLabel) 以int形式获取结果集当前⾏指定列名值
float getFloat(int colIndex) 以float形式获取结果集当前⾏指定列号值
float getFloat(String colLabel) 以float形式获取结果集当前⾏指定列名值
String getString(int colIndex) 以String 形式获取结果集当前⾏指定列号值
String getString(String colLabel) 以String形式获取结果集当前⾏指定列名值
为什么要使⽤PreparedStatement
提⾼了安全性
提⾼了代码的可读性和可维护性
提⾼了SQL语句执⾏的性能
使⽤PreparedStatement 接⼝
继承⾃ Statement接⼝
⽐Statement对象使⽤起来更加灵活,更有效率
使⽤PreparedStatement更新宠物
Connection conn = null;
PreparedStatement pstmt = null;
…
// 建⽴连接
… …
// 更新狗狗信息到数据库
String sql="update dog set health=?,love=? where id=?"; pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, 80);
pstmt.setInt(2, 15);
pstmt.setInt(3, 1);
… …
pstmt.close();
conn.close();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论