一、進行JDBC編程的步驟大致如下:
1. 加載數據庫驅動,通常使用Class類的forName()靜態方法來加載驅動。如下代碼:
Class.forName(dirvirClass)
上面代碼中的driverClass就是數據庫驅動類所對應的字符串
加載MySQL數據庫時采用的代碼為:
Class.forName("com.mysql.jdbc.Driver");
2. 通過DriverManager獲取數據庫連接。
DriverManager.getConnection(String url,String user,Stringpass)
使用DriverManager獲取數據庫連接時,需要傳入3個參數:數據庫URL、登陸數據庫的用戶名和密碼。
數據庫URL通常遵循如下寫法:
jdbc:subprotocol:other stuff.
連接MySQL數據庫時的URL寫法為:
jdbc:mysql://localhost/BDYun
3. 通過Connection對象創建Statement對象。Connection創建Statement的方法有如下3個:
(1) createStatement():創建基本的Statement對象
(2) prepareStatement(String sql):根據傳入的SQL語句創建預編譯的Statement對象
(3) prepareCall(String sql):根據傳入的SQL語句創建CallableStatement對象
4. 使用Statement執行SQL語句。所有的Statement都有如下3個方法來執行SQL語句:
(1) execute():可以執行任何SQLyu7ju,但比較麻煩
(2) executeUpdate():主要用於執行DML和DDL語句。執行DML語句返回受SQL語句影響的行數,執行DDL語句返回0.
(3) executeQuery():只能執行查詢語句,執行後返回代表查詢結果的ResultSet對象
5. 操作結果集。如果執行的SQL語句是查詢語句,則執行結果將返回一個ResultSet對象,該對象裡保存了SQL語句查詢的結果。程序可以通過操作該ResultSet對象來取出查詢結果。ResultSet對象主要提供了如下兩類方法。
(1)next()、previous()、first()、last()、beforeFirst()、afterLast()、absolute()等移動記錄指針的方法。
(2)getXxx()方法獲取記錄指針指向行、特定列的值。該方法既可以使用列索引作為參數,也可以使用列名稱作為參數。使用列索引作為參數性能更好,使用列名稱作為參數可讀性更好。
6. 回收數據庫資源,包括關閉ResultSet、Statement和Connection等資源。
二、代碼演示
利用MySQL創建一個數據庫BDYun,並在數據庫中新建一個表POI,往表中插入兩條數據
create database BDYun;
use database BDYun;
create table POI(id int(11) auto_incrementprimary key,latitude varchar(255),longitude varchar(255),picurlvarchar(255),serviceurl varchar(255) );
insert into poi values(null,36.0333,118.7833,null,null);
insert into poivalues(null,37.3333,116.3333,null,null);
在eclipse中創建一個新項目,並導入jar包:mysql-connector-java-5.1.30.bin.jar
(1)創建查詢類,代碼如下:
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class ConnMySQLTest
{
public static void main(String[] args) throws Exception
{
// TODO Auto-generated method stub
try
{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/BDYun","root","340621");
Statement stmt = conn.createStatement();
String sql = "select * from poi";
ResultSet rs = stmt.executeQuery(sql);
while(rs.next())
{
System.out.println("id:"+rs.getInt(1)+"緯度:"+rs.getString(2)+"經度:"+rs.getString(3));
}
} catch (ClassNotFoundException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
程序運行結果如下:
(2)利用executeUpdate方法執行DDL和DML語句
代碼如下:
package com.jdbc;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Properties;
public class ExecuteUpdateTest
{
public void createTable(String sql) throws Exception
{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/BDYun","root","340621");
Statement stmt = conn.createStatement();
{
stmt.executeUpdate(sql);
}
}
public static void main(String[] args) throws Exception
{
// TODO Auto-generated method stub
ExecuteUpdateTest eut = new ExecuteUpdateTest();
String sql = "create table camera (id int auto_increment primary key,latitude varchar(20),longitude varchar(20),picurl varchar(20),serviceurl varchar(20))";
eut.createTable(sql);
System.out.println("建表成功");
}
}
程序執行成功後,登陸mysql數據庫,可以看到數據庫中出現了剛才創建的表格
(3)利用executeUpdate方法執行插入語句
package com.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class ExecuteUpdateInsertTest
{
public int insertData(String sql) throws Exception
{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost/BDYun", "root", "340621");
Statement stmt = conn.createStatement();
{
return stmt.executeUpdate(sql);
}
}
public static void main(String[] args) throws Exception
{
ExecuteUpdateInsertTest ed = new ExecuteUpdateInsertTest();
String sql = "insert into poi values(null,120.5333,34.6555,null,null)";
int result = ed.insertData(sql);
System.out.println("數據庫表中共有"+result+"條記錄受影響");
}
}