文档章节

Java连接数据库

火力全開
 火力全開
发布于 2016/10/06 00:42
字数 1679
阅读 6
收藏 0
点赞 0
评论 0

创建一个以JDBC连接数据库的程序,包含7个步骤:

1、加载JDBC驱动程序:

在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机),这通过java.lang.Class类的静态方法forName(String className)实现。
例如:

try{   
	//加载MySql的驱动类   
	Class.forName("com.mysql.jdbc.Driver") ;   
}catch(ClassNotFoundException e){   
	System.out.println("找不到驱动程序类 ,加载驱动失败!");   
	e.printStackTrace();  
}

成功加载后,会将Driver类的实例注册到DriverManager类中。

2、提供JDBC连接的URL

• 连接URL定义了连接数据库时的协议、子协议、数据源标识。
• 书写形式:协议:子协议:数据源标识
协议:在JDBC中总是以jdbc开始
子协议:是桥连接的驱动程序或是数据库管理系统名称。
数据源标识:标记找到数据库来源的地址与连接端口。
例如:(MySql的连接URL)

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk;

useUnicode=true:表示使用Unicode字符集。如果characterEncoding设置为gb2312或GBK,本参数必须设置为true 。characterEncoding=gbk:字符编码方式。

3、创建数据库的连接

•要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,该对象就代表一个数据库的连接。
•使用DriverManager的getConnectin(String url , String username , String password )方法传入指定的欲连接的数据库的路径、数据库的用户名和密码来获得。

例如:

//连接MySql数据库,用户名和密码都是root   
String url = "jdbc:mysql://localhost:3306/test" ;    
String username = "root" ;   
String password = "root" ;   
try{   
	Connection con =    
	DriverManager.getConnection(url , username , password ) ;   
}catch(SQLException se){   
	System.out.println("数据库连接失败!");   
	se.printStackTrace() ;   
}

4、创建一个Statement

•要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3
种类型:
1、执行静态SQL语句。通常通过Statement实例实现。
2、执行动态SQL语句。通常通过PreparedStatement实例实现。
3、执行数据库存储过程。通常通过CallableStatement实例实现。
具体的实现方式:

Statement stmt = con.createStatement() ;   
PreparedStatement pstmt = con.prepareStatement(sql) ;   
CallableStatement cstmt =    
con.prepareCall("{CALL demoSp(? , ?)}") ;

5、执行SQL语句

Statement接口提供了三种执行SQL语句的方法:executeQuery 、executeUpdate和execute
1、ResultSet executeQuery(String sqlString):执行查询数据库的SQL语句,返回一个结果集(ResultSet)对象。
2、int executeUpdate(String sqlString):用于执行INSERT、UPDATE或DELETE语句以及SQL DDL语句,如:CREATE TABLE和DROP TABLE等
3、execute(sqlString):用于执行返回多个结果集、多个更新计数或二者组合的语句。
具体实现的代码:

ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;   
int rows = stmt.executeUpdate("INSERT INTO ...") ;   
boolean flag = stmt.execute(String sql) ;

6、处理结果

两种情况:
1、执行更新返回的是本次操作影响到的记录数。
2、执行查询返回的结果是一个ResultSet对象。
• ResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些
行中数据的访问。
• 使用结果集(ResultSet)对象的访问方法获取数据:

while(rs.next()){   
	String name = rs.getString("name") ;   
	String pass = rs.getString(1) ; // 此方法比较高效   
}
(列是从左到右编号的,并且从列1开始)

7、关闭JDBC对象

操作完成以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声
明顺序相反:
1、关闭记录集
2、关闭声明
3、关闭连接对象


