標籤:
某些JDBC的JAR檔案將自動註冊磁碟機類。包含META-INF/services/java.sql.Driver檔案的JAR檔案可以自動註冊磁碟機類,解壓縮驅動程式JAR檔案就可以檢查其是否包含該檔案。
如果驅動程式JAR檔案不支援自動註冊,那就需要找出資料庫供應商使用的JDBC磁碟機類的名字。典型的磁碟機名字如下:
org.apache.derby.jdbc.ClientDriver
org.postgresql.Driver
com.mysql.jdbc.Driver
另一個需要注意的是資料庫URL,我們必須使用各種與資料庫類型相關的參數,例如主機名稱、連接埠號碼和資料庫名。
JDBC使用了一種與普通URL相類似的文法來描述資料來源。
格式形如:
jdbc:subprotocol:other stuff
執行個體如下
jdbc:derby://localhost:1527/COREJAVA;create=true
jdbc:mysql://localhost:3306/COREJAVA
jdbc:postgresql:COREJAVA
通過使用DriverManager,可以用兩種方式來註冊磁碟機。
首先,在項目Build Path中需要" Add External JARs",加入C:\Program Files (x86)\MySQL\MySQL Connector J目錄下的mysql-connector-java-5.1.37-bin.jar (這貨也太TM難找了吧)
1. 在Java程式中載入磁碟機類,例如:
Class.forName("com.mysql.jdbc.Driver");
這條語句將使得磁碟機類被載入,由此將執行可以註冊磁碟機類的靜態初始化器。
一個執行個體如下:
$ mysql -u root -p password: password
資料庫建立語句:
CREATE DATABASE songci;USE songci;CREATE TABLE authors(author_id INT, first_name VARCHR(20), last_name VARCHAR(10), poems VARCHAR(40));
// 再插入一些資料
-----------------------------------------------------------------------------------------------------------------------------------------------------
Java程式碼片段如下:
1 package com.coresql.sqljdbc; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 7 8 public class MySqlJdbc { 9 10 static {11 try {12 Class.forName("com.mysql.jdbc.Driver");13 } catch (Exception e) {14 System.out.println("Error Loading MySQL Driver!");15 e.printStackTrace();16 }17 }18 19 public static void main(String[] args) {20 try {21 22 Connection connect = DriverManager.getConnection(23 "jdbc:mysql://localhost:3306/songci","root","mypassword");24 //串連URL為 jdbc:mysql//伺服器位址/資料庫名 ,後面的2個參數分別是登陸使用者名稱和密碼25 26 System.out.println("Success connect Mysql server!");27 Statement stmt = connect.createStatement();28 ResultSet rs = stmt.executeQuery("select * from authors");29 30 while (rs.next()) {31 System.out.println(rs.getString("last_name") + " " + rs.getString("first_name"));32 }33 } catch (Exception e) {34 e.printStackTrace();35 }36 }37 }
2. 另一種方式是設定jdbc.driver屬性。可以用命令列參數來指定這個屬性。例如:
$ java -Djdbc.drivers=org.postgresql.Driver ProgramName
或者在應用中用下面的調用來設定系統屬性
System.setProperty("jdbc.drivers", "org.postgresql.Driver");
應用這種方式可以提供多個磁碟機,用冒號將他們分割開,例如:
org.postgresql.Driver:org.apache.derby.jdbc.ClientDriver
Java程式中串連資料庫的代碼如下:
String url = "jdbc:postgresql:COREJAVA";String username = "root";String password = "mypassword";Connection conn = DriverManager.getConnection(url, username, password);
可以這麼做: 從名為database.properties的檔案中載入串連參數,並串連到資料庫。
jdbc.drivers=com.jdbc.mysql.Driver
jdbc.url=jdbc:mysql://localhost:3306/songci
jdbc.username=root
jdbc.password=mypassword
Java代碼如下:
1 package com.testsql.getconnection; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.nio.file.Files; 6 import java.nio.file.Paths; 7 import java.sql.Connection; 8 import java.sql.DriverManager; 9 import java.sql.ResultSet;10 import java.sql.SQLException;11 import java.sql.Statement;12 import java.util.Properties;13 14 public class TestDB {15 16 public static void main(String[] args) throws IOException {17 try {18 runTest();19 } catch (SQLException e) {20 for (Throwable t : e) {21 t.printStackTrace();22 }23 }24 }25 26 27 public static void runTest() throws SQLException, IOException {28 try (Connection conn = getConnection()) {29 Statement stat = conn.createStatement();30 ResultSet rs = stat.executeQuery("SELECT * FROM authors");31 32 while (rs.next()) {33 System.out.println(rs.getString("last_name") + " " + rs.getString("first_name"));34 }35 System.out.println("Done");36 }37 }38 39 public static Connection getConnection() throws SQLException, IOException {40 Properties props = new Properties();41 42 try (InputStream in = Files.newInputStream(Paths.get("database.properties"))) {43 props.load(in);44 }45 46 String drivers = props.getProperty("jdbc.drivers");47 if (drivers != null) {48 System.setProperty("jdbc.drivers", drivers);49 } 50 51 String url = props.getProperty("jdbc.url");52 String user = props.getProperty("jdbc.username");53 String password = props.getProperty("jdbc.password");54 55 return DriverManager.getConnection(url, user, password);56 }57 }
代碼中執行SQL語句:
在執行SQL命令之前,首先需要建立一個Statement對象。要建立Statement對象,需要使用調用DriverManager.getConnection方法所獲得的Connection對象。
Statement stat = conn.createStatement();
接著將要執行的SQL語句放入字串中,例如:
String command = "UPDATE Books" + " SET Price=Price-5.00" + " WHERE Title NOT LIKE ‘%Introduction%‘";
然後調用:
stat.executeUpdate(command);
executeUpdate方法將返回受SQL命令影響的行數。這個方法針對SQL中諸如INSERT、UPDATE和DELETE之類的操作,也可以執行諸如CREATE TABLE和DROP TABLE之類的資料定義語句
執行查詢操作時,則使用executeQuery方法,返回一個ResultSet類型的對象。
ResultSet rs = stat.executeQuery("SELECT * FROM Books");
分析結果時通常可以使用類似下面的迴圈語句:
while (rs.next()) { // look at a row of result set}
Java串連SQL驅動的方式