Java连接各类数据库
几种常用数据库的连接,以及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连接各类数据库的更多相关文章
- java连接mysql数据库详细步骤解析
java连接mysql数据库详细步骤解析 第一步:下载一个JDBC驱动包,例如我用的是:mysql-connector-java-5.1.17-bin.jar 第二步:导入下载的J ...
- Java连接SqlServer2008数据库(转)
Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...
- Java连接MySQL数据库及简单操作代码
1.Java连接MySQL数据库 Java连接MySql需要下载JDBC驱动MySQL-connector-java-5.0.5.zip(举例,现有新版本).然后将其解压缩到任一目录.我是解压到D盘, ...
- 转载:Java连接MySQL 数据库的正确操作流程
转载网址:http://www.bitscn.com/pdb/mysql/201005/186551.html 以下的文章主要介绍的是Java连接MySQL 数据库(以MySQL数据库为例 ...
- Java连接MySQL数据库增删改查通用方法
版权声明:本文为博主原创文章,未经博主允许不得转载. Java连接MySQL数据库增删改查通用方法 运行环境:eclipse+MySQL 以前我们Java连接MySQL数据库都是一个数据库写一个类,类 ...
- Java进阶(二十五)Java连接mysql数据库(底层实现)
Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...
- Java 连接 MySQL 数据库
最近想学习一下 Java 连接 MySQL 数据库,于是有了这样的一些问题&解决办法. 首先是解决 JDBC(Java Data Base Connectivity)驱动问题,因为默认安装的J ...
- Java连接SqlServer2008数据库
Java连接SqlServer2008数据库 首先下载JDBC:下载地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=21599 下 ...
- java连接MySql数据库 zeroDateTimeBehavior
JAVA连接MySQL数据库,在操作值为0的timestamp类型时不能正确的处理,而是默认抛出一个异常, 就是所见的:java.sql.SQLException: Cannot convert va ...
随机推荐
- 值传递 & 引用传递
以下程序的输出结果是? public class Example { String str = new String("good"); char[] ch = { 'a', 'b' ...
- 一个简单的面试题 很多人也会懵 i++ 和++i的区别
以下分别输出i的值分别为多少 NSInteger i = 0 ; NSLog(@"%ld",i++); NSLog(@"%ld",i++); NSLog(@&q ...
- Uninstall or Disable Java on a Mac
You can run Java apps in two ways. The first is to run Java applets inside your Web browser with a p ...
- IOS 怎么修改Navigation Bar上的返回按钮文本颜色,箭头颜色以及导航栏按钮的颜色
self.navigationController.navigationBar.barTintColor = [UIColor blackColor]; self.navigationControll ...
- ie11加载不了css的问题
ie11打开页面,竟然一点css都没有加载出来,而且是老大的电脑遇到了这个问题,啃爹啊 上网查资料,做了如下修改: 1.pc端最好不要用h5来写页面,兼容性是个头疼的问题,切记切记(移动端可以用H5来 ...
- PHP学习笔记三十八【下载】
<?php //演示下载一个图片 $file_name="SunSet.jpg"; $file_name=iconv("utf-8","gb23 ...
- JS 根据Url参数名称来获取对应的值 方法封装
function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- iOS-设计模式之Block
Block是代码块, Block定义 返回值 (^ 块名)(参数1,参数2…); 在定义Block的时候可以使用typedef 重命名一下. typedef void(^blockName)(NSSt ...
- $(document).ready(function(){})和window.onload=function(){}的比较
这两个函数想必每个前端开发者都不会很陌生,但是很了解用法的人估计就比较少了,博主也是最近才开始注意到这两个函数的区别. 首先$(document).ready(function(){})等同于$(). ...
- Python学习笔记6(列表生成式)
1.生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, 3 ...