Java連線和操作資料庫
阿新 • • 發佈:2018-12-29
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"
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));
}