读书人

经验5-JDBC回顾-主讲将驱动配置方法抽

发布时间: 2012-09-15 19:09:28 作者: rapoo

心得5--JDBC回顾-主讲将驱动配置方法抽离成单独类

1. 基础知识回顾

(1)JDBC全称为:Java DataBase Connectivity(java数据库连接),它主要由接口组成。

(2)组成JDBC的2个包: java.sql、javax.sql开发JDBC应用需要以上2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

(3)编写程序,在程序中加载数据库驱动

Class.forName(“com.mysql.jdbc.Driver”);//大部分用这个

DriverManager. registerDriver(Driver driver)

DriverManager.registerDriver(newDriver()),注意:在实际开发中,并不推荐采用这个方法注册驱动。查看Driver的源代码可以看到,如果采用此种方式,会导致驱动程序注册两次,也就是在内存中会有两个Driver对象。推荐方式:Class.forName(“com.mysql.jdbc.Driver”);采用此种方式不会导致驱动对象在内存中重复出现,并且采用此种方式,程序仅仅只需要一个字符串,不需要import驱动的API,这样可使程序不依赖具体的驱动,使程序的灵活性更高。

建立连接(Connection)Connection conn =DriverManager.getConnection(url,user,pass);创建用于向数据库发送SQL的Statement对象,并发送sql:Statement st =conn.createStatement();ResultSet rs = st.excuteQuery(sql);

从代表结果集的ResultSet中取出数据,打印到命令行窗口;断开与数据库的连接,并释放相关资源

(4)常用数据库URL地址的写法:

Oracle写法:jdbc:oracle:thin:@localhost:1521:sid

SqlServer-jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sid

MySql-jdbc:mysql://localhost:3306/sid

l Mysql的url地址的简写形式: jdbc:mysql:///sid

l 常用属性:useUnicode=true&characterEncoding=UTF-8

2. 具体案例分析

案例一:

package com.code;

import java.sql.Connection;

importjava.sql.DriverManager;

import java.sql.ResultSet;

importjava.sql.SQLException;

import java.sql.Statement;

public class Demo1 {

static Connection con = null;

static Statement st = null;

static ResultSet rs = null;

public static void main(String[] args) {

try {

//1.加载驱动

Class.forName("com.mysql.jdbc.Driver");

//2.创建连接

String url = "jdbc:mysql://Localhost:3306/jdbcdb";

con = DriverManager.getConnection(url, "root","root");

//3.创建对象

st = con.createStatement();

String sql = "select id,name,password,email,birthday fromusers";

ResultSet rs = st.executeQuery(sql);

while(rs.next()){ //就算不用循环遍历也要用一句next()方法代码,因为ResultSet结果集中的对象指针默认的指示在第一行代码的上面

System.out.println(rs.getInt("id"));

System.out.println(rs.getString("name"));

System.out.println(rs.getString("password"));

System.out.println(rs.getString("email"));

System.out.println(rs.getString("birthday"));

}

} catch (ClassNotFoundException e) {

// TODO Auto-generatedcatch block

e.printStackTrace();

}catch(SQLException e){

e.printStackTrace();

}finally{

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(con!=null)

try {

con.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

案例二:

Demo2.class

packagecom.code;

importjava.sql.Connection;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importcom.Db.DbManager;

publicclass Demo2 {

publicvoid insert(){

Connection con = DbManager.getConnection();

Statement st = null;

try {

st = con.createStatement(); //创建对象

String sql = "insert into users values(5,'杨凯','123','ghjhj','1991-01-01')";

int i =st.executeUpdate(sql); //executeUpdate()方法返回的是int

if(i>0){

System.out.println("插入成功!!");

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

DbManager.closeDB(con, st, null);

}

}

publicvoid update(){

Connection con = DbManager.getConnection();

Statement st = null;

try {

st = con.createStatement();

String sql = "update users set name = '洋洋' where id=1";

int i = st.executeUpdate(sql);

if(i>0){

System.out.println("修改成功!!");

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

DbManager.closeDB(con, st, null);

}

}

publicvoid delete(){

Connection con = DbManager.getConnection();

Statement st = null;

try {

st = con.createStatement();

String sql = "delete from users whereid=5";

int i = st.executeUpdate(sql);

if(i>0){

System.out.println("删除成功!!");

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

DbManager.closeDB(con, st, null);

}

}

publicvoid query(){

Connection con = DbManager.getConnection();

Statement st = null;

ResultSet rs = null;

try {

st = con.createStatement();

String sql = "selectid,name,password,email,birthday from users";

rs = st.executeQuery(sql);

while(rs.next()){

System.out.println(rs.getInt("id"));

System.out.println(rs.getString("name"));

System.out.println(rs.getString("email"));

System.out.println(rs.getString("birthday"));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}finally{

DbManager.closeDB(con, st, rs);

}

}

publicstaticvoid main(String[] args) {

Demo2 d = new Demo2();

d.delete();

}

}

DbManager.class //驱动配置类

packagecom.Db;

importjava.io.IOException;

importjava.io.InputStream;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.ResultSet;

importjava.sql.SQLException;

importjava.sql.Statement;

importjava.util.Properties;

publicclass DbManager {

static Stringdriver;

static Stringurl;

static Stringusername;

static Stringpassword;

static{

InputStreamin=DbManager.class.getClassLoader().getResourceAsStream("db.properties");

//getClassLoader()方法是个类加载器,来获取类源输入流

Properties pro=new Properties(); //properties表示一个持久的属性集,可保存在流中或从流中加载。属性列表中每一个键及其值都是一个字符串

try {

pro.load(in); // 从输入流中读取属性列表(键和元素对)

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

driver = pro.getProperty("driver"); //用指定键在属性列表中搜索属性。

url = pro.getProperty("url");

username = pro.getProperty("username");

password = pro.getProperty("password");

try {

Class.forName(driver);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

publicstatic Connection getConnection(){

Connection con=null;

try {

con=DriverManager.getConnection(url,username,password);

System.out.println("成功了");

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return con;

}

publicstaticvoid closeDB(Connection con,Statementst,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(con!=null){

try {

con.close();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

publicstaticvoid main(String[] args) {

getConnection(); //调用方法

}

}

读书人网 >其他数据库

热点推荐