几种常用数据库的连接,以及Dao层的实现。

1、加载JDBC驱动:

 1   加载JDBC驱动,并将其注册到DriverManager中:
2 //MySQL数据库
3 Class.forName("com.mysql.jdbc.Driver").newInstance();
4 //Oracle数据库
5 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
6 //Sql Server数据库
7 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
8 //DB2数据库
9 Class.froName("com.ibm.db2.jdbc.app.DB2Driver").newInstance();
10 //Informix数据库
11 Class.forName("com.informix.jdbc.IfxDriver").newInstance();
12 //Sybase数据库
13 Class.forName("com.sybase.jdbc.SybDriver").newInstance();
14 //PostgreSQL数据库
15 Class.forNaem("org.postgresql.Driver").newInstance();

2、建立数据库连接:

 1  //MySQL数据库//后接字符格式防止中文乱码
2 String url="jdbc:mysql://localhost:3306/test?user=root&password=123456&useUnicode=true&characterEncoding=utf-8";
3 Connection conn=DriverManager.getConnection(url);
4
5 //Oracle数据库
6 String url="jdbc:oracle:thin:@localhost:1521:orcl";
7 String user="scott";
8 String password="tiger";
9 Connection conn=DriverManager.getConnection(url,user,password);
10
11 //Sql Server数据库
12 String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
13 String user="admin";
14 String password="123456";
15 Connection conn=DriverManager.getConnection(url,user,password);
16
17 //DB2数据库
18 String url="jdbc:db2://localhost:5000/sample";
19 String user="amdin"
20 String password=-"123456";
21 Connection conn=DriverManager.getConnection(url,user,password);
22
23 //Informix数据库
24 String url="jdbc:informix-sqli://localhost:1533/testDB:INFORMIXSERVER=myserver;user=username;password=123456";
25 Connection conn=DriverManager.getConnection(url);
26
27 //Sybase数据库
28 String url="jdbc:sybase:Tds:localhost:5007/tsdata";
29 Properties sysProps=System.getProperties();
30 SysProps.put("user","userid");
31 SysProps.put("password","password");
32 Connection conn=DriverManager.getConnection(url,SysProps);
33
34 //PostgreSQL数据库
35 String url="jdbc:postgresql://localhost/test";
36 String user="myuser";
37 String password="123456";
38 Connection conn=DriverManager.getConnection(url,user,password);

3、建立Statement对象或PreparedStatement对象:

<!-- PreparedStatement是预编译的,继承自Statement。如果带有不同参数的同一SQL语句被多次执行的时候,PreparedStatement对象比Statement对象更有效。实际上,在多数时候都建议使用PreparedStatement来代替Statement,这是因为每一种数据库都会尽最大努力对预编译语句提供最大的性能优化.因为预编译语句有可能被重复调用。所以语句在被DB的编译器编译后的执行代码被缓存下来,下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中(相当于一个涵数)就会得到执行。而Statement的语句中,即使是相同一操作,而由于每次操作的数据不同所以使整个语句相匹配的机会极小,几乎不太可能匹配。-->

1   //建立Statement对象
2 String sql="select * from user where userName="+username;   
3 Statement stmt=conn.createStatement(sql);
4 //建立ProparedStatement对象
5 String sql="select * from user where userName=?";
6 PreparedStatement pstmt=Conn.prepareStatement(sql);
7 pstmt.setString(1,"admin");

4、执行sql语句:

1   //执行SQL查询
2 String sql1="select * from users";
3 ResultSet rs=stmt.executeQuery(sql);
5
6 //执行insert update delete等语句
7 String sql2="delete from users where id=?";
8 pstmt.setString(1, id);
9 pstmt.executeUpdate(sql);

5、执行完毕后,依将关闭ResultSet、Statement、PreparedStatement、Connection对象,释放所占用的资源:

1   rs.close();
// 2 stmt.close();
3 pstmt.close();
4 con.close();

以上就是整个数据库连接的完整步骤。下面是我做的数据库工厂例子,返回一个数据库连接对象

(当然,你首先得导入对应数据库的连接包,此处以MySql数据库为例)

 1 package com.db;
2
3 import java.io.InputStream;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import java.util.Properties;
9
10 import javax.sql.DataSource;
11
12 import org.apache.commons.dbcp.BasicDataSourceFactory;
13
14 public class DbcpDb {
15 private static DataSource ds=null;
16
17 static
18 {
19
20 try {
21 InputStream in=DbcpDb.class.getClassLoader().
22 getResourceAsStream("dbcpconfig.properties");//加载配置
23 Properties prop=new Properties();
24 prop.load(in);
25 BasicDataSourceFactory factory=new BasicDataSourceFactory();//工厂模式
26 ds=factory.createDataSource(prop);//将配置传递给Datasource工厂
27 }catch (Exception e) {
28 // TODO Auto-generated catch block
29 e.printStackTrace();
30 throw new RuntimeException(e.getMessage());
31 }
32
33 }
34
35 public static Connection getConnection() throws SQLException {
36 return ds.getConnection();
37
38 }
39
40 public static void close(Connection con,PreparedStatement pstmt,ResultSet rs) {
41 try {
42 if(rs!=null)
43 rs.close();
44 } catch (SQLException e) {
45 // TODO Auto-generated catch block
46 e.printStackTrace();
47 }
48 try {
49 if(pstmt!=null)
50 pstmt.close();
51 } catch (SQLException e) {
52 // TODO Auto-generated catch block
53 e.printStackTrace();
54 }
55 try {
56 if(con!=null)
57 con.close();
58 } catch (SQLException e) {
59 // TODO Auto-generated catch block
60 e.printStackTrace();
61 }
62 }
63
64 }

