目标
掌握连接数据库的四个步骤
理解工厂模式
概念
1.工厂模式
三种工厂模式都是为了解决对象创建过程中的耦合问题,使得系统更容易扩展和维护。简单工厂模式适用于创建逻辑相对简单的情况;工厂方法模式适用于有多个产品族需要创建的情况;抽象工厂模式适用于需要创建一系列相关或依赖的产品对象的情况。
2.java为了保证支持所有的数据库 提供给所有的数据库厂商三个核心接口
Connection 连接 | Statement 语句 | ResultSet 结果集 |
3.java访问数据库 需要提供四个步骤
导入jar包
1.根目录新建文件夹命名为 lib
2.右键jar包->添加至构建路径
都是三个阶段:
1.准备(获取连接,定义sql,定义statement或prepareStatement)
2.使用(stmt.executeUpdate,存储参数和pstmt.executeUpdate)
3.销毁(关流).
connection案例代码
public class ConnectionTest {
public static void main(String[] args) {
try {
//1.注册驱动
//DriverManager.registerDriver(new Driver());
//1.1也可以使用反射加载驱动
//1.8版本之后 可以不加载 自动加载
// Class.forName("com.mysql.jdbc.Driver");
//2.提供数据库的url
String url = "jdbc:mysql://localhost/?";
//3.提供用户名、密码
String password = "?";
String username = "?";
//4.生成连接对象
Connection con= DriverManager.getConnection(url, username,password);
System.out.println(con);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
statement案例代码
public class StatementTest {
public static void main(String[] args) {
//1.获取连接
Connection conn = JDBCUtils.getConnection();
Date date = new Date();
//2.定义sql
String sql = "insert into test6(name,password,create_date) "
+ "values('李思','123','"+ new java.sql.Date(date.getTime()) +"')";
//3.获取Statement对象
Statement stmt = null;
try {
stmt = conn.createStatement();
//4.执行DML语句时 使用executeUpdate
int result = stmt.executeUpdate(sql);
System.out.println(result > 0 ? "添加成功" : "添加失败");
} catch (SQLException e) {
e.printStackTrace();
} finally {
//5.关流
JDBCUtils.close(conn,stmt);
}
}
}
prepareStatement 案例代码
/**
* 由于Statement存储数据时需要拼接字符串
* 会造成sql注入问题
*
* sql注入:拼接字符串时 被强行插入不符合规则数据 造成数据库宕机
*
* 所以java提供了Statement接口的子接口
* PreparedStatement 可以用来提供可变参数
*
*
*
*
*
* */
public class PrepareTest {
public static void main(String[] args) {
//1.获取连接
Connection conn = JDBCUtils.getConnection();
//2.声明PreparedStatement对象
PreparedStatement pstmt = null;
//3.定义sql
String sql = "insert into test6 values(null,?,null,?)";
try {
//4.生成pstmt对象
pstmt = conn.prepareStatement(sql);
//5.存储参数
pstmt.setString(1, "赵柳");
pstmt.setDate(2, new java.sql.Date(new Date().getTime()));
//6.执行sql并获取返回值
int result = pstmt.executeUpdate();
System.out.println(result > 0 ? "添加成功" : "添加失败");
} catch (SQLException e) {
e.printStackTrace();
} finally {
//7.关流
JDBCUtils.close(conn, pstmt);
}
}
}
result 案例代码
查询多行数据
public class ResultSetTest1 {
public static void main(String[] args) {
//0.声明一个Person对象
Person person = null;
//1.获取连接
Connection conn = JDBCUtils.getConnection();
//2.声明pstmt和rs对象
PreparedStatement pstmt = null;
ResultSet rs = null;
//3.定义sql
String sql = "select * from test6 where id = ?";
try {
//4.根据sql生成pstmt
pstmt = conn.prepareStatement(sql);
//5.传递参数
pstmt.setInt(1, 2);
//6.执行sql并获取rs对象
rs = pstmt.executeQuery();
//7.遍历rs对象 并获取数据
while(rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String password = rs.getString("password");
Date createDate = rs.getDate("create_date");
person = new Person(id, name, password, createDate);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JDBCUtils.close(conn, pstmt, rs);
}
System.out.println(person);
}
}
评论 (0)