一般性连接
第一步加载驱动: Class.forName,这是利用反射机制让JVM去查找加载指定的类。在加载数据库驱动包的时候,经常使用。
第二步是建立连接,当驱动加载完成之后,就可以用驱动管理器进行连接,连接的时候需要输入用户名,密码和数据库的路径。
这样,Java程序就和数据库建立了连接了。
然后用Dao模式面向接口编程进行业务的功能设计。
用DaoImplements进行功能的实现。
在具体的功能实现当中,如果要用到数据库。
一般情况下就是增删改查的操作。
这里头都会涉及到几个对象。
用Connection对象来建立和数据库的连接,当然是调用的JDBC当中连接方法。
用Connection对象来创建一个语句对象Statement对象或者是PreparedStatement对象。两者的区别是,PreparedStatement是绑定变量的。
然后创建一个sql语句。
然后用Statement对象调用方法来执行sql语句。
从业务上来讲,增删改查操作当中。
添加和修改这些操作一般是需要绑定变量的,用的PreparedStatement。
查询和删除这些操作一般是不需要绑定变量的,用的是Statement。
public class JDBCUtil {
private static final String className="com.mysql.jdbc.Driver";
private static final String url="jdbc:mysql://localhost:3306/lingyao";
private static final String user="root";
private static final String password="123456";
private Connection con=null;
static{
try {
Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection(){
try {
con=DriverManager.getConnection(url, user, password);
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}
通过配置文件
一般性连接当中,其实就是分了两步。
一个就是加载驱动。
一个就是建立连接。
通过配置文件跟数据库建立连接的方式,是下面的方式。
第一步,就是建立配置文件。
第二步,线程–>类加载器–>获取文件流
第三步,用Properties对象加载文件流。
第四步,获取配置文件当中的各个字段。
然后还是一般性的连接方式,驱动–>连接。
所以,两种连接方式的区别就是在:
驱动类,数据库路径,数据库用户名,数据库密码这些字段
1.在一般性连接当中,是用变量存储在程序当中。
2.将字段存储在配置文件当中。
配置文件的名字是: config.properties
;
把className,url,user,password这些字段都添加到配置文件当中。
然后当连接的数据库需要修改的时候,就只需要在配置文件当中修改就可以了。
public class JDBCUtil2 {
/**
* 如果出现乱码 就在配置文件中的url 属性值之后添加
*
* ?useUnicode=true&characterEncoding=UTF8
*/
//获取文件路径
private static final String config="config.properties";
//建立对象
private static Properties por=new Properties();
static{
try {
InputStream input=
Thread.currentThread().getContextClassLoader().getResourceAsStream(config);
por.load(input);
Class.forName(por.getProperty("className"));
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public Connection getConnection(){
try {
return DriverManager.getConnection(por.getProperty("url"), por.getProperty("user"), por.getProperty("password"));
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}