某些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 DATABASEsongci;USEsongci;CREATE TABLE authors(author_id INT, first_name VARCHR(20), last_name VARCHAR(10), poems VARCHAR(40));
// 再插入一些数据
-----------------------------------------------------------------------------------------------------------------------------------------------------
Java代码段如下:
1 packagecom.coresql.sqljdbc;2
3 importjava.sql.Connection;4 importjava.sql.DriverManager;5 importjava.sql.ResultSet;6 importjava.sql.Statement;7
8 public classMySqlJdbc {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 voidmain(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 packagecom.testsql.getconnection;2
3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.nio.file.Files;6 importjava.nio.file.Paths;7 importjava.sql.Connection;8 importjava.sql.DriverManager;9 importjava.sql.ResultSet;10 importjava.sql.SQLException;11 importjava.sql.Statement;12 importjava.util.Properties;13
14 public classTestDB {15
16 public static void main(String[] args) throwsIOException {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() throwsSQLException, 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() throwsSQLException, IOException {40 Properties props = newProperties();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 returnDriverManager.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
}