本文主要是介绍心得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(); //调用方法
}
}
这篇关于心得5--JDBC回顾-主讲将驱动配置方法抽离成单独类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!