您好,登錄后才能下訂單哦!
本文實例講述了java基于jdbc連接mysql數據庫的方法。分享給大家供大家參考,具體如下:
一、JDBC簡介
Java 數據庫連接,(Java Database Connectivity,簡稱JDBC)是Java語言中用來規范客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。JDBC也是Sun Microsystems的商標。它JDBC是面向關系型數據庫的。
1、JDBC架構:
JDBC API支持兩層和三層處理模型進行數據庫訪問,但在一般的JDBC體系結構由兩層組成:
JDBC API: 提供了應用程序對JDBC的管理連接;
JDBC Driver API: 支持JDBC管理到驅動器連接;
JDBC API的使用驅動程序管理器和數據庫特定的驅動程序提供透明的連接到異構數據庫;
JDBC驅動程序管理器可確保正確的驅動程序來訪問每個數據源,該驅動程序管理器能夠支持連接到多個異構數據庫的多個并發的驅動程序;
以下是結構圖,它顯示了驅動程序管理器方面的JDBC驅動程序和Java應用程序的位置:
2、常見的JDBC組件:
JDBC API提供了以下接口和類:
DriverManager: 這個類管理數據庫驅動程序的列表,內容是否符合從Java應用程序使用的通信子協議正確的數據庫驅動程序的連接請求,識別JDBC在一定子協議的第一個驅動器將被用來建立數據庫連接;
Driver: 此接口處理與數據庫服務器通信,很少直接與驅動程序對象,相反,使用DriverManager中的對象,它管理此類型的對象,它也抽象與驅動程序對象工作相關的詳細信息;
Connection : 此接口與接觸數據庫的所有方法,連接對象表示通信上下文,即,與數據庫中的所有的通信是通過唯一的連接對象;
Statement : 可以使用這個接口創建的對象的SQL語句提交到數據庫,一些派生的接口接受除執行存儲過程的參數;
ResultSet: 這些對象保存從數據庫后,執行使用Statement對象的SQL查詢中檢索數據,它作為一個迭代器,讓您可以通過移動它的數據;
SQLException: 這個類處理發生在一個數據庫應用程序的任何錯誤.
二、連接JDBC需要掌握的基本知識
1、數據庫的基本操作,
eg:Mysql的安裝和基本操作(insert,delete,update,query)
2、java開發工具的使用,
eg:Eclipse/MyEclipse (包括mysql-connector-java-5.0.3-bin.jar的導入)
三、JDBC的連接及代碼演示
1、JDBC連接工具類
1)、Configuration.java:可以從.xml文件中連接數據庫的配置信息,需要引入dom4j-1.6.1.jar包
package cn.java.jdbc; import java.io.InputStream; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Configuration { private String url; private String driver; private String username; private String password; public Configuration() { } public Configuration(String url, String driver, String username, String password) { super(); this.url = url; this.driver = driver; this.username = username; this.password = password; } public static Configuration getConfigure() { try { InputStream in = Configuration.class.getResourceAsStream("/db.xml"); if (null!=in) { return load(in); } return null; } catch (DocumentException e) { e.printStackTrace(); return null; } } private static Configuration load(InputStream in) throws DocumentException { SAXReader reader = new SAXReader(); Document doc = reader.read(in); Element jdbc = doc.getRootElement(); String url = jdbc.element("url").getText(); String driver = jdbc.element("driver").getText(); String username = jdbc.element("username").getText(); String password = jdbc.element("password").getText(); Configuration cfg = new Configuration(url, driver, username, password); return cfg; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
2)、db.xml:保存數據庫的配置信息
<?xml version="1.0" encoding="UTF-8"?> <jdbc> <url>jdbc:mysql://localhost:3306/test</url> <driver>com.mysql.jdbc.Driver</driver> <username>root</username> <password></password> </jdbc>
3)、ConnectionFactory.java:JDBC連接工廠方法之一
package cn.java.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class ConnectionFactory { private static ConnectionFactory connectionFactory=null; private static Configuration config=Configuration.getConfigure(); private ConnectionFactory() { try { Class.forName(config.getDriver()); } catch (ClassNotFoundException e) { } } public Connection getConnection() throws SQLException { Connection con=null; try { con=DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword()); return con; }finally{ // if (null != con) { // con.close(); // } } } public static ConnectionFactory getInstance() { if (null==connectionFactory) { connectionFactory=new ConnectionFactory(); } return connectionFactory; } }
4)、ConnectionFactory2.java:JDBC連接工廠方法之二
package cn.java.jdbc; import java.sql.Connection; import java.sql.SQLException; import javax.sql.DataSource; import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; public class ConnectionFactory2 { private DataSource ds ; private static ConnectionFactory2 connectionFactory2 = null; private ConnectionFactory2() { MysqlDataSource myDS = new MysqlDataSource() ; myDS.setServerName("localhost"); myDS.setDatabaseName("test"); myDS.setPort(3306) ; myDS.setUser("root"); myDS.setCharacterEncoding("utf-8"); myDS.setPassword(""); this.ds = myDS ; } public Connection getConnection() throws SQLException { Connection conn = null; try { conn = ds.getConnection() ; conn.setAutoCommit(false); return conn; } catch (SQLException e) { if (null != conn) { conn.close(); } throw e; } } public static ConnectionFactory2 getInstance() { if (null == connectionFactory2) { connectionFactory2 = new ConnectionFactory2(); } return connectionFactory2; } }
5)、User.java:定義數據庫表user中的id和name的bean類,其中id是自動增長的
package cn.java.jdbc; public class User { private int id; private String name; public User() { } public User(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
6)、UserDao.java:user表的操作類,實現了insert、delete、update、query等方法
package cn.java.jdbc; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class UserDao { private PreparedStatement st = null; private ResultSet rs = null; public UserDao() { } public void insert( Connection con,String name) throws SQLException,IOException { String sql="insert into user(name) values(?) "; try{ st=con.prepareStatement(sql); st.setString(1, name); st.executeUpdate(); }finally{ if (null!=st) { st.close(); } } } public void delete(Connection con,int id) throws SQLException,IOException { String sql="delete from user where id=?"; try{ st=con.prepareStatement(sql); st.setInt(1, id); st.executeUpdate(); }finally{ if (null!=st) { st.close(); } } } public void update( Connection con,int id,String name) throws SQLException,IOException { String sql="update user set name=? where id=?"; try{ st=con.prepareStatement(sql); st.setString(1, name); st.setInt(2, id); st.executeUpdate(); }finally{ if (null!=st) { st.close(); } } } public User query(Connection con,int index) throws SQLException,IOException{ User user=new User(); String sql="select * from user where id=?"; try{ st=con.prepareStatement(sql); st.setInt(1, index); rs=st.executeQuery(); while (rs.next()) { user.setId(rs.getInt(1)); user.setName(rs.getString(2)); break; } }finally{ if (null!=rs) { rs.close(); } if (null!=st) { st.close(); } } return user; } public List<User> queryAll(Connection con) throws SQLException,IOException { List<User> list=new ArrayList<>(); String sql="select * from user"; try { st=con.prepareStatement(sql); rs=st.executeQuery(); while (rs.next()) { User user=new User(); user.setId(rs.getInt(1)); user.setName(rs.getString(2)); list.add(user); } }finally{ if (null!=rs) { rs.close(); } if (null!=st) { st.close(); } } return list; } }
2、JDBC連接的測試類
1)、TestJdbc.java:數據庫測試類
package cn.java.jdbc; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.List; public class TestJdbc { public static void main(String[] args) { Connection con=null; try { con=(Connection) ConnectionFactory.getInstance().getConnection(); UserDao userDao=new UserDao(); //con=(Connection) ConnectionFactory2.getInstance().getConnection(); if (null!=con) { System.out.println("Link JDBC SUCESS"); //userDao.insert(con, "zhangsir"); //userDao.delete(con, 4); //userDao.update(con, 1, "david"); List<User> list=userDao.queryAll(con); for (User user : list) { System.out.println("id="+user.getId()+" name="+user.getName()); } } } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if (null!=con) { try { con.close(); } catch (SQLException e) { } } } } }
三、JDBC連接總結
JDBC操作的基本步驟是:
1、創建Connection對象,傳入SQL查詢命令字符串;
2、獲取PreparedStatement對象:通過Connection對象傳入SQL查詢命令獲取;
3、獲取ResultSet:對PreparedStatement執行executeUpdate()
或者executeQurey()
獲取;
4、依次關閉打開的對象:先后關閉ResultSet、PreparedStatement和Connection對象.
更多關于java相關內容感興趣的讀者可查看本站專題:《Java+MySQL數據庫程序設計總結》、《Java數據結構與算法教程》、《Java文件與目錄操作技巧匯總》、《Java操作DOM節點技巧總結》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。