JDBC程式設計的步驟
一、進行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+"條記錄受影響");
}
}