1. 程式人生 > >JDBC程式設計的步驟

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+"條記錄受影響");

}

}