标签:
某些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 }
标签:
原文地址:http://www.cnblogs.com/mindandaction/p/4896505.html