JDBC(1)----------基础和简单实现案例
1. JDBC是由SUN公司提出的一组规范,这组规范主要是由一组接口构成。主要作用就是访问数据库。
2、JDBC核心编程思想:
3、核心API
4、使用JDBC开发(java工程,Oracle数据库):
1)搭建开发环境:
创建一个java project ------> 引入(数据库驱动jar)ojdbc6.jar
2)编码(伪代码):
a)加载驱动:将实现类加载到内存中 Class.forName("oracle.jdbc.OracleDriver");
b)获取Connection Connection conn = DriverManager.getConnection(url,username,password);
c)准备sql语句 String sql = "";
e)获取PreparedStatement对象 PreparedStatement psmt = conn.preparedStatement(sql);
f)sql语句是增删改语句:
int i = psmt.executeUpdate(); //返回更新的行的个数
sql语句是查询语句:
ResultSet rs = psmt.executeQuery(); //返回的结果集,常用方法 next()
g)释放资源,关闭连接,包括:conn,rs,ps
注意:引入(数据库驱动jar)两种方式:
第一种方式:右键--->bulid path--->config build path--> Librarys -- > add Externaljar(到本地磁盘找到jar包所在位置)
第二种方式:在项目名上右键 new folder --> 将驱动jar放到此目录下 --> 在jar包上右键 -->build path -->add to build path
5、在4题操作中,书写sql语句,可以用占位符 ‘?’,但是我们需要进行匹配占位符(利用setXXX(),getXXX()),详细做法在下面会用示例展示。
6、Statement 和 PreparedStatement的区别:
a)使用Statement执行sql,是以字符串拼接方式给sql语句加入参数,这是增加了Sql注入的风险
b)使用PreparedStatement 可以避免sql注入,提高程序的可读性、可维护性。
7、java中的日期类型:
a)java.util.Date utilDate = new java.util.Date();
b)java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
c)实际应用转换:字符串日期格式
String str='2018-4-8';
SimpleDateFormat sdf = new SimpleDateFormat('yyyy-MM-dd');
java.util.Date utilDate = sdf.parse(str);
long time = utilDate.getTime();
java.sql.Date sqlDate = new java.sql.Date(time);
8、JDBC工具类封装
无论是对数据查询操作还是增、删、改操作,都相同代码,此时,我们需要将此代码进行封装。
封装思路:a)确定工具类中封装那些方法:方法的修饰符 返回值类型 都是什么。
对于工具类而言:修饰符是 public static 目的:便于类名直接调用
返回值类型: 根据实际实现的功能而定
方法名:做到见名知义
9、封装JDBCUtil例1如下 :
public class JDBCUtil {
static{
try {
Class.forName("oracle.jdbc.OracleDriver");
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","hr","123");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void closeAll(PreparedStatement ps,Connection conn,ResultSet rs){
try{
if(rs != null){ // 避免空指针异常
rs.close();
}
if(ps != null){
ps.close();
}
if(conn != null){
conn.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
10、对于9中的代码,我们如果更改数据库、用户名、密码,我们操作需要打开源代码进行更改,那么有没有一种方法,不用打开源代码就能更新成功呢?答案是 有。利用文件、配置文件等方式,我们通常用XXX.properties和XXX.xml,在本题中我们应该选用哪一种比较好呢?
注:xxx.XML类型的配置文件 特点:以标签的形式保存信息;
xxx.properties类型配置文件 特点:以key = value形式保存信息
以上特点:相比之下,我们选用XXX.properties,因为我们文件中保存的信息是key=value形式
优化如下:
创建一个jdbc.properties配置文件,放在src根目录下,内容:
driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
username=hr
password=123
完成JDBCUtil的优化如下:
public class JDBCUtil {
public static Properties p = new Properties();
static{
InputStream ins = null;
try {
ins = JDBCUtil.class.getResourceAsStream("/jdbc.properties");
p.load(ins);
Class.forName(p.getProperty("driverClassName"));
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
ins.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static Connection getConnection(){
Connection conn = null;
try {
conn = DriverManager.getConnection(p.getProperty("url"),p.getProperty("username"),p.getProperty("password"));
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
public static void closeAll(PreparedStatement ps,Connection conn,ResultSet rs){
try{
if(rs != null){ // 避免空指针异常
rs.close();
}
if(ps != null){
ps.close();
}
if(conn != null){
conn.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
}
推荐阅读
-
阿里Java学习路线:阶段 1:Java语言基础-Java语言高级特性:第24章:反射与简单Java类:课时110:属性自动赋值实现思路
-
荐 Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果
-
JAVA_ JDBC基础、单元测试、JDBC API 、JDBC数据库增删改查、JDBC工具类抽取、实现简单的用户登录功能、解决SQL注入问题:preparedStatement
-
JDBC(1)----------基础和简单实现案例
-
荐 Unity 基础 之 OnMouse 简单实现 GameObject 和 UGUI 元素随着鼠标移动,拖动的效果
-
Python基础1—变量和简单数据类型