浪费别人的时间等于是谋财害命,浪费自己的时间等于是慢性自杀。 —— 列宁

JDBC小结

JDBC
1.简介
JDBC : Java DateBase Connectivity
    (1) Java程序用于连接数据库的一组接口规范
     (2) 接口的具体实现由各个数据库厂商提供,简化了程序员在连接
     不同数据库时所需要的编码。
     (3) jdbc驱动:各个数据库厂商提供的具体实现类,用于取得与数据库的连接(mysql:connector.jar)
2.JDBC核心类
     (1) DriverManager:用于获取连接数据库的Connection对象
     (2) Connection:数据库连接对象,如果能成功获取,说明连接数据库成功
     (3) Statement:用于执行sql语句,操作数据库,可以从Connection对象获取
     (4) ResultSet:用于存储查询的结果集,提供了一系列获取查询结果的方法,通过Statement获取该对象
     注意:只有执行查询语句才有结果集
     增删改操作返回int状态值
3.核心步骤(mysql)
     (1).导入jar包 : mysql-connector-java-5.1.13-bin.jar(connectorJ)(可以从mysql官网下载)
     (2).获取Connection对象
     四大参数:
     [1] String driverClassName = "com.mysql.jdbc.Driver" --> 数据库连接驱动
     [2] String url = "jdbc:mysql://localhost:3306/databaseName" --> 数据库所在的位置 
     注: jdbc:mysql是协议, localhost代表本地IP,3306代表端口号
     (在url中可以追加数据库用户名和密码:?username:root&password:xxx)
     [3] String username="xxxx"; 连接数据库的用户名
     [4] String password="xxxx"; 用户密码
     Class.forName(driverClassName) : 反射方式加载驱动类
     Connection conn = DriverManager.getConnection(url,username,password) : 获取连接对象
     (3).得到Statement对象
     > Statement stmt = con.createStatement();
     (4).执行sql语句
     [1] 发送更新sql语句:int row = stmt.executeUpdate(String sql); --> 若执行增删改则到此结束
     [2] 发送查询sql语句:ResultSet rs = stmt.executeQuery(String sql); --> 执行查询请参照(5)
     (5).操作ResultSet获取数据:
     注: 
     ResultSet内部原理简介:ResultSet在内部持有一个行指针(游标),默认指向第一行之前
     因此在取出数据时要注意调用next()方法移动该指针使其指向下一行
     while(rs.next()){
     rs.getXxx(int colIndex); // 根据列标取得数据
     rs.getXxx(String colName); // 根据列名取得数据(较为方便)
     }
     以下四种获取列元素的方法可供选择,根据实际需求灵活使用:
     [1] int getInt(int i):获取第i列的数据,转换成int类型返回
     [2] int getInt(String colName):rs.getString("ename"),获取当前行,名为ename的列数据
     [3] String getString(int i):获取第i列的数据,转换成String类型返回
     [4] Object getObject(int i):获取第i列的数据,转换成Object类型返回
     (6).关闭资源
     rs.close(); // 关闭结果集资源
     stmt.close(); // 关闭Statement资源
     conn.close(); // 断开连接
    
4.代码示例
/* JDBCUtils: 获取连接,关闭资源的工具类 */
package com.itheima.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtils {
// 定义四个获取连接的必要参数,可以从配置文件获取,也可以自己给出
private static String driverClassName = "com.mysql.jdbc.Driver";
private static String url = "jdbc:mysql://localhost:3306/dbtest1";
private static String username = "root";
private static String password = "zhoubowen";
// 静态代码块用于加载连接驱动
static{
try {
Class.forName(driverClassName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 获取数据库连接
public static Connection getConnection() throws SQLException{
Connection conn = DriverManager.getConnection(url, username, password);
return conn;
}
// 关闭资源
public static void closeAll(Connection conn, Statement stmt, ResultSet rs){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
/* 测试Demo */ 
package com.itheima.jdbc;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Demo {
public static void main(String[] args) throws SQLException {
// 获取连接: 关键
Connection conn = JDBCUtils.getConnection();
// 获取执行语句的Statement对象
Statement stmt = conn.createStatement();
// 获取查询结果集对象
ResultSet rs = stmt.executeQuery("select * from test");
// 获取数据
while(rs.next()){
String t_name = rs.getString("t_name");
String t_sex = rs.getString("t_sex");
System.out.println(t_name + ":" + t_sex);
}
// 关闭资源
JDBCUtils.closeAll(conn, stmt, rs);
}
}
posted @ 2015-10-25 22:20  一谦的视界  阅读(181)  评论(0编辑  收藏  举报