if(rs != null){   // 关闭记录集   
	try{   
		rs.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}   
if(stmt != null){   // 关闭声明   
	try{   
		stmt.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}   
if(conn != null){  // 关闭连接对象   
	try{   
		conn.close() ;   
	}catch(SQLException e){   
		e.printStackTrace() ;   
	}   
}


---------------------------------分割线---------------------------------

一、如何通过JDBC访问数据库

JDBC:Java DataBase Connectivity数据库连接用于在java程序中实现操作数据库。一般步骤如下:

加载JDBC驱动器。将数据库的JDBC驱动加载到classPath,web工程的一般放大WEB-INF/lib/下,java工程项目的则用build path将jar包导进去。
加载JDBC驱动,并将其注册到DriverManager中,一般使用反射Class.forName(String driveName).
简历数据库连接,取得Connection对象。一般通过Driver.getConnection(url,username,password)方法实现。
建立Statement对象或是PreparedStatement对象。
执行SQL语句
访问结果集ResultSet
依次将ResultSet、Statement、PreparedStatement、Connection对象关闭,释放掉所占用的资源。
实例代码如下:

首先创建一张表:

create tabel Employee(
	id int primarykey,
	name varchar(20),
	age int
);

示例程序:

import java.sql.*;
 
public class Test{
 
	public static void main(String args[]){
	 
		String user = "user1";
		String password = "pwd";
		String url = "jdbc:mysql://127.0.0.1:3306/Test";
		String driver = "com.mysql.jdbc.Driver";
		Connection con = null;
		Statement stmt = null;
		ResultSet rs = null;
		 
		try{
			Class.forName(driver);
			con=DriverManager.getConnection(url,user,password);
			stmt=con.createStatement();
			stmt.execute("insert into Employee values(1,'James1',36)");
			rs=stmt.executeQuery("select * from Employee");
			while(rs.next()){
				System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getInt(3));
			}
		}catch(SQLException e){
			System.out.println(e.getMessage());
		}finally{
			try{
				if(rs!=null) rs.close();
				if(stmt!=null) stmt.close();
				if(con!=null) con.close();
				 
			}catch(SQLException =e){
				System.out.println("fe:"+e.getMessage());
			}
		}
	}
}

二、Statement、PreparedStatement和CallableStatement的区别

Statement一般用于执行不带参数的SQL语句,并返回生成的结果,每次执行SQL语句时,数据库都要编译该SQL语句。
PerparedStatement表示 与的SQL语句对象,用于执行带参数的SQL语句。效率高、安全性好、代码可读性和可维护性好。(推荐使用)
CallableStatement用来调用数据库中存储过程的接口,如果有输出参数要注册,说明是输出参数。
举例说明PreparedStatement:

 

import java.sql.*;
 
public class Test{
 
	public static void main(String args[]){
		String user="user1";
		String password="pwd";
		String url="jdbc:mysql://127.0.0.1:3306/Test";
		String driver="com.mysql.jdbc.Driver";
		Connection con=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		 
		try{
			Class.forName(driver);
			con=DriverManager.getConnection(url,user,password);
			ps=con.preparedStatement("select * from Emloyee where id=?");
			ps.setInt(1,1);
			rs=ps.executeQuery();
			while(rs.next()){
				System.out.println(rs.getInt(1)+""+rs.getString(2)+""+rs.getInt(3));
			}
		}catch(SQLException e){
			System.out.println(e.getMessage());
		}finally{
			try{
				if(rs!=null)rs.close();
				if(ps!=null)ps.close();
				if(con!=null)con.close();
			}catch(SQLException fe){
				System.out.println("fe:"+fe.getMessage());
			}
		}
	}
}

三、getString()方法和getObject()方法有什么区别

在数据量很大的时候直接调用ResultSet方法的getString、getInt、getData方法会抛出异常:OrcaleException。此时应该使用getObject方法。因为其他方法会将查询结果都加载到内存中,如果数据量超过内存上限,则会导致异常。

四、JDBC与Hibernate有什么区别

Hibernate是JDBC的封装。采用配置文件的形式将数据库连接参数写到XML文件中。(下次再研究Hibernate)

package com.test;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 *
 * @author Hongten</br>
 * @date 2012-7-16
 *
 */
public class JDBCTest {
    public static void main(String[] args) {
        String driver = "com.mysql.jdbc.Driver";
        String dbName = "spring";
        String passwrod = "root";
        String userName = "root";
        String url = "jdbc:mysql://localhost:3308/" + dbName;
        String sql = "select * from users";
 
        try {
            Class.forName(driver);
            Connection conn = DriverManager.getConnection(url, userName,
                    passwrod);
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                System.out.println("id : " + rs.getInt(1) + " name : "
                        + rs.getString(2) + " password : " + rs.getString(3));
            }
 
            // 关闭记录集
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭声明
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
            // 关闭链接对象
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}

 

原文链接

Java数据库操作
完整java开发中JDBC连接数据库代码和步骤

本文转载自:http://www.kuqin.com/shuoit/20150901/347855.html

火力全開
粉丝 19
博文 199
码字总数 17966
作品 0
卢湾
高级程序员
JavaWeb07-HTML篇笔记(二)

1.1 案例一:使用JDBC完成CRUD的操作:1.1.1 需求: 对分类管理使用JDBC进行CRUD的操作. 1.1.2 分析:1.1.2.1 技术分析: 【JDBC的概述】 Ø JDBC:Java DataBase Connectivity Java数据库的连...

我是小谷粒 ⋅ 05/16 ⋅ 0

主流Java数据库连接池比较及前瞻

本文转载自微信公众号「工匠小猪猪的技术世界」 主流数据库连接池 常用的主流开源数据库连接池有C3P0、DBCP、Tomcat Jdbc Pool、BoneCP、Druid等 C3p0: 开源的JDBC连接池,实现了数据源和JND...

渣渣(Charles) ⋅ 04/30 ⋅ 0

使用JDBC操作SAP云平台上的HANA数据库

本文假设您对JDBC(Java Database Connectivity)有最基本的了解。您也可以将其同ADBC(ABAP Database Connectivity)做对比,细节请参考我的博客ADBC and JDBC 这篇文章分为两部分,第一部分内容...

JerryWang_SAP ⋅ 05/19 ⋅ 0

【J2EE】之常用的接口和协议

前言 初接触J2EE,会遇到很多之前没有遇到过的术语,下面我们来简单地汇总一下这些接口和协议吧。 各大接口和协议详解 JDBC 1.定义:Java数据库连接 2.地位:用于Java应用程序连接数据库的标...

m18633778874 ⋅ 04/26 ⋅ 0

Spring之jdbc Template实现CRUD操作

Spring为各种持久化技术都提供了简单操作的模板回调。比如jdbc、hibernate、Mybatis以及JPA等。 这里我们就以JDBC为例,看看JDBC template怎么实现CRUD操作。 JdbcTemplate主要提供以下几类方...

Java攻城玩家 ⋅ 05/31 ⋅ 0

Java开发每日复盘2018_0511

今天主要跟大家来分享一下「MyBatis的使用」 一句话概括: 「MyBatis」,是一种介于Java对象与数据库(MySql等)之间的用于持久化存储的框架。 使用「MyBatis」好处: 可以更高效的,基于该框...

ZeroOSTalk ⋅ 05/13 ⋅ 0

MyCAT SQL ON MongoDB

概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 总体流程,让你有个整体...

wangchen1999 ⋅ 05/02 ⋅ 0

Confluence 6 配置一个数据源连接

这个指南指导你如何配置使用 JNDI 数据源来连接到你的数据库。使用这个类型的连接,Confluence 将会询问应用服务器(Tomcat)中你配置的连接信息。 如果你希望使用 JDBC 的数据库连接方式,请...

honeymose ⋅ 06/08 ⋅ 0

连接池详解,c3p0与dbcp的区别!

连接池: 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。这项技术能明显提高对数据库操作的性能。 连接池的好处: (1)对于大多数应用程序,当它们正...

IT_laobai ⋅ 06/20 ⋅ 0

Hive在windows端的图形化连接工具

Hive官网上介绍过几种windows端的连接方式,本文主要介绍如何使用Oracle SQL Developer连接hive。 1.下载并解压Oracle SQL Developer 从 http://www.oracle.com/technetwork/developer-tool...

Matthew.L ⋅ 05/29 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 39分钟前 ⋅ 0

vim使用手册--配对括号的查找

1、把光标放在标记有(、[或{处。 2、按%字符 3、此时光标的位置应当在配对的括号处 4、再次按%就可以跳回配对的第一个括号处。

dragon_tech ⋅ 43分钟前 ⋅ 0

c++ 、object-c printf,%02X和%x有什么区别 ?

%x即按十六进制输出,英文字母小写,右对齐。 %02X有以下变化:英文字母变大写,如果输出字符不足两位的,输出两位宽度,右对齐,空的一位补0。超过两位的,全部输出。 如果不用 %02x 会出现...

yizhichao ⋅ 48分钟前 ⋅ 0

Spring源码解析(七)——实例创建(中)

前言 上一节讲到了,Spring 会根据实例的作用域执行不同的创建逻辑,分别是 Singleton、Prototype、其他 Scope,其中 Singleton 会调用 getSingleton 从缓存中获取,缓存中没有才会创建实例;...

MarvelCode ⋅ 48分钟前 ⋅ 0

Thrift RPC实战(六) spring集成thrift

1.服务端设置 对泛型Thrift Service的支持, 通过采用spring配置以及反射的方式来实现.对于一个服务提供者来说,需要提供端口,接口以及接口实现类,因此在接口中spring配置文件中配置如下 <!...

lemonLove ⋅ 50分钟前 ⋅ 0

oracle11g自动分区使用

为什么使用自动分区? 在oracle11g之前,oracle是不支持自动分区功能的,这就可能导致我们系统在运行一段时间之后,就需要看看分区是否创建或者写触发器进行创建分区,否则就会导致数据无法入...

strict_nerd ⋅ 今天 ⋅ 0

Spring mvc ViewResolver视图解析器实现机制

概要 我们在controller里面经常这样return一个ModelAndView。 return new ModelAndView("userList", "users", userList); DispatcherServlet 靠 ViewResolver 把 userList 解析为 /WEB-INF......

轨迹_ ⋅ 今天 ⋅ 0

策略模式

1.策略模式 策略模式是同一个行为的不同处理办法。策略模式和简单工厂模式的区别:1.策略模式主要是方法的执行方式,工厂模式要获取的对象。两者的侧重点不同。 ...

Cobbage ⋅ 今天 ⋅ 0

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 今天 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部