一切从JAVA数据库连接说起
在JAVA中初学者问的最多的就是数据库连接,当然关于数据库连接的方法网上也有很多的教程。说到数据库连接,其中最重要的一点就是Class.forName()和DriverManager.getConnection(url,user,pwd);这两句话。
首先我们来说说Class.forName(""): 这句话的意思呢就是说我们要先进行驱动的加载,就相当于我们用笔记本要开机首先要给笔记本电池冲上电是一个道理。。那么我们充好电后笔记本要能识别电池才能正常工作。Class.forName("")里面的参数就相当于电池的路径。简单的说:Class是运行中的class类,将forName("className")这个名为className的类装入JVM, 这样就可以动态的加载类,通过Class的反射机制可以获得此类的一些信息。
而通常我们会在Class.forName("")写成这样Class.froName("").newInstance(); 在后面接上newInstance()有什么用呢?其实很简单:单单使用Class.forName("")是动态加载类是没有用的,其最终目的是为了实例化对象。而Class.forName("").newInstance()返回的是object。有数据库开发经验朋友会发现,为什么在我们加载数据库驱动包的时候有的却没有调用newInstance( )方法呢?即有的jdbc连接数据库的写法里是Class.forName(xxx.xx.xx);而有一些:Class.forName(xxx.xx.xx).newInstance(),为什么会有这两种写法呢?
Class.forName("");的作用是要求JVM查找并加载指定的类,如果在类中有静态初始化器的话,JVM必然会执行该类的静态代码段。而在JDBC规范中明确要求这个Driver类必须向DriverManager注册自己,即任何一个JDBC Driver的Driver类的代码都必须类似如下:
1 public class MyJDBCDriver implements Driver {
2
3 static {
4
5 DriverManager.registerDriver(new MyJDBCDriver());
6
7 }
8
9 }
10
既然在静态初始化器的中已经进行了注册,所以我们在使用JDBC时只需要Class.forName(XXX.XXX);就可以了。
那么好,了解了Class.forName(""),我们接着来了解下DriverManager.getConnection(url,user,pwd);这个方法是什么意思呢,还是拿笔记本来举例。我们笔记本上了电池了而且机器已经识别了电池并且加载了一定的电量,那么好,现在我们笔记本可以开机了恩,不过开机后,我们还要做一件事情,什么事情呢,我们的电脑上安装了操作系统,那么我们需要选择进入那个操作系统,而url就相当于我们要用哪个数据库。那么如果是个多用户的操作系统,我们要选择相应的用户,那么好user就相当于数据库的用户名。至于pwd很简单,当然就是登陆的密码了。
好现在我们来具体分析下整个数据库连接类的写法:
1 import java.sql.Connection;
2 import java.sql.DriverManager;
3 import java.sql.SQLException;
4
5 /**
6 * 数据库连接类
7 *
8 * @author funnyking
9 *
10 */
11 public class SqlConnetction {
12
13 /**
14 * 数据库连接方法(静态)
15 *
16 * @return Connection
17 * @throws ClassNotFoundException
18 * @throws SQLException
19 */
20 public static Connection getConnetction() throws SQLException {
21 Connection conn = null;
22 try {
23 // 直连驱动
24 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
25
26 } catch (ClassNotFoundException e) {
27 // TODO Auto-generated catch block
28 System.out.println("加载驱动异常:" + e.getMessage());
29 }
30 // 数据库连接地址
31 String url = "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=PM";
32 // 用户名
33 String user = "sa";
34 // 密码
35 String password = "";
36 conn = DriverManager.getConnection(url, user, password);
37
38 return conn;
39
40 }
41
42 /**
43 * 关闭Connection方法(静态)
44 *
45 */
46 public static void getCloseConnettion(Connection conn) {
47 try {
48 conn.close();
49 } catch (SQLException e) {
50 // TODO Auto-generated catch block
51 System.out.println("关闭数据连接异常:" + e.getMessage());
52 }
53 }
54
55 }
56
57
58
59基本写法也就是这样了,好了,下面贴出不同数据库的连接方法:
1、Oracle8/8i/9i数据库(thin模式)
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为数据库的SID
String user="test";
String password="test";
Connection conn= DriverManager.getConnection(url,user,password);2、DB2数据库
Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);3、Sql Server7.0/2000数据库
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb";
//mydb为数据库
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);4、Sybase数据库
Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/myDB";
//myDB为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);5、Informix数据库
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//myDB为数据库名
Connection conn= DriverManager.getConnection(url);6、MySQL数据库
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1"
//myDB为数据库名
Connection conn= DriverManager.getConnection(url);7、PostgreSQL数据库
Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/myDB"
//myDB为数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);