使用配置文件是一种良好的编程习惯,避免了数据库配置与代码的硬耦合,以下是数据库配置文件("dbcpconfig.properties"):

 1 #连接设置
2 driverClassName=com.mysql.jdbc.Driver
3 url=jdbc\:mysql\://localhost\:3306/test
4 username=root
5 password=123456
6
7 #<!-- 初始化连接 -->
8 initialSize=10
9 #<!-- 最大连接数量 -->
10 maxActive=50
11 #<!-- 最大空闲连接 -->
12 maxIdle=20
13 #<!-- 最小空闲连接 -->
14 minIdle=5
15 #<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
16 maxWait=60000
17
18 #JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
19 #注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
20 connectionProperties=useUnicode=true;characterEncoding=utf8
21
22 #指定由连接池所创建的连接的自动提交(auto-commit)状态。
23 defaultAutoCommit=true
24
25 #driver default 指定由连接池所创建的连接的只读(read-only)状态。
26 #如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
27 defaultReadOnly=
28
29 #driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
30 #可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
31 defaultTransactionIsolation=READ_COMMITTED

dao层事例

 1 package com.dao;
2
3 import java.io.Serializable;
4 import java.util.List;
5
6 public interface BaseDao<T>{
7
8 public boolean save(T entity);
9
10 public boolean update(T entity);
11
12 public boolean delete(T entity);
13
14 public T findById(Serializable id);
15
16 public List<T> findByHql(String hql,Object...params);
17
18 public List<T> findByPage(String hql,int pageNo,int pageSize,Object...params);
19
20 public int getCount(String hql,Object...params);
21
22 }

dao的实现层

省。

Java连接各类数据库的更多相关文章

  1. java连接mysql数据库详细步骤解析

    java连接mysql数据库详细步骤解析      第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar      第二步:导入下载的J ...

  2. Java连接SqlServer2008数据库(转)

    Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...

  3. Java连接MySQL数据库及简单操作代码

    1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...

  4. 转载:Java连接MySQL 数据库的正确操作流程

    转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html       以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...

  5. Java连接MySQL数据库增删改查通用方法

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...

  6. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  7. Java 连接 MySQL 数据库

    最近想学习一下 Java 连接 MySQL 数据库,于是有了这样的一些问题&解决办法. 首先是解决 JDBC(Java Data Base Connectivity)驱动问题,因为默认安装的J ...

  8. Java连接SqlServer2008数据库

    Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...

  9. java连接MySql数据库 zeroDateTimeBehavior

    JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常, 就是所见的:java.sql.SQLException: Cannot convert va ...

随机推荐

  1. linux下修改防火墙端口对外开放方法

    ---linix CentOS7的防火墙换成了firewall了,这里做一些记录,下面是一些命令:添加例外端口:# firewall-cmd --add-port=8080/tcp删除例外端口:# f ...

  2. High bridge, low bridge(离散化, 前缀和)

    High bridge, low bridge Q:There are one high bridge and one low bridge across the river. The river h ...

  3. Apache、Tomcat、JBoss、WebLogic的区别与关系

    Weblogic: 是一个企业级的应用服务器,其中包括j2ee中的各类应用如jsp,servlet,ejb等 Tomcat:   是一个初级的应用服务器,支持sp和servlet,不支持EJB,如需E ...

  4. C#操作IE

    操作IE主要使用两个Com Dll: 1.Microsoft Internet Controls 2.Microsoft HTML Object Library 使用Microsoft Interne ...

  5. gitlab升级方法

    gitlab升级方法:国内网络环境推荐方法二方法一:官网的升级方式 (1)停止git服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq gitlab- ...

  6. Swiper滑动Html5手机浏览器自适应

    手机网页能通过window.screen.height, width获取屏幕分辨率,于是能够通过分辨率比率来计算高度. window.onload=function(){ var swiper = d ...

  7. 仿桌面通知pnotify插件

    在做网站的时候,alert弹出框是非常常见的情形.但是,有些情况下,弹框对用户来说是并不友好的.调研了几个其他的提示插件了,发现pnotify比较好用,可配置性也高. 使用示例: <!DOCTY ...

  8. 《JavaScript 闯关记》之原型及原型链

    原型链是一种机制,指的是 JavaScript 每个对象都有一个内置的 __proto__ 属性指向创建它的构造函数的 prototype(原型)属性.原型链的作用是为了实现对象的继承,要理解原型链, ...

  9. NOT 运算符

    NOT运算符不是独立的,它是一个可以放在任何逻辑表达式前面的修饰符,能得到与结果相反的结果.所以,如果一个表达式是真,就会得到假:如果是假,就会得到真.有时测试查找条件的反面更容易.不过,NOT运算符 ...

  10. iOS 面试题汇总

    1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承;可以实现多个接口,通过实现 ...