1. 程式人生 > >Java連線和操作資料庫

Java連線和操作資料庫


JDBC

1、JDBC是開發資料庫引用的java API,通過JDBC,使用Java設計的程式能夠執行SQL語言、獲取結果、在使用者介面中顯示資料,並且能將所做的改動傳回資料庫,同時JDBC API可用於分散式異型機環境中國多種資料來源之間的互動;

2、一般使用Java開發資料庫應用需要用到4個主要的介面:Driver、Connection、Statement、ResultSet, 這些介面都定義在 java.sql 中; 以下是主要步驟(1)載入驅動程式:
</pre><pre name="code" class="java">Class.forName("JDBCDriverClass");


※JDBC驅動的下載: JDBC檔案的匯入:Eclipse-指定工程-構建路徑(bulid path)-Java構建路徑-新增外部JAR-應用; (2)建立連線
Connection connection = DriverManager.getConnection("databaseURL");


MySql資料庫要指定主機名,資料庫名;      Connection connection = DriverManger.getConnection("jdbc:mysql://localhost/bookrama","username","password"); ②Oracle資料庫要指定主機名,資料庫監聽輸入連線請求的埠號,定位資料庫的資料庫名;      Connection connection = DriverManger.getConnection("jdbc:oracle:thin:@liang.armstrong.edu:1521:orcl","username","password"
);
Access資料庫要先在Windows下的ODBC資料管理器建立一各ODBC資料來源,在建立Connection物件:      Connection connection = DriverManager.getConnection("jdbc:odbc:ExampleMDBDSource"); (3)建立語句
Statement statement = connection.createStatement();
Connection物件是Java程式與資料庫的連線通道,Statement物件時通道上的資訊交換器; (4)執行語句
執行更新操作:ResultSet resultSet = statement.executeUpdate("QueryString");
執行查詢操作:ResultSet resultSet = statement.executeQuery("QueryString");

(5)處理ResultSet
while(resultSet.next()){
     String data1 = resultSet.getString(1);
     int data2 = resultSet.getInt(2); 
     float data3 = resultSet.getFloat(3);
}

//假定資料表有三個欄位data1、data2、data3,使用ResultSet相應的getX(index)方法獲取,index從1開始; 可以使用ResultSetMete獲取資料表的列行資訊,詳見37.3; 可以使用DatabaseMetaData獲取資料庫的相關資訊,詳見37.3; (6)關閉連線
connection.close();
示例程式碼:
public static void main(String[] args) throws SQLException ,ClassNotFoundException{
Class. forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/bookrama","root","root");
Statement statement = connection .createStatement();  
ResultSet resultSet = statement .executeQuery("select isbn,author,title,price from books" ); 
while(resultSet .next()){
   String isbn = resultSet .getString(1);
   String author = resultSet.getString(2);
   String title = resultSet.getString(3);
   float price =  resultSet .getFloat(4);
   System. out.println(isbn +"\t"+ author +"\t" +title + "\t"+price );
}
connection.close();


3、PreparedStatement 預編譯SQL語句
Class.forName("JDBCDriverClass");
Connection connection = DriverManager.getConnection("databaseURL");

PreparedStatement statement = connection.prepareStatement("select id form books where name=? and year>=?");
statement.setString(1,"Alassad");
statement.setInt(2,20);
ResultSet result = statement.executeQuery();
//使用?代替待編譯的變數,使用Statement的setX(index,X value)設定變數;


4、CallableStatement 呼叫記載儲存在SQL中的程序和方法; //假設 function functionName(firstname varchar2,lastname verchar2);返回與firstname、lastname都匹配的記錄個數;
Class.forName("JDBCDriverClass");
Connection connection = DriverManager.getConnection("databaseURL");

//呼叫SQL程序
CallableStatement statment = connection.prepareCall("{call sampleProcedure(?,?)}");
//呼叫SQL方法
CallableStatement statment = connection.prepareCall("{?=call functionName(?,?)}");
statement.setString(2,firstaname);      //傳遞引數
statement.setString(3,lastname);
statement.registerOutParameter(1,Types.INTEGER);       //註冊返回引數
statement.execute();
int result = statement.getInt(1);



獲取元資料 1、獲取資料庫相關資訊 DatabaseMetaData
Class.forName("JDBCDriverClass");
Connection connection = DriverManager.getConnection("databaseURL");

DatabaseMetaData dbMetaData = connection.getMetaData();
String str =dbMetaData.getURL();
dbMetaData.getUserName();
dbMetaData.getDataProductName();
dbMetaData.getDriverName();/
//DatabaseMetaData可獲取的欄位列表詳見Java技術文件;

2、結果集元資料 ResultSetMetaData
Statement statment = connection.createStatament();
ResultSet resultSet = statement.executeQuery("queryString");
ResultSetMetaData rsMetaData= connection.getMetaData();

for(int i=1;i<rsMetaData .getColumnCount();i++ )
     System.out.printf("%-12s\t",rsMetaData .getColumnName(i));

while(resultSet.next()){
     for(int i=1;i<rsMetaData.getColumnCount();i++)
          System.out.printf("%-12s\t",resultSet.getObject(i));
}