某些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
}

 

posted on 2015-10-21 00:01  ss720  阅读(1005)  评论(0编辑  收藏  举报