JDBC基础_建立连接
来源:互联网 发布:淘宝客怎么采集 编辑:程序博客网 时间:2024/06/05 03:05
JDBC是sun公司制定的一系列接口,各个数据库厂商设计自己数据库的驱动来实现这些接口
1-java中用static修饰的方法可以通过“类.方法名”的方式调用,而无需创建该类的实例。static修饰的代码块(注意是代码块而不是方法)只会执行一次,就是在代码装入虚拟机的时候。
2-java中的final修饰方法时,表示该方法不能被重写,修饰类时该类不能被继承。
3-缺省的方法属性可以被同一包中的类使用。
一个不严谨的建立连接的程序:
package cn.hsh.jdbc;
import java.sql.Connection; //选择这些包时会提示你也可以选择com.mysql.jdbc.***,但是注意最好选java.sql.***,因为
import java.sql.DriverManager; //com.mysql.jdbc.***是与具体数据库相关的,会牺牲掉程序的可移植性,
import java.sql.ResultSet; //com.mysql.jdbc.***是对java.sql.***接口的实现
import java.sql.SQLException;
import java.sql.Statement;
public class Base {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
test();
}
static void test() throws SQLException, ClassNotFoundException{
//驱动注册
Class.forName("com.mysql.jdbc.Driver"); //将com.mysql.jdbc.Driver加载到JVM而不创建实例,会执行里面的static代码块,该代码块的作用是注册驱动;
//建立连接
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydata",
"root","root");
//创建语句,相当于给数据库发送sql语句的载体
Statement st = conn.createStatement();
//执行语句,将结果返回给rs
ResultSet rs = st.executeQuery("SELECT * FROM pet");
while(rs.next()){
System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));
}
rs.close();
st.close();
conn.close();
}
}
不严谨之处在于:
驱动只需注册一次,上书写法每调用一次test()都会注册一次;与具体参数有关的注册驱动Class.forName()和建立连接DriverManager.getConnection(),会降低程序的复用性,而且若前面出现异常则conn.close()不会执行,连接不会关闭。
所以为了确保连接会关闭需要把关闭连接语句放入finally{}里。
改进版1:
package cn.hsh.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Base {
public static void main(String[] args) throws Exception {
template();
}
static void template() throws Exception {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/mydata",
"root","root");
st = conn.createStatement();
rs = st.executeQuery("SELECT * FROM pet");
while(rs.next()){
System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));
}
}finally{
try{
rs.close();
}finally{
try{
st.close();
}finally{
conn.close();//嵌套这么多层是为了确保这一句会执行
}
}
}
}
}
这段代码的缺点是注册驱动可能会重复执行,最后还有一大段try不简洁
终极版:
写一个工具类JdbcUtils
package cn.hsh.jdbc;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
public final class JdbcUtils {
private static String url = "jdbc:mysql://localhost:3306/mydata";
private static String user = "root";
private static String password = "root";
private JdbcUtils() {
//作为工具的类不需要构造器构造实例,故用private修饰构造器,限制他人构造实例
}
static { //static代码块只会让驱动注册一次
try{
Class.forName("com.mysql.jdbc.Drive");
}catch(ClassNotFoundException e) {
//异常处理我还不太会这里就没写
}
}
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url,user,password);
}
public static void free(ResultSet rs,Statement st,Connection conn){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
这样实际执行数据库访问的部分会简洁很多,不再有url等具体的值
package cn.hsh.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class Base {
public static void main(String[] args) throws Exception {
template();
}
static void template() throws Exception {
Connection conn = null;
Statement st = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection();
st = conn.createStatement();
rs = st.executeQuery("SELECT * FROM pet");
while(rs.next()){
System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));
}
}finally{
JdbcUtils.free(rs, st, conn);
}
}
}
0 0
- JDBC基础_建立连接
- JDBC 建立MySQL连接
- (2) JDBC建立连接实例
- JDBC基础之连接
- JDBC连接池基础
- JDBC连接数据库基础
- jdbc基础连接(基础)
- SQL server建立连接JDBC的步骤
- SQL server建立连接JDBC的步骤
- 建立基于 JDBC 的 Tomcat 连接池
- 建立基于 JDBC 的 Tomcat 连接池
- 建立基于 JDBC 的 Tomcat 连接池
- JDBC学习(1)-数据库建立连接
- JDBC建立与SQL Server的连接
- JDBC程序4:从配置文件建立连接
- jdbc-建立与数据库的连接
- 最基础的jdbc连接
- 1:jdbc 连接数据库基础
- 监控系统资源
- 我这8年的编程生活-展望篇
- String字符串查找操作
- Device or resource busy
- 用C语言读取前序建立二叉树
- JDBC基础_建立连接
- 学习网站
- Hough变换
- JAVA 容器(四)---HashSet的实现原理(一)
- 使用U盘制作linux启动盘,并且成功安装Linux系统后,拔掉无法再次启动linux,修复引导区到硬盘
- OSX终端 命令行的一些基本操作
- __STL_TRY和__STL_UNWIND这两个宏的意思
- Ubuntu 10.04架设VPN
- 【LeetCode】Anagrams