0、原生jdbc工厂类
一、代码结构

二、JDBCFactory.java
package com.test; import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties; public class JDBCFactory {
//定义静态属性
private static String DRIVER;
private static String URL;
private static String USERNAME;
private static String PASSWORD; //静态代码块,用来加载资源文件中的信息,且只会加载一次
static{
//1、加载数据配置文件(资源对象)
Properties pro=new Properties();
//2、将资源读取成字节输入流
InputStream is=JDBCFactory.class.getResourceAsStream("jdbc.sqlserver.properties");
try {
//3、通过资源对象加载字节输入流
pro.load(is);
//4、资源对象通过key来获取对应的文件中的value
DRIVER=pro.getProperty("jdbc.driver");
URL=pro.getProperty("jdbc.url");
USERNAME=pro.getProperty("jdbc.username");
PASSWORD=pro.getProperty("jdbc.password");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} /**建立数据库连接的静态方法
* @return 如果有异常,则会返回null
*/
public static Connection getConn(){
Connection ct=null;
try {
//1、加载驱动
Class.forName(DRIVER);
//2、得到连接
ct=DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return ct;
} /**
* 静态方法,用来关闭资源,注意关闭顺序,否则可能报错
*/
public static void closeAll(Connection ct,Statement st,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(st!=null){
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ct!=null){
try {
ct.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} }
三、jdbc.sqlserver.properties
jdbc.driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc.url=jdbc:microsoft:sqlserver://127.0.0.1:1433;databaseName=spdb1
jdbc.username=sa
jdbc.password=m123
四、TestClass.java
package com.test; import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp; public class TestClass {
Connection ct;
PreparedStatement ps=null;
ResultSet rs; public static void main(String[] args) {
TestClass tc=new TestClass();
tc.ct=JDBCFactory.getConn();
String sql="insert into student_table(stuname,stuage,stusex,stubirth,stusubj) values(?,?,?,?,?)";
try {
tc.ps=tc.ct.prepareStatement(sql);
tc.ps.setString(1, "哈哈");
tc.ps.setInt(2, 20);
tc.ps.setString(3, "男");
tc.ps.setTimestamp(4, null);
tc.ps.setString(5, "呵呵");
tc.ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
JDBCFactory.closeAll(tc.ct, tc.ps, null);
}
}
}
五、说明
jbdc的常用API:
1.Connection:数据库的链接对象
2.statement:数据库sql执行对象
3.preparedStatment:sql的预编译处理对象,是statement子接口
4.resultset:返回查询的结果集
jdbc开发步骤:
1.在项目中加入驱动jar包
2.写jdbc链接代码
preparedStatment 预编译sql命令接口:
1.会对sql语句进行编译检查,可以用参数占位符的方式编写sql语句
2.作用:比普通statement接口执行效率更高。可以防止sql注入的侵入
0、原生jdbc工厂类的更多相关文章
- 使用原生JDBC方式对数据库进行操作
使用原生JDBC方式对数据库进行操作,包括六个步骤: 1.加载JDBC驱动程序 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM.可以通过java.lang.Class类的静态方法forNa ...
- 1、原生jdbc连接oracle数据库简单介绍
一.jbdc的常用API1.Connection:数据库的链接对象2.statement:数据库sql执行对象3.preparedStatment:sql的预编译处理对象,是statement子接口4 ...
- JDBC连接工厂类
看到有些书上数据库连接提供两个工厂类,一个连接工厂类一个关闭工厂类,并且关闭工厂类写了多种重载形式,感觉没有必要,这样写比较简洁一些. /** * 抽象出的连接工厂类,提供连接数据库和关闭连接的 ...
- jdbc工具类1.0
package cn.zhouzhou; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManag ...
- 原生Jdbc操作Mysql数据库开发步骤
原生Jdbc操作Mysql数据库开发步骤 原生的Jdbc就是指,不使用任何框架,仅用java.sql包下的方法实现数据库查询等的操作. 下面是开发步骤: 1.导入数据库驱动包 ...
- 2、原生jdbc的dao模式
一.dao模式 (data access object)1.作用:持久层,专门操作数据的层次结构,不掺杂任何的业务和其他内容2.dao组成部分: a.数据库工厂类 b.数据实体类 javabean p ...
- Spring使用原生JDBC
Spring使用原生JDBC 为加深对Spring解耦的理解,本次实验学习用Spring连接JDBC 一.POM配置文件 pom.xml <project xmlns="http:// ...
- 原生jdbc操作
1:加入dbcp连接池依赖 <dependency> <groupId>org.apache.commons</groupId> <artifactId> ...
- (精简)Spring框架的IoC(替代工厂类实现方法)和AOP(定义规则,约定大于配置)
Spring的核心框架主要包含两个技术,分别用来处理工厂类,以及事务处理和连接管理的. 两大核心概念 1) IoC:控制反转,在现在的开发中,如果想建立对象并设置属性,是需要先new对象,再通过se ...
随机推荐
- linux防火墙相关 iptables
1. root用户查看防火墙状态(非root用户无权限查看) 查看防火墙状态: service iptables status 2.开启和关闭防火墙 //开启防火墙: service iptables ...
- 解决微信开发工具上trace无法检测到设备,一直停留在“正在搜索设备...”或者trace panel,choose device老出现device not found
性能 Trace 工具 微信 Andoid 6.5.10 开始,我们提供了 Trace 导出工具,开发者可以在开发者工具 Trace Panel 中使用该功能. 使用方法 PC 上需要先安装 adb ...
- 定时任务Crontab
0.基本概念 & 实现原理 定时任务基本概念: 调度器:负责管理Quartz应用运行时环境,用于调度定时任务. 定时任务:按照某种时间规则,被调度的任务. a.从有无状态来说,有以下两种: ...
- JMeter 关于JMeter 正则表达式提取器的一点研究
关于JMeter 正则表达式提取器的一点研究 by:授客 QQ:1033553122 1. 实验环境: JMeter 2.13 2. 添加正则表达式提取器 右键线程组->添加-> ...
- 不需要再手写 onSaveInstanceState 了,因为你的时间非常值钱
如果你是一个有经验的 Android 程序员,那么你肯定手写过许多 onSaveInstanceState 以及 onRestoreInstanceState 方法用来保持 Activity 的状态, ...
- 【Spring源码解读】bean标签中的属性(一)你可能还不够了解的 scope 属性
scope 属性说明 在spring中,在xml中定义bean时,scope属性是用来声明bean的作用域的.对于这个属性,你也许已经很熟悉了,singleton和prototype信手捏来,甚至还能 ...
- Python 反射机制之hasattr()、getattr()、setattr() 、delattr()函数
反射机制 先看看我对Java中反射机制的通俗理解:反射之中包含了一个“反”的概念,所以要想解释反射就必须先从“正”开始解释,一般而言,当用户使用一个类的时候,应该先知道这个类,而后通过这个类产生实例化 ...
- Redis内存数据库快速入门
Redis简介 Redis是一个开源(BSD许可),内存数据结构存储,用作数据库,缓存和消息代理.它支持数据结构,如 字符串,散列,列表,集合,带有范围查询的排序集,位图,超级日志,具有半径查询和流的 ...
- python----csv的使用
详细的内容参考:https://docs.python.org/2/library/csv.html#module-csv 打开csv # -*- coding: utf8 -*- import cs ...
- sql语句中的join用法(可视化解释)
一.innerjoin innerjoin总结来说就是 ,如A知道通往B如何走:B知道通往C如何走:但是A不知道通往C如何走,但是A可以通过B获得去往C的通往方式.. 首先,假设有A,B两张表,结构及 